From: Diana Picus Date: Thu, 30 Nov 2017 12:23:44 +0000 (+0000) Subject: [ARM GlobalISel] Bail out for byval X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=11acbdedb4657c7ac66fd2efcbfe662efe770f31;p=llvm [ARM GlobalISel] Bail out for byval Fallback if we have a byval parameter or argument since we don't support them yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319428 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMCallLowering.cpp b/lib/Target/ARM/ARMCallLowering.cpp index 1c2df39d05a..7338ac8bcb5 100644 --- a/lib/Target/ARM/ARMCallLowering.cpp +++ b/lib/Target/ARM/ARMCallLowering.cpp @@ -434,9 +434,12 @@ bool ARMCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder, auto &MBB = MIRBuilder.getMBB(); auto DL = MF.getDataLayout(); - for (auto &Arg : F.args()) + for (auto &Arg : F.args()) { if (!isSupportedType(DL, TLI, Arg.getType())) return false; + if (Arg.hasByValOrInAllocaAttr()) + return false; + } CCAssignFn *AssignFn = TLI.CCAssignFnForCall(F.getCallingConv(), F.isVarArg()); @@ -529,6 +532,9 @@ bool ARMCallLowering::lowerCall(MachineIRBuilder &MIRBuilder, if (!Arg.IsFixed) return false; + if (Arg.Flags.isByVal()) + return false; + SmallVector Regs; splitToValueTypes(Arg, ArgInfos, MF, [&](unsigned Reg, uint64_t Offset) { Regs.push_back(Reg); diff --git a/test/CodeGen/ARM/GlobalISel/arm-unsupported.ll b/test/CodeGen/ARM/GlobalISel/arm-unsupported.ll index bdba5356390..f9d41d9a38f 100644 --- a/test/CodeGen/ARM/GlobalISel/arm-unsupported.ll +++ b/test/CodeGen/ARM/GlobalISel/arm-unsupported.ll @@ -113,4 +113,19 @@ define i32 @test_thread_local_global() { ret i32 %v } +%byval.class = type { i32 } + +define void @test_byval_arg(%byval.class* byval %x) { +; CHECK: remark: {{.*}} unable to lower arguments: void (%byval.class*)* +; CHECK-LABEL: warning: Instruction selection used fallback path for test_byval + ret void +} + +define void @test_byval_param(%byval.class* %x) { +; CHECK: remark: {{.*}} unable to translate instruction: call +; CHECK-LABEL: warning: Instruction selection used fallback path for test_byval_param + call void @test_byval_arg(%byval.class* byval %x) + ret void +} + attributes #0 = { "target-features"="+thumb-mode" }