X86 byval copies no longer always_inline. <rdar://problem/8706628>
authorStuart Hastings <stuart@apple.com>
Wed, 9 Mar 2011 21:10:30 +0000 (21:10 +0000)
committerStuart Hastings <stuart@apple.com>
Wed, 9 Mar 2011 21:10:30 +0000 (21:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127359 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/byval-memcpy.ll [new file with mode: 0644]
test/CodeGen/X86/byval2.ll
test/CodeGen/X86/byval3.ll
test/CodeGen/X86/byval4.ll
test/CodeGen/X86/byval5.ll
test/CodeGen/X86/byval7.ll
test/CodeGen/X86/tailcallbyval64.ll

index 9ce0046f12b854ab21a416dba6fec89c65e0ec7b..38746b0dcbe525836737364e137623c0bca5e114 100644 (file)
@@ -1564,7 +1564,7 @@ CreateCopyOfByValArgument(SDValue Src, SDValue Dst, SDValue Chain,
   SDValue SizeNode = DAG.getConstant(Flags.getByValSize(), MVT::i32);
 
   return DAG.getMemcpy(Chain, dl, Dst, Src, SizeNode, Flags.getByValAlign(),
-                       /*isVolatile*/false, /*AlwaysInline=*/true,
+                       /*isVolatile*/false, /*AlwaysInline=*/false,
                        MachinePointerInfo(), MachinePointerInfo());
 }
 
diff --git a/test/CodeGen/X86/byval-memcpy.ll b/test/CodeGen/X86/byval-memcpy.ll
new file mode 100644 (file)
index 0000000..3f57f50
--- /dev/null
@@ -0,0 +1,10 @@
+; RUN: llc < %s -march=x86-64 | FileCheck %s
+; RUN: llc < %s -march=x86 | FileCheck %s
+; CHECK: _memcpy
+define void @foo([40000 x i32] *%P) nounwind {
+  call void @bar([40000 x i32] * byval align 1 %P)
+  ret void
+}
+
+declare void @bar([40000 x i32] *%P )
+    
index 71129f5f6c9bcce8258e5802df44b61889b2b4eb..0b6dfc9e90c20b169553813a3163724d3111a7b7 100644 (file)
@@ -1,5 +1,5 @@
-; RUN: llc < %s -march=x86-64 | grep rep.movsq | count 2
-; RUN: llc < %s -march=x86    | grep rep.movsl | count 2
+; RUN: llc < %s -march=x86-64 | egrep {rep.movsq|memcpy} | count 2
+; RUN: llc < %s -march=x86    | egrep {rep.movsl|memcpy} | count 2
 
 %struct.s = type { i64, i64, i64, i64, i64, i64, i64, i64,
                    i64, i64, i64, i64, i64, i64, i64, i64,
index 504e0bed791680e8fa997acd298a85dcfed60688..29cb41c176fcac833f26cfb6f93ec2f406185a09 100644 (file)
@@ -1,5 +1,5 @@
-; RUN: llc < %s -march=x86-64 | grep rep.movsq | count 2
-; RUN: llc < %s -march=x86 | grep rep.movsl | count 2
+; RUN: llc < %s -march=x86-64 | egrep {rep.movsq|memcpy} | count 2
+; RUN: llc < %s -march=x86 | egrep {rep.movsl|memcpy} | count 2
 
 %struct.s = type { i32, i32, i32, i32, i32, i32, i32, i32,
                    i32, i32, i32, i32, i32, i32, i32, i32,
index 4db9d650b439c5dca9c22daebc8cda0b73b6fe13..bd745f04a04cb35b824322ebf69d8002f0a6a43d 100644 (file)
@@ -1,5 +1,5 @@
-; RUN: llc < %s -march=x86-64 | grep rep.movsq | count 2
-; RUN: llc < %s -march=x86 | grep rep.movsl     | count 2
+; RUN: llc < %s -march=x86-64 | egrep {rep.movsq|memcpy} | count 2
+; RUN: llc < %s -march=x86 | egrep {rep.movsl|memcpy}   | count 2
 
 %struct.s = type { i16, i16, i16, i16, i16, i16, i16, i16,
                    i16, i16, i16, i16, i16, i16, i16, i16,
index 69c115b97326e7f038bdc9678092671e9a081ff7..c13de4b5afc5813dc9fa2b9c3ebbc21dfe4a6532 100644 (file)
@@ -1,5 +1,5 @@
-; RUN: llc < %s -march=x86-64 | grep rep.movsq | count 2
-; RUN: llc < %s -march=x86 | grep rep.movsl     | count 2
+; RUN: llc < %s -march=x86-64 | egrep {rep.movsq|memcpy} | count 2
+; RUN: llc < %s -march=x86 | egrep {rep.movsl|memcpy}   | count 2
 
 %struct.s = type { i8, i8, i8, i8, i8, i8, i8, i8,
                    i8, i8, i8, i8, i8, i8, i8, i8,
index 686ed9c74dde12f10db7de0f8306155b0f102b5d..8e3aa0bbdeac1e4da55fc099497c1b5437fe9b9b 100644 (file)
@@ -8,10 +8,8 @@ define i32 @main() nounwind  {
 entry:
 ; CHECK: main:
 ; CHECK: movl $1, (%esp)
-; CHECK: leal 16(%esp), %edi
-; CHECK: movl $36, %ecx
-; CHECK: leal 160(%esp), %esi
-; CHECK: rep;movsl
+; CHECK: movl ${{36|144}},
+; CHECK: {{rep;movsl|memcpy}}
        %s = alloca %struct.S           ; <%struct.S*> [#uses=2]
        %tmp15 = getelementptr %struct.S* %s, i32 0, i32 0              ; <<2 x i64>*> [#uses=1]
        store <2 x i64> < i64 8589934595, i64 1 >, <2 x i64>* %tmp15, align 16
index 7c685b85807e0faa412e1c65425441b8f5791a30..b4a2e0298652a6119fbeeee19604bba89772925f 100644 (file)
@@ -1,6 +1,6 @@
 ; RUN: llc < %s -march=x86-64  -tailcallopt  | grep TAILCALL
 ; Expect 2 rep;movs because of tail call byval lowering.
-; RUN: llc < %s -march=x86-64  -tailcallopt  | grep rep | wc -l | grep 2
+; RUN: llc < %s -march=x86-64  -tailcallopt  | egrep {rep|memcpy} | wc -l | grep 2
 ; A sequence of copyto/copyfrom virtual registers is used to deal with byval
 ; lowering appearing after moving arguments to registers. The following two
 ; checks verify that the register allocator changes those sequences to direct