@@ -21,12 +21,12 @@ Outer passAndReturnOuterByVal(Outer arg) { return arg; }
2121// CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_arg
2222/* How the arg is passed by value is ABI-specific, but the pointer must be aligned.
2323 * When the argument is passed as a byte array and copied into a stack alloc, that stack alloca must be aligned. */
24- // CHECK: {{(align 32 %arg|%arg = alloca %align.Outer, align 32)}}
24+ // CHECK: {{(align 32 %arg|%arg = alloca %align.Outer, align 32|call void @llvm.memcpy.* %.sret_arg,.* %arg )}}
2525
2626Inner passAndReturnInnerByVal (Inner arg) { return arg; }
2727// CHECK: define{{.*}} void @{{.*}}_D5align23passAndReturnInnerByValFSQBh5InnerZQl
2828// CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_arg
29- // CHECK: {{(align 32 %arg|%arg = alloca %align.Inner, align 32)}}
29+ // CHECK: {{(align 32 %arg|%arg = alloca %align.Inner, align 32|call void @llvm.memcpy.* %.sret_arg,.* %arg )}}
3030
3131void main () {
3232 Outer outer;
@@ -61,11 +61,11 @@ void main() {
6161 // CHECK: call{{.*}} void @{{.*}}_D5align23passAndReturnOuterByValFSQBh5OuterZQl
6262 // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_tmp
6363 // The argument is either passed by aligned (optimizer hint) pointer or as an array of i32/64 and copied into an aligned stack slot inside the callee.
64- // CHECK-SAME: {{(align 32 % |\[[0-9]+ x i..\])}}
64+ // CHECK-SAME: {{(align 32 |\[[0-9]+ x i..\])}}
6565
6666 inner = passAndReturnInnerByVal(inner);
6767 // CHECK: call{{.*}} void @{{.*}}_D5align23passAndReturnInnerByValFSQBh5InnerZQl
6868 // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_tmp
6969 // The argument is either passed by aligned (optimizer hint) pointer or as an array of i32/64 and copied into an aligned stack slot inside the callee.
70- // CHECK-SAME: {{(align 32 % |\[[0-9]+ x i..\])}}
70+ // CHECK-SAME: {{(align 32 |\[[0-9]+ x i..\])}}
7171}
0 commit comments