From 024937995e2a118c8fc14bfffee0834884be0e19 Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Mon, 27 Oct 2025 11:09:59 +0800 Subject: [PATCH 1/2] [LLVM21] codegen/align.d these are now `memcpy`'d and `captures(none)` --- tests/codegen/align.d | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/codegen/align.d b/tests/codegen/align.d index 9e338a30763..1d6affd9866 100644 --- a/tests/codegen/align.d +++ b/tests/codegen/align.d @@ -21,12 +21,12 @@ Outer passAndReturnOuterByVal(Outer arg) { return arg; } // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_arg /* How the arg is passed by value is ABI-specific, but the pointer must be aligned. * When the argument is passed as a byte array and copied into a stack alloc, that stack alloca must be aligned. */ -// CHECK: {{(align 32 %arg|%arg = alloca %align.Outer, align 32)}} +// CHECK: {{(align 32 %arg|%arg = alloca %align.Outer, align 32|call void @llvm.memcpy)}} Inner passAndReturnInnerByVal(Inner arg) { return arg; } // CHECK: define{{.*}} void @{{.*}}_D5align23passAndReturnInnerByValFSQBh5InnerZQl // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_arg -// CHECK: {{(align 32 %arg|%arg = alloca %align.Inner, align 32)}} +// CHECK: {{(align 32 %arg|%arg = alloca %align.Inner, align 32|call void @llvm.memcpy)}} void main() { Outer outer; @@ -61,11 +61,11 @@ void main() { // CHECK: call{{.*}} void @{{.*}}_D5align23passAndReturnOuterByValFSQBh5OuterZQl // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_tmp // 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. - // CHECK-SAME: {{(align 32 %|\[[0-9]+ x i..\])}} + // CHECK-SAME: {{(align 32 .*%|\[[0-9]+ x i..\])}} inner = passAndReturnInnerByVal(inner); // CHECK: call{{.*}} void @{{.*}}_D5align23passAndReturnInnerByValFSQBh5InnerZQl // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_tmp // 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. - // CHECK-SAME: {{(align 32 %|\[[0-9]+ x i..\])}} + // CHECK-SAME: {{(align 32 .*%|\[[0-9]+ x i..\])}} } From 070541f4adc934c5bcaf7a3d28588012b570f9eb Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Thu, 6 Nov 2025 08:04:48 +0800 Subject: [PATCH 2/2] Fix regex for `captures(none)` --- tests/codegen/align.d | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/codegen/align.d b/tests/codegen/align.d index 1d6affd9866..84e3857f052 100644 --- a/tests/codegen/align.d +++ b/tests/codegen/align.d @@ -61,11 +61,11 @@ void main() { // CHECK: call{{.*}} void @{{.*}}_D5align23passAndReturnOuterByValFSQBh5OuterZQl // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_tmp // 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. - // CHECK-SAME: {{(align 32 .*%|\[[0-9]+ x i..\])}} + // CHECK-SAME: {{(align 32 ( captures\(none\) )?%|\[[0-9]+ x i..\])}} inner = passAndReturnInnerByVal(inner); // CHECK: call{{.*}} void @{{.*}}_D5align23passAndReturnInnerByValFSQBh5InnerZQl // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_tmp // 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. - // CHECK-SAME: {{(align 32 .*%|\[[0-9]+ x i..\])}} + // CHECK-SAME: {{(align 32 ( captures\(none\) )?%|\[[0-9]+ x i..\])}} }