Skip to content

Commit 4d6e691

Browse files
authored
Add the initializes attribute inference (#117104)
reland #97373 after fixing clang tests. Confirmed with "ninja check-llvm" and "ninja check-clang"
1 parent 69cc3f0 commit 4d6e691

33 files changed

+1022
-127
lines changed

clang/test/CodeGen/AArch64/pure-scalable-args.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ PST test_return(PST *p) {
292292
return *p;
293293
}
294294
// CHECK-AAPCS: define dso_local <{ <vscale x 16 x i1>, <vscale x 2 x double>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 16 x i8>, <vscale x 16 x i1> }> @test_return(ptr
295-
// CHECK-DARWIN: define void @test_return(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.PST) align 16 %agg.result, ptr nocapture noundef readonly %p)
295+
// CHECK-DARWIN: define void @test_return(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.PST) align 16 initializes((0, 96)) %agg.result, ptr nocapture noundef readonly %p)
296296

297297
// Corner case of 1-element aggregate
298298
// p->x -> q0
@@ -308,8 +308,8 @@ SmallPST test_return_small_pst(SmallPST *p) {
308308
BigPST test_return_big_pst(BigPST *p) {
309309
return *p;
310310
}
311-
// CHECK-AAPCS: define dso_local void @test_return_big_pst(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.BigPST) align 16 %agg.result, ptr nocapture noundef readonly %p)
312-
// CHECK-DARWIN: define void @test_return_big_pst(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.BigPST) align 16 %agg.result, ptr nocapture noundef readonly %p)
311+
// CHECK-AAPCS: define dso_local void @test_return_big_pst(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.BigPST) align 16 initializes((0, 176)) %agg.result, ptr nocapture noundef readonly %p)
312+
// CHECK-DARWIN: define void @test_return_big_pst(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.BigPST) align 16 initializes((0, 176)) %agg.result, ptr nocapture noundef readonly %p)
313313

314314
// Variadic arguments are unnamed, PST passed indirectly.
315315
// (Passing SVE types to a variadic function currently unsupported by

clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ typedef int8_t vec_int8 __attribute__((vector_size(N / 8)));
5959
// CHECK128-NEXT: ret <16 x i8> [[CASTFIXEDSVE]]
6060

6161
// CHECK-LABEL: define{{.*}} void @f2(
62-
// CHECK-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret(<[[#div(VBITS,8)]] x i8>) align 16 %agg.result, ptr nocapture noundef readonly %0)
62+
// CHECK-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret(<[[#div(VBITS,8)]] x i8>) align 16 initializes((0, [[#div(VBITS,8)]])) %agg.result, ptr nocapture noundef readonly %0)
6363
// CHECK-NEXT: entry:
6464
// CHECK-NEXT: [[X:%.*]] = load <[[#div(VBITS,8)]] x i8>, ptr [[TMP0:%.*]], align 16, [[TBAA6:!tbaa !.*]]
6565
// CHECK-NEXT: [[TMP1:%.*]] = tail call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)

clang/test/CodeGen/SystemZ/systemz-inline-asm.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ double test_f64(double f, double g) {
123123
long double test_f128(long double f, long double g) {
124124
asm("axbr %0, %2" : "=f" (f) : "0" (f), "f" (g));
125125
return f;
126-
// CHECK: define{{.*}} void @test_f128(ptr dead_on_unwind noalias nocapture writable writeonly sret(fp128) align 8 [[DEST:%.*]], ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1)
126+
// CHECK: define{{.*}} void @test_f128(ptr dead_on_unwind noalias nocapture writable writeonly sret(fp128) align 8 initializes((0, 16)) [[DEST:%.*]], ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1)
127127
// CHECK: %f = load fp128, ptr %0
128128
// CHECK: %g = load fp128, ptr %1
129129
// CHECK: [[RESULT:%.*]] = tail call fp128 asm "axbr $0, $2", "=f,0,f"(fp128 %f, fp128 %g)

clang/test/CodeGen/SystemZ/zos-mixed-ptr-sizes.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -12,42 +12,42 @@ struct Foo {
1212
void use_foo(struct Foo *f);
1313

1414
void ptr32_to_ptr(struct Foo *f, int * __ptr32 i) {
15-
// X64-LABEL: define void @ptr32_to_ptr(ptr noundef %f, ptr addrspace(1) noundef %i)
15+
// X64-LABEL: define void @ptr32_to_ptr(ptr noundef initializes((8, 16)) %f, ptr addrspace(1) noundef %i)
1616
// X64: %{{.+}} = addrspacecast ptr addrspace(1) %i to ptr
1717
f->p64= i;
1818
use_foo(f);
1919
}
2020

2121
void ptr_to_ptr32(struct Foo *f, int *i) {
22-
// X64-LABEL: define void @ptr_to_ptr32(ptr noundef %f, ptr noundef %i)
22+
// X64-LABEL: define void @ptr_to_ptr32(ptr noundef initializes((0, 4)) %f, ptr noundef %i)
2323
// X64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(1)
2424
f->p32 = i;
2525
use_foo(f);
2626
}
2727

2828
void ptr32_to_ptr32(struct Foo *f, int * __ptr32 i) {
29-
// X64-LABEL: define void @ptr32_to_ptr32(ptr noundef %f, ptr addrspace(1) noundef %i)
29+
// X64-LABEL: define void @ptr32_to_ptr32(ptr noundef initializes((0, 4)) %f, ptr addrspace(1) noundef %i)
3030
// X64-NOT: addrspacecast
3131
f->p32 = i;
3232
use_foo(f);
3333
}
3434

3535
void ptr_to_ptr32_explicit_cast(struct Foo *f, int *i) {
36-
// X64-LABEL: define void @ptr_to_ptr32_explicit_cast(ptr noundef %f, ptr noundef %i)
36+
// X64-LABEL: define void @ptr_to_ptr32_explicit_cast(ptr noundef initializes((0, 4)) %f, ptr noundef %i)
3737
// X64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(1)
3838
f->p32 = (int * __ptr32)i;
3939
use_foo(f);
4040
}
4141

4242
void test_indexing(struct Foo *f) {
43-
// X64-LABEL: define void @test_indexing(ptr noundef %f)
43+
// X64-LABEL: define void @test_indexing(ptr noundef initializes((16, 24)) %f)
4444
// X64: addrspacecast ptr addrspace(1) {{%[0-9]}} to ptr
4545
f->cp64 = ((char * __ptr32 *)1028)[1];
4646
use_foo(f);
4747
}
4848

4949
void test_indexing_2(struct Foo *f) {
50-
// X64-LABEL: define void @test_indexing_2(ptr noundef %f)
50+
// X64-LABEL: define void @test_indexing_2(ptr noundef initializes((16, 24)) %f)
5151
// X64: getelementptr inbounds i8, ptr addrspace(1) {{%[0-9]}}, i32 16
5252
// X64: getelementptr inbounds i8, ptr {{%[0-9]}}, i64 24
5353
f->cp64 = ((char *** __ptr32 *)1028)[1][2][3];
@@ -108,7 +108,7 @@ int test_misc_4() {
108108
}
109109

110110
void test_misc_5(struct Foo *f) {
111-
// X64-LABEL: define void @test_misc_5(ptr noundef %f)
111+
// X64-LABEL: define void @test_misc_5(ptr noundef initializes((16, 24)) %f)
112112
// X64: addrspacecast ptr addrspace(1) %0 to ptr
113113
f->cp64 = *(char* __ptr32 *)(PSA_PTR + PSAAOLD);
114114
use_foo(f);

clang/test/CodeGen/X86/ms-x86-intrinsics.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ __int64 test_mul128(__int64 Multiplier,
171171
__int64 *HighProduct) {
172172
return _mul128(Multiplier, Multiplicand, HighProduct);
173173
}
174-
// CHECK-X64-LABEL: define dso_local i64 @test_mul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{[a-z_ ]*}}%HighProduct)
174+
// CHECK-X64-LABEL: define dso_local i64 @test_mul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{[a-z_ ]*}} initializes((0, 8)) %HighProduct)
175175
// CHECK-X64: = sext i64 %Multiplier to i128
176176
// CHECK-X64: = sext i64 %Multiplicand to i128
177177
// CHECK-X64: = mul nsw i128 %
@@ -183,7 +183,7 @@ unsigned __int64 test_umul128(unsigned __int64 Multiplier,
183183
unsigned __int64 *HighProduct) {
184184
return _umul128(Multiplier, Multiplicand, HighProduct);
185185
}
186-
// CHECK-X64-LABEL: define dso_local i64 @test_umul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{[a-z_ ]*}}%HighProduct)
186+
// CHECK-X64-LABEL: define dso_local i64 @test_umul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{[a-z_ ]*}} initializes((0, 8)) %HighProduct)
187187
// CHECK-X64: = zext i64 %Multiplier to i128
188188
// CHECK-X64: = zext i64 %Multiplicand to i128
189189
// CHECK-X64: = mul nuw i128 %

clang/test/CodeGen/arm-vfp16-arguments.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,6 @@ void test_hfa(hfa_t a) {}
7171

7272
hfa_t ghfa;
7373
hfa_t test_ret_hfa(void) { return ghfa; }
74-
// CHECK-SOFT: define{{.*}} void @test_ret_hfa(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.hfa_t) align 8 %agg.result)
74+
// CHECK-SOFT: define{{.*}} void @test_ret_hfa(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.hfa_t) align 8 initializes((0, 16)) %agg.result)
7575
// CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @test_ret_hfa()
7676
// CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.hfa_t @test_ret_hfa()

clang/test/CodeGen/arm-vfp16-arguments2.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,27 @@ struct S5 : B1 {
3737
B1 M[1];
3838
};
3939

40-
// CHECK-SOFT: define{{.*}} void @_Z2f12S1(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S1) align 8 %agg.result, [2 x i64] %s1.coerce)
40+
// CHECK-SOFT: define{{.*}} void @_Z2f12S1(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S1) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s1.coerce)
4141
// CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f12S1([2 x <2 x i32>] returned %s1.coerce)
4242
// CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S1 @_Z2f12S1(%struct.S1 returned %s1.coerce)
4343
struct S1 f1(struct S1 s1) { return s1; }
4444

45-
// CHECK-SOFT: define{{.*}} void @_Z2f22S2(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S2) align 8 %agg.result, [4 x i32] %s2.coerce)
45+
// CHECK-SOFT: define{{.*}} void @_Z2f22S2(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S2) align 8 initializes((0, 16)) %agg.result, [4 x i32] %s2.coerce)
4646
// CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f22S2([2 x <2 x i32>] returned %s2.coerce)
4747
// CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S2 @_Z2f22S2(%struct.S2 %s2.coerce)
4848
struct S2 f2(struct S2 s2) { return s2; }
4949

50-
// CHECK-SOFT: define{{.*}} void @_Z2f32S3(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S3) align 8 %agg.result, [2 x i64] %s3.coerce)
50+
// CHECK-SOFT: define{{.*}} void @_Z2f32S3(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S3) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s3.coerce)
5151
// CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f32S3([2 x <2 x i32>] returned %s3.coerce)
5252
// CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S3 @_Z2f32S3(%struct.S3 %s3.coerce)
5353
struct S3 f3(struct S3 s3) { return s3; }
5454

55-
// CHECK-SOFT: define{{.*}} void @_Z2f42S4(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S4) align 8 %agg.result, [2 x i64] %s4.coerce)
55+
// CHECK-SOFT: define{{.*}} void @_Z2f42S4(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S4) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s4.coerce)
5656
// CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f42S4([2 x <2 x i32>] returned %s4.coerce)
5757
// CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S4 @_Z2f42S4(%struct.S4 %s4.coerce)
5858
struct S4 f4(struct S4 s4) { return s4; }
5959

60-
// CHECK-SOFT: define{{.*}} void @_Z2f52S5(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S5) align 8 %agg.result, [2 x i64] %s5.coerce)
60+
// CHECK-SOFT: define{{.*}} void @_Z2f52S5(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S5) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s5.coerce)
6161
// CHECK-HARD: define{{.*}} arm_aapcs_vfpcc %struct.S5 @_Z2f52S5(%struct.S5 %s5.coerce)
6262
// CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S5 @_Z2f52S5(%struct.S5 %s5.coerce)
6363
struct S5 f5(struct S5 s5) { return s5; }

clang/test/CodeGen/isfpclass.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ int4 check_isfpclass_nan_strict_v4f32(float4 x) {
160160
}
161161

162162
// CHECK-LABEL: define dso_local void @check_isfpclass_nan_v4f64
163-
// CHECK-SAME: (ptr dead_on_unwind noalias nocapture writable writeonly sret(<4 x i64>) align 16 [[AGG_RESULT:%.*]], ptr nocapture noundef readonly [[TMP0:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {
163+
// CHECK-SAME: (ptr dead_on_unwind noalias nocapture writable writeonly sret(<4 x i64>) align 16 initializes((0, 32)) [[AGG_RESULT:%.*]], ptr nocapture noundef readonly [[TMP0:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {
164164
// CHECK-NEXT: entry:
165165
// CHECK-NEXT: [[X:%.*]] = load <4 x double>, ptr [[TMP0]], align 16, !tbaa [[TBAA2:![0-9]+]]
166166
// CHECK-NEXT: [[TMP1:%.*]] = fcmp uno <4 x double> [[X]], zeroinitializer

clang/test/CodeGen/math-libcalls-tbaa-indirect-args.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ long double powl(long double a, long double b);
5353
// CHECK-SPIR: [[CALL:%.*]] = tail call spir_func double @powl(double noundef [[A]], double noundef [[B]]) #[[ATTR3:[0-9]+]], !tbaa [[TBAA2:![0-9]+]]
5454
//
5555
// CHECK-MINGW32-LABEL: define dso_local void @test_powl(
56-
// CHECK-MINGW32-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret(x86_fp80) align 16 [[AGG_RESULT:%.*]], ptr nocapture noundef readonly [[TMP0:%.*]], ptr nocapture noundef readonly [[TMP1:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
56+
// CHECK-MINGW32-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret(x86_fp80) align 16 initializes((0, 10)) [[AGG_RESULT:%.*]], ptr nocapture noundef readonly [[TMP0:%.*]], ptr nocapture noundef readonly [[TMP1:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
5757
// CHECK-MINGW32: [[A:%.*]] = load x86_fp80, ptr [[TMP0]], align 16, !tbaa [[TBAA3:![0-9]+]]
5858
// CHECK-MINGW32: [[B:%.*]] = load x86_fp80, ptr [[TMP1]], align 16, !tbaa [[TBAA3]]
5959
// CHECK-MINGW32: store x86_fp80 [[A]], ptr [[BYVAL_TEMP:%.*]], align 16, !tbaa [[TBAA3]]
@@ -83,7 +83,7 @@ long double test_powl(long double a, long double b) {
8383
// CHECK-WIN64: [[CALL:%.*]] = tail call x86_fp80 @cargl(ptr noundef nonnull byval({ x86_fp80, x86_fp80 }) align 16 [[BYVAL_TEMP]]) #[[ATTR5]]
8484
//
8585
// CHECK-I686-LABEL: define dso_local void @test_cargl(
86-
// CHECK-I686-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ x86_fp80, x86_fp80 }) align 4 [[AGG_RESULT:%.*]], ptr nocapture noundef readonly byval({ x86_fp80, x86_fp80 }) align 4 [[CLD:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
86+
// CHECK-I686-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ x86_fp80, x86_fp80 }) align 4 initializes((0, 10), (12, 22)) [[AGG_RESULT:%.*]], ptr nocapture noundef readonly byval({ x86_fp80, x86_fp80 }) align 4 [[CLD:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
8787
// CHECK-I686: [[CLD_REAL:%.*]] = load x86_fp80, ptr [[CLD]], align 4
8888
// CHECK-I686: [[CLD_IMAG:%.*]] = load x86_fp80, ptr [[CLD_IMAGP:%.*]], align 4
8989
// CHECK-I686: store x86_fp80 [[CLD_REAL]], ptr [[BYVAL_TEMP:%.*]], align 4
@@ -93,7 +93,7 @@ long double test_powl(long double a, long double b) {
9393
// CHECK-I686: store x86_fp80 [[MUL_IR:%.*]], ptr [[AGG_RESULT_IMAGP:%.*]], align 4
9494
//
9595
// CHECK-PPC-LABEL: define dso_local void @test_cargl(
96-
// CHECK-PPC-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ ppc_fp128, ppc_fp128 }) align 16 [[AGG_RESULT:%.*]], ptr nocapture noundef readonly byval({ ppc_fp128, ppc_fp128 }) align 16 [[CLD:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
96+
// CHECK-PPC-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ ppc_fp128, ppc_fp128 }) align 16 initializes((0, 32)) [[AGG_RESULT:%.*]], ptr nocapture noundef readonly byval({ ppc_fp128, ppc_fp128 }) align 16 [[CLD:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
9797
// CHECK-PPC: [[CLD_REAL:%.*]] = load ppc_fp128, ptr [[CLD]], align 16
9898
// CHECK-PPC: [[CLD_IMAG:%.*]] = load ppc_fp128, ptr [[CLD_IMAGP:%.*]], align 16
9999
// CHECK-PPC: store ppc_fp128 [[CLD_REAL]], ptr [[BYVAL_TEMP:%.*]], align 16
@@ -103,7 +103,7 @@ long double test_powl(long double a, long double b) {
103103
// CHECK-PPC: store ppc_fp128 [[MUL_IR:%.*]], ptr [[AGG_RESULT_IMAGP:%.*]], align 16
104104
//
105105
// CHECK-ARM-LABEL: define dso_local void @test_cargl(
106-
// CHECK-ARM-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ double, double }) align 8 [[AGG_RESULT:%.*]], [2 x i64] noundef [[CLD_COERCE:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
106+
// CHECK-ARM-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ double, double }) align 8 initializes((0, 16)) [[AGG_RESULT:%.*]], [2 x i64] noundef [[CLD_COERCE:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
107107
// CHECK-ARM: [[CALL:%.*]] = tail call double @cargl([2 x i64] noundef [[CLD_COERCE]]) #[[ATTR2]], !tbaa [[TBAA3]]
108108
// CHECK-ARM: store double [[MUL_RL:%.*]], ptr [[AGG_RESULT]], align 8
109109
// CHECK-ARM: store double [[MUL_IR:%.*]], ptr [[AGG_RESULT_IMAGP:%.*]], align 8
@@ -121,7 +121,7 @@ long double test_powl(long double a, long double b) {
121121
// CHECK-AARCH: [[CALL:%.*]] = tail call fp128 @cargl([2 x fp128] noundef alignstack(16) [[CLD_COERCE]]) #[[ATTR2]], !tbaa [[TBAA2]]
122122
//
123123
// CHECK-SPIR-LABEL: define dso_local spir_func void @test_cargl(
124-
// CHECK-SPIR-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ double, double }) align 8 [[AGG_RESULT:%.*]], ptr nocapture noundef readonly byval({ double, double }) align 8 [[CLD:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
124+
// CHECK-SPIR-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ double, double }) align 8 initializes((0, 16)) [[AGG_RESULT:%.*]], ptr nocapture noundef readonly byval({ double, double }) align 8 [[CLD:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
125125
// CHECK-SPIR: [[CLD_REAL:%.*]] = load double, ptr [[CLD]], align 8
126126
// CHECK-SPIR: [[CLD_IMAG:%.*]] = load double, ptr [[CLD_IMAGP:%.*]], align 8
127127
// CHECK-SPIR: store double [[CLD_REAL]], ptr [[BYVAL_TEMP:%.*]], align 8
@@ -131,7 +131,7 @@ long double test_powl(long double a, long double b) {
131131
// CHECK-SPIR: store double [[MUL_IR:%.*]], ptr [[AGG_RESULT_IMAGP:%.*]], align 8
132132
//
133133
// CHECK-MINGW32-LABEL: define dso_local void @test_cargl(
134-
// CHECK-MINGW32-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ x86_fp80, x86_fp80 }) align 16 [[AGG_RESULT:%.*]], ptr nocapture noundef readonly [[CLD:%.*]]) local_unnamed_addr #[[ATTR0]] {
134+
// CHECK-MINGW32-SAME: ptr dead_on_unwind noalias nocapture writable writeonly sret({ x86_fp80, x86_fp80 }) align 16 initializes((0, 10), (16, 26)) [[AGG_RESULT:%.*]], ptr nocapture noundef readonly [[CLD:%.*]]) local_unnamed_addr #[[ATTR0]] {
135135
// CHECK-MINGW32: [[CLD_REAL:%.*]] = load x86_fp80, ptr [[CLD]], align 16
136136
// CHECK-MINGW32: [[CLD_IMAG:%.*]] = load x86_fp80, ptr [[CLD_IMAGP:%.*]], align 16
137137
// CHECK-MINGW32: store x86_fp80 [[CLD_REAL]], ptr [[BYVAL_TEMP:%.*]], align 16

clang/test/CodeGen/ms-mixed-ptr-sizes.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ struct Foo {
99
void use_foo(struct Foo *f);
1010
void test_sign_ext(struct Foo *f, int * __ptr32 __sptr i) {
1111
// X64-LABEL: define dso_local void @test_sign_ext({{.*}}ptr addrspace(270) noundef %i)
12-
// X86-LABEL: define dso_local void @test_sign_ext(ptr noundef %f, ptr noundef %i)
12+
// X86-LABEL: define dso_local void @test_sign_ext(ptr noundef initializes((8, 16)) %f, ptr noundef %i)
1313
// AARCH64-LABEL: define dso_local void @test_sign_ext({{.*}}ptr addrspace(270) noundef %i) local_unnamed_addr #0
1414
// X64: %{{.+}} = addrspacecast ptr addrspace(270) %i to ptr
1515
// X86: %{{.+}} = addrspacecast ptr %i to ptr addrspace(272)
@@ -18,19 +18,19 @@ void test_sign_ext(struct Foo *f, int * __ptr32 __sptr i) {
1818
use_foo(f);
1919
}
2020
void test_zero_ext(struct Foo *f, int * __ptr32 __uptr i) {
21-
// X64-LABEL: define dso_local void @test_zero_ext({{.*}}ptr addrspace(271) noundef %i)
21+
// X64-LABEL: define dso_local void @test_zero_ext(ptr noundef initializes((8, 16)) %f, ptr addrspace(271) noundef %i)
2222
// X86-LABEL: define dso_local void @test_zero_ext({{.*}}ptr addrspace(271) noundef %i)
23-
// AARCH64-LABEL: define dso_local void @test_zero_ext({{.*}}ptr addrspace(271) noundef %i) local_unnamed_addr #0
23+
// AARCH64-LABEL: define dso_local void @test_zero_ext(ptr noundef initializes((8, 16)) %f, ptr addrspace(271) noundef %i) local_unnamed_addr #0
2424
// X64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr
2525
// X86: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr addrspace(272)
2626
// AARCH64: %{{.+}} = addrspacecast ptr addrspace(271) %i to ptr
2727
f->p64 = i;
2828
use_foo(f);
2929
}
3030
void test_trunc(struct Foo *f, int * __ptr64 i) {
31-
// X64-LABEL: define dso_local void @test_trunc(ptr noundef %f, ptr noundef %i)
31+
// X64-LABEL: define dso_local void @test_trunc(ptr noundef initializes((0, 4)) %f, ptr noundef %i)
3232
// X86-LABEL: define dso_local void @test_trunc({{.*}}ptr addrspace(272) noundef %i)
33-
// AARCH64-LABEL: define dso_local void @test_trunc(ptr noundef %f, ptr noundef %i) local_unnamed_addr #0
33+
// AARCH64-LABEL: define dso_local void @test_trunc(ptr noundef initializes((0, 4)) %f, ptr noundef %i) local_unnamed_addr #0
3434
// X64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(270)
3535
// X86: %{{.+}} = addrspacecast ptr addrspace(272) %i to ptr
3636
// AARCH64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(270)

clang/test/CodeGen/tbaa-struct-bitfield-endianness.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct NamedBitfields {
1616
};
1717

1818
// CHECK-LABEL: _Z4copyP14NamedBitfieldsS0_
19-
// CHECK-SAME: ptr nocapture noundef writeonly [[A1:%.*]], ptr nocapture noundef readonly [[A2:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
19+
// CHECK-SAME: ptr nocapture noundef writeonly initializes((0, 16)) [[A1:%.*]], ptr nocapture noundef readonly [[A2:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
2020
// CHECK-NEXT: entry:
2121
// CHECK-NEXT: tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[A1]], ptr noundef nonnull align 8 dereferenceable(16) [[A2]], i64 16, i1 false), !tbaa.struct [[TBAA_STRUCT2:![0-9]+]]
2222
// CHECK-NEXT: ret void

0 commit comments

Comments
 (0)