]> granicus.if.org Git - llvm/commitdiff
[GlobalISel][X86] LowerCall, for now don't handel ByValue function arguments.
authorIgor Breger <igor.breger@intel.com>
Mon, 21 Aug 2017 08:59:59 +0000 (08:59 +0000)
committerIgor Breger <igor.breger@intel.com>
Mon, 21 Aug 2017 08:59:59 +0000 (08:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311321 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86CallLowering.cpp
test/CodeGen/X86/GlobalISel/x86_64-fallback.ll

index cbe9e60864d368af08fe5904c4c3f3a919bfa747..1a3f00cc250b32724440b40433174617255b0c86 100644 (file)
@@ -322,6 +322,11 @@ bool X86CallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
 
   SmallVector<ArgInfo, 8> SplitArgs;
   for (const auto &OrigArg : OrigArgs) {
+
+    // TODO: handle not simple cases.
+    if (OrigArg.Flags.isByVal())
+      return false;
+
     if (!splitToValueTypes(OrigArg, SplitArgs, DL, MRI,
                            [&](ArrayRef<unsigned> Regs) {
                              MIRBuilder.buildUnmerge(Regs, OrigArg.Reg);
index 2743f882b2e417b4e8ecef39b356f686b514bf3e..4427d91acbcb57399462410dbb029f165f761f7d 100644 (file)
@@ -16,3 +16,14 @@ define void @test_x86_fp80_dump(x86_fp80* %ptr){
   ret void
 }
 
+; Check that we fallback on byVal argument
+; FALLBACK-WITH-REPORT-ERR: remark: <unknown>:0:0: unable to translate instruction: call: '  call void @ScaleObjectOverwrite_3(%struct.PointListStruct* %index, %struct.PointListStruct* byval %index)' (in function: ScaleObjectOverwrite_2)
+; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for ScaleObjectOverwrite_2
+; FALLBACK-WITH-REPORT-OUT-LABEL: ScaleObjectOverwrite_2:
+%struct.PointListStruct = type { i8*, i8* }
+declare void @ScaleObjectOverwrite_3(%struct.PointListStruct* %index, %struct.PointListStruct* byval %index2)
+define void @ScaleObjectOverwrite_2(%struct.PointListStruct* %index) {
+entry:
+  call void @ScaleObjectOverwrite_3(%struct.PointListStruct* %index, %struct.PointListStruct* byval %index)
+  ret void
+}