Skip to content

Commit 419a4e4

Browse files
committed
Revert "[clang] Avoid memcopy for small structure with padding under -ftrivial-auto-var-init (#71677)"
This reverts commit fe5c360. The commit causes the tests below to fail on many buildbots, e.g. https://lab.llvm.org/buildbot/#/builders/245/builds/17047 Clang :: CodeGen/aapcs-align.cpp Clang :: CodeGen/aapcs64-align.cpp
1 parent 0e15f24 commit 419a4e4

File tree

4 files changed

+46
-49
lines changed

4 files changed

+46
-49
lines changed

clang/lib/CodeGen/CGDecl.cpp

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,24 +1244,29 @@ static void emitStoresForConstant(CodeGenModule &CGM, const VarDecl &D,
12441244
// If the initializer is small, use a handful of stores.
12451245
if (shouldSplitConstantStore(CGM, ConstantSize)) {
12461246
if (auto *STy = dyn_cast<llvm::StructType>(Ty)) {
1247-
const llvm::StructLayout *Layout =
1248-
CGM.getDataLayout().getStructLayout(STy);
1249-
for (unsigned i = 0; i != constant->getNumOperands(); i++) {
1250-
CharUnits CurOff = CharUnits::fromQuantity(Layout->getElementOffset(i));
1251-
Address EltPtr = Builder.CreateConstInBoundsByteGEP(
1252-
Loc.withElementType(CGM.Int8Ty), CurOff);
1253-
emitStoresForConstant(CGM, D, EltPtr, isVolatile, Builder,
1254-
constant->getAggregateElement(i), IsAutoInit);
1247+
// FIXME: handle the case when STy != Loc.getElementType().
1248+
if (STy == Loc.getElementType()) {
1249+
for (unsigned i = 0; i != constant->getNumOperands(); i++) {
1250+
Address EltPtr = Builder.CreateStructGEP(Loc, i);
1251+
emitStoresForConstant(
1252+
CGM, D, EltPtr, isVolatile, Builder,
1253+
cast<llvm::Constant>(Builder.CreateExtractValue(constant, i)),
1254+
IsAutoInit);
1255+
}
1256+
return;
12551257
}
1256-
return;
12571258
} else if (auto *ATy = dyn_cast<llvm::ArrayType>(Ty)) {
1258-
for (unsigned i = 0; i != ATy->getNumElements(); i++) {
1259-
Address EltPtr = Builder.CreateConstGEP(
1260-
Loc.withElementType(ATy->getElementType()), i);
1261-
emitStoresForConstant(CGM, D, EltPtr, isVolatile, Builder,
1262-
constant->getAggregateElement(i), IsAutoInit);
1259+
// FIXME: handle the case when ATy != Loc.getElementType().
1260+
if (ATy == Loc.getElementType()) {
1261+
for (unsigned i = 0; i != ATy->getNumElements(); i++) {
1262+
Address EltPtr = Builder.CreateConstArrayGEP(Loc, i);
1263+
emitStoresForConstant(
1264+
CGM, D, EltPtr, isVolatile, Builder,
1265+
cast<llvm::Constant>(Builder.CreateExtractValue(constant, i)),
1266+
IsAutoInit);
1267+
}
1268+
return;
12631269
}
1264-
return;
12651270
}
12661271
}
12671272

clang/test/CodeGenCXX/auto-var-init.cpp

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,22 @@ struct padded { char c; int i; };
8989
// PATTERN-O1-NOT: @__const.test_paddednullinit_custom.custom
9090
struct paddednullinit { char c = 0; int i = 0; };
9191
// PATTERN-O0: @__const.test_paddedpacked_uninit.uninit = private unnamed_addr constant %struct.paddedpacked <{ i8 [[I8]], i32 [[I32]] }>, align 1
92+
// PATTERN: @__const.test_paddedpacked_custom.custom = private unnamed_addr constant %struct.paddedpacked <{ i8 42, i32 13371337 }>, align 1
93+
// ZERO: @__const.test_paddedpacked_custom.custom = private unnamed_addr constant %struct.paddedpacked <{ i8 42, i32 13371337 }>, align 1
9294
struct paddedpacked { char c; int i; } __attribute__((packed));
9395
// PATTERN-O0: @__const.test_paddedpackedarray_uninit.uninit = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 [[I8]], i32 [[I32]] }>, %struct.paddedpacked <{ i8 [[I8]], i32 [[I32]] }>] }, align 1
96+
// PATTERN: @__const.test_paddedpackedarray_custom.custom = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }>] }, align 1
97+
// ZERO: @__const.test_paddedpackedarray_custom.custom = private unnamed_addr constant %struct.paddedpackedarray { [2 x %struct.paddedpacked] [%struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }>] }, align 1
9498
struct paddedpackedarray { struct paddedpacked p[2]; };
9599
// PATTERN-O0: @__const.test_unpackedinpacked_uninit.uninit = private unnamed_addr constant <{ { i8, [3 x i8], i32 }, i8 }> <{ { i8, [3 x i8], i32 } { i8 [[I8]], [3 x i8] c"\[[IC]]\[[IC]]\[[IC]]", i32 [[I32]] }, i8 [[I8]] }>, align 1
96100
struct unpackedinpacked { padded a; char b; } __attribute__((packed));
97101
// PATTERN-O0: @__const.test_paddednested_uninit.uninit = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 [[I8]], [3 x i8] c"\[[IC]]\[[IC]]\[[IC]]", i32 [[I32]] }, { i8, [3 x i8], i32 } { i8 [[I8]], [3 x i8] c"\[[IC]]\[[IC]]\[[IC]]", i32 [[I32]] } }, align 4
102+
// PATTERN: @__const.test_paddednested_custom.custom = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, { i8, [3 x i8], i32 } { i8 43, [3 x i8] zeroinitializer, i32 13371338 } }, align 4
103+
// ZERO: @__const.test_paddednested_custom.custom = private unnamed_addr constant { { i8, [3 x i8], i32 }, { i8, [3 x i8], i32 } } { { i8, [3 x i8], i32 } { i8 42, [3 x i8] zeroinitializer, i32 13371337 }, { i8, [3 x i8], i32 } { i8 43, [3 x i8] zeroinitializer, i32 13371338 } }, align 4
98104
struct paddednested { struct padded p1, p2; };
99105
// PATTERN-O0: @__const.test_paddedpackednested_uninit.uninit = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 [[I8]], i32 [[I32]] }>, %struct.paddedpacked <{ i8 [[I8]], i32 [[I32]] }> }, align 1
106+
// PATTERN: @__const.test_paddedpackednested_custom.custom = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }> }, align 1
107+
// ZERO: @__const.test_paddedpackednested_custom.custom = private unnamed_addr constant %struct.paddedpackednested { %struct.paddedpacked <{ i8 42, i32 13371337 }>, %struct.paddedpacked <{ i8 43, i32 13371338 }> }, align 1
100108
struct paddedpackednested { struct paddedpacked p1, p2; };
101109
// PATTERN-O0: @__const.test_bitfield_uninit.uninit = private unnamed_addr constant %struct.bitfield { i8 [[I8]], [3 x i8] c"\[[IC]]\[[IC]]\[[IC]]" }, align 4
102110
// PATTERN-O0: @__const.test_bitfield_custom.custom = private unnamed_addr constant %struct.bitfield { i8 20, [3 x i8] c"\[[IC]]\[[IC]]\[[IC]]" }, align 4
@@ -134,8 +142,12 @@ struct arraytail { int i; int arr[]; };
134142
// PATTERN-O1-NOT: @__const.test_bool4_custom.custom
135143
// ZERO-O1-NOT: @__const.test_bool4_custom.custom
136144

145+
// PATTERN: @__const.test_intptr4_custom.custom = private unnamed_addr constant [4 x ptr] [ptr inttoptr ([[IPTRT]] 572662306 to ptr), ptr inttoptr ([[IPTRT]] 572662306 to ptr), ptr inttoptr ([[IPTRT]] 572662306 to ptr), ptr inttoptr ([[IPTRT]] 572662306 to ptr)], align
146+
// ZERO: @__const.test_intptr4_custom.custom = private unnamed_addr constant [4 x ptr] [ptr inttoptr (i64 572662306 to ptr), ptr inttoptr (i64 572662306 to ptr), ptr inttoptr (i64 572662306 to ptr), ptr inttoptr (i64 572662306 to ptr)], align 16
137147
// PATTERN-O0: @__const.test_tailpad4_uninit.uninit = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 [[I16]], i8 [[I8]], [1 x i8] c"\[[IC]]" }, { i16, i8, [1 x i8] } { i16 [[I16]], i8 [[I8]], [1 x i8] c"\[[IC]]" }, { i16, i8, [1 x i8] } { i16 [[I16]], i8 [[I8]], [1 x i8] c"\[[IC]]" }, { i16, i8, [1 x i8] } { i16 [[I16]], i8 [[I8]], [1 x i8] c"\[[IC]]" }], align
138148
// PATTERN-O1-NOT: @__const.test_tailpad4_uninit.uninit
149+
// PATTERN: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }], align
150+
// ZERO: @__const.test_tailpad4_custom.custom = private unnamed_addr constant [4 x { i16, i8, [1 x i8] }] [{ i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }, { i16, i8, [1 x i8] } { i16 257, i8 1, [1 x i8] zeroinitializer }], align 16
139151
struct tailpad { short s; char c; };
140152
// PATTERN-O0: @__const.test_atomicnotlockfree_uninit.uninit = private unnamed_addr constant %struct.notlockfree { [4 x i64] {{\[}}i64 [[I64]], i64 [[I64]], i64 [[I64]], i64 [[I64]]] }, align
141153
// PATTERN-O1-NOT: @__const.test_atomicnotlockfree_uninit.uninit
@@ -702,8 +714,7 @@ TEST_UNINIT(padded, padded);
702714
// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
703715
// PATTERN-LABEL: @test_padded_uninit()
704716
// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_padded_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]]
705-
// PATTERN-O1: store i64 [[I64]], ptr %uninit, align 8
706-
// PATTERN-O1-NOT: !annotation
717+
// PATTERN-O1: store i64 [[I64]], ptr %uninit, align 8, !annotation [[AUTO_INIT]]
707718
// ZERO-LABEL: @test_padded_uninit()
708719
// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,{{.+}}), !annotation [[AUTO_INIT]]
709720
// ZERO-O1: store i64 0, ptr %uninit, align 8, !annotation [[AUTO_INIT]]
@@ -729,8 +740,7 @@ TEST_UNINIT(paddednullinit, paddednullinit);
729740
// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
730741
// PATTERN-LABEL: @test_paddednullinit_uninit()
731742
// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddednullinit_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]]
732-
// PATTERN-O1: store i64 [[I64]], ptr %uninit, align 8
733-
// PATTERN-O1-NOT: !annotation
743+
// PATTERN-O1: store i64 [[I64]], ptr %uninit, align 8, !annotation [[AUTO_INIT]]
734744
// ZERO-LABEL: @test_paddednullinit_uninit()
735745
// ZERO-O0: call void @llvm.memset{{.*}}, i8 0, {{.*}}, !annotation [[AUTO_INIT]]
736746
// ZERO-O1: store i64 0, ptr %uninit, align 8
@@ -768,8 +778,9 @@ TEST_UNINIT(paddedpacked, paddedpacked);
768778
// PATTERN-LABEL: @test_paddedpacked_uninit()
769779
// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpacked_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]]
770780
// PATTERN-O1: store i8 [[I8]], ptr %uninit, align {{.+}}, !annotation [[AUTO_INIT]]
771-
// PATTERN-O1: %[[I:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 1
781+
// PATTERN-O1: %[[I:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 1
772782
// PATTERN-O1: store i32 [[I32]], ptr %[[I]], align {{.+}}, !annotation [[AUTO_INIT]]
783+
773784
// ZERO-LABEL: @test_paddedpacked_uninit()
774785
// ZERO: call void @llvm.memset{{.*}}, i8 0,{{.+}}), !annotation [[AUTO_INIT]]
775786

@@ -1181,8 +1192,7 @@ TEST_UNINIT(atomicpadded, _Atomic(padded));
11811192
// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
11821193
// PATTERN-LABEL: @test_atomicpadded_uninit()
11831194
// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_atomicpadded_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]]
1184-
// PATTERN-O1: store i64 [[IPTR]], ptr %uninit, align 8
1185-
// PATTERN-O1-NOT: !annotation
1195+
// PATTERN-O1: store i64 [[IPTR]], ptr %uninit, align 8, !annotation [[AUTO_INIT]]
11861196
// ZERO-LABEL: @test_atomicpadded_uninit()
11871197
// ZERO-O0: call void @llvm.memset{{.*}}, i8 0, {{.+}}), !annotation [[AUTO_INIT]]
11881198
// ZERO-O1: store i64 0, ptr %uninit, align 8, !annotation [[AUTO_INIT]]
@@ -1204,7 +1214,8 @@ TEST_UNINIT(complexfloat, _Complex float);
12041214
// PATTERN-LABEL: @test_complexfloat_uninit()
12051215
// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_complexfloat_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]]
12061216
// PATTERN-O1: store float 0xFFFFFFFFE0000000, ptr %uninit, align {{.+}}, !annotation [[AUTO_INIT]]
1207-
// PATTERN-O1: %[[F2:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 4
1217+
1218+
// PATTERN-O1: %[[F2:[^ ]*]] = getelementptr inbounds {{.*}}%uninit, i64 0, i32 1
12081219
// PATTERN-O1: store float 0xFFFFFFFFE0000000, ptr %[[F2]], align {{.+}}, !annotation [[AUTO_INIT]]
12091220

12101221
// ZERO-LABEL: @test_complexfloat_uninit()
@@ -1303,9 +1314,7 @@ TEST_CUSTOM(semivolatile, semivolatile, { 0x44444444, 0x44444444 });
13031314
// CHECK-O0: call void @llvm.memcpy
13041315
// CHECK-NOT: !annotation
13051316
// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1306-
// CHECK-O1: store i32 1145324612, ptr %custom, align 4
1307-
// CHECK-O1-NEXT: %[[I:[^ ]*]] = getelementptr inbounds i8, ptr %custom, i64 4
1308-
// CHECK-O1-NEXT: store i32 1145324612, ptr %[[I]], align 4
1317+
// CHECK-O1: store i64 4919131752989213764, ptr %custom, align 8
13091318
// CHECK-NOT: !annotation
13101319

13111320
TEST_UNINIT(semivolatileinit, semivolatileinit);
@@ -1418,7 +1427,7 @@ TEST_CUSTOM(matching, matching, { .f = 0xf00f });
14181427
// CHECK-O0: call void @llvm.memcpy
14191428
// CHECK-NOT: !annotation
14201429
// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1421-
// CHECK-O1: store float 6.145500e+04, ptr {{.*}}, align 4
1430+
// CHECK-O1: store i32 1198526208, ptr {{.*}}, align 4
14221431
// CHECK-NOT: !annotation
14231432

14241433
TEST_UNINIT(matchingreverse, matchingreverse);
@@ -1497,16 +1506,8 @@ TEST_CUSTOM(unmatchedreverse, unmatchedreverse, { .c = 42 });
14971506
// CHECK-O0: call void @llvm.memcpy
14981507
// CHECK-NOT: !annotation
14991508
// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1500-
// PATTERN-O1: store i8 42, ptr {{.*}}, align 4
1501-
// PATTERN-O1-NEXT: %[[I:[^ ]*]] = getelementptr inbounds i8, ptr %custom, i64 1
1502-
// PATTERN-O1-NEXT: store i8 -86, ptr %[[I]], align {{.*}}
1503-
// PATTERN-O1-NEXT: %[[I:[^ ]*]] = getelementptr inbounds i8, ptr %custom, i64 2
1504-
// PATTERN-O1-NEXT: store i8 -86, ptr %[[I]], align {{.*}}
1505-
// PATTERN-O1-NEXT: %[[I:[^ ]*]] = getelementptr inbounds i8, ptr %custom, i64 3
1506-
// PATTERN-O1-NEXT: store i8 -86, ptr %[[I]], align {{.*}}
1507-
// ZERO-O1: store i8 42, ptr {{.*}}, align 4
1508-
// ZERO-O1-NEXT: %[[I:[^ ]*]] = getelementptr inbounds i8, ptr %custom, i64 1
1509-
// ZERO-O1-NEXT: call void @llvm.memset.{{.*}}({{.*}}, i8 0, i64 3, {{.*}})
1509+
// PATTERN-O1: store i32 -1431655894, ptr {{.*}}, align 4
1510+
// ZERO-O1: store i32 42, ptr {{.*}}, align 4
15101511

15111512
TEST_UNINIT(unmatchedfp, unmatchedfp);
15121513
// CHECK-LABEL: @test_unmatchedfp_uninit()
@@ -1531,7 +1532,7 @@ TEST_CUSTOM(unmatchedfp, unmatchedfp, { .d = 3.1415926535897932384626433 });
15311532
// CHECK-O0: call void @llvm.memcpy
15321533
// CHECK-NOT: !annotation
15331534
// CHECK-O0: call void @{{.*}}used{{.*}}%custom)
1534-
// CHECK-O1: store double 0x400921FB54442D18, ptr %custom, align 8
1535+
// CHECK-O1: store i64 4614256656552045848, ptr %custom, align 8
15351536
// CHECK-NOT: !annotation
15361537

15371538
TEST_UNINIT(emptyenum, emptyenum);

clang/test/CodeGenOpenCL/amdgpu-printf.cl

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,7 @@ __kernel void test_printf_int(int i) {
3030
// CHECK-NEXT: [[S:%.*]] = alloca [4 x i8], align 1, addrspace(5)
3131
// CHECK-NEXT: store i32 [[I:%.*]], ptr addrspace(5) [[I_ADDR]], align 4, !tbaa [[TBAA8]]
3232
// CHECK-NEXT: call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[S]]) #[[ATTR5:[0-9]+]]
33-
// CHECK-NEXT: [[LOC0:%.*]] = getelementptr i8, ptr addrspace(5) [[S]], i64 0
34-
// CHECK-NEXT: store i8 102, ptr addrspace(5) [[LOC0]], align 1
35-
// CHECK-NEXT: [[LOC1:%.*]] = getelementptr i8, ptr addrspace(5) [[S]], i64 1
36-
// CHECK-NEXT: store i8 111, ptr addrspace(5) [[LOC1]], align 1
37-
// CHECK-NEXT: [[LOC2:%.*]] = getelementptr i8, ptr addrspace(5) [[S]], i64 2
38-
// CHECK-NEXT: store i8 111, ptr addrspace(5) [[LOC2]], align 1
39-
// CHECK-NEXT: [[LOC3:%.*]] = getelementptr i8, ptr addrspace(5) [[S]], i64 3
40-
// CHECK-NEXT: store i8 0, ptr addrspace(5) [[LOC3]], align 1
33+
// CHECK-NEXT: call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) align 1 [[S]], ptr addrspace(4) align 1 @__const.test_printf_str_int.s, i64 4, i1 false)
4134
// CHECK-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [4 x i8], ptr addrspace(5) [[S]], i64 0, i64 0
4235
// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr addrspace(5) [[I_ADDR]], align 4, !tbaa [[TBAA8]]
4336
// CHECK-NEXT: [[CALL:%.*]] = call i32 (ptr addrspace(4), ...) @printf(ptr addrspace(4) noundef @.str.2, ptr addrspace(5) noundef [[ARRAYDECAY]], i32 noundef [[TMP2]]) #[[ATTR4]]

clang/test/OpenMP/bug54082.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,7 @@ void foo() {
6969
// CHECK-NEXT: [[X_TRAITS:%.*]] = alloca [1 x %struct.omp_alloctrait_t], align 16
7070
// CHECK-NEXT: [[X_ALLOC:%.*]] = alloca i64, align 8
7171
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[X_TRAITS]]) #[[ATTR5:[0-9]+]]
72-
// CHECK-NEXT: store i32 2, ptr [[X_TRAITS]], align 16
73-
// CHECK-NEXT: [[LOC0:%.*]] = getelementptr inbounds i8, ptr [[X_TRAITS]], i64 8
74-
// CHECK-NEXT: store i64 64, ptr [[LOC0]], align 8
72+
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) [[X_TRAITS]], ptr noundef nonnull align 16 dereferenceable(16) @__const.foo.x_traits, i64 16, i1 false)
7573
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[X_ALLOC]]) #[[ATTR5]]
7674
// CHECK-NEXT: [[CALL:%.*]] = call i64 @omp_init_allocator(i64 noundef 0, i32 noundef 1, ptr noundef nonnull [[X_TRAITS]]) #[[ATTR5]]
7775
// CHECK-NEXT: store i64 [[CALL]], ptr [[X_ALLOC]], align 8, !tbaa [[TBAA3:![0-9]+]]

0 commit comments

Comments
 (0)