@@ -89,14 +89,22 @@ struct padded { char c; int i; };
89
89
// PATTERN-O1-NOT: @__const.test_paddednullinit_custom.custom
90
90
struct paddednullinit { char c = 0 ; int i = 0 ; };
91
91
// 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
92
94
struct paddedpacked { char c; int i; } __attribute__((packed));
93
95
// 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
94
98
struct paddedpackedarray { struct paddedpacked p[2 ]; };
95
99
// 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
96
100
struct unpackedinpacked { padded a; char b; } __attribute__((packed));
97
101
// 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
98
104
struct paddednested { struct padded p1, p2; };
99
105
// 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
100
108
struct paddedpackednested { struct paddedpacked p1, p2; };
101
109
// PATTERN-O0: @__const.test_bitfield_uninit.uninit = private unnamed_addr constant %struct.bitfield { i8 [[I8]], [3 x i8] c"\[[IC]]\[[IC]]\[[IC]]" }, align 4
102
110
// 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[]; };
134
142
// PATTERN-O1-NOT: @__const.test_bool4_custom.custom
135
143
// ZERO-O1-NOT: @__const.test_bool4_custom.custom
136
144
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
137
147
// 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
138
148
// 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
139
151
struct tailpad { short s; char c; };
140
152
// 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
141
153
// PATTERN-O1-NOT: @__const.test_atomicnotlockfree_uninit.uninit
@@ -702,8 +714,7 @@ TEST_UNINIT(padded, padded);
702
714
// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
703
715
// PATTERN-LABEL: @test_padded_uninit()
704
716
// 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]]
707
718
// ZERO-LABEL: @test_padded_uninit()
708
719
// ZERO-O0: call void @llvm.memset{{.*}}, i8 0,{{.+}}), !annotation [[AUTO_INIT]]
709
720
// ZERO-O1: store i64 0, ptr %uninit, align 8, !annotation [[AUTO_INIT]]
@@ -729,8 +740,7 @@ TEST_UNINIT(paddednullinit, paddednullinit);
729
740
// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
730
741
// PATTERN-LABEL: @test_paddednullinit_uninit()
731
742
// 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]]
734
744
// ZERO-LABEL: @test_paddednullinit_uninit()
735
745
// ZERO-O0: call void @llvm.memset{{.*}}, i8 0, {{.*}}, !annotation [[AUTO_INIT]]
736
746
// ZERO-O1: store i64 0, ptr %uninit, align 8
@@ -768,8 +778,9 @@ TEST_UNINIT(paddedpacked, paddedpacked);
768
778
// PATTERN-LABEL: @test_paddedpacked_uninit()
769
779
// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_paddedpacked_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]]
770
780
// 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
772
782
// PATTERN-O1: store i32 [[I32]], ptr %[[I]], align {{.+}}, !annotation [[AUTO_INIT]]
783
+
773
784
// ZERO-LABEL: @test_paddedpacked_uninit()
774
785
// ZERO: call void @llvm.memset{{.*}}, i8 0,{{.+}}), !annotation [[AUTO_INIT]]
775
786
@@ -1181,8 +1192,7 @@ TEST_UNINIT(atomicpadded, _Atomic(padded));
1181
1192
// CHECK-NEXT: call void @{{.*}}used{{.*}}%uninit)
1182
1193
// PATTERN-LABEL: @test_atomicpadded_uninit()
1183
1194
// 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]]
1186
1196
// ZERO-LABEL: @test_atomicpadded_uninit()
1187
1197
// ZERO-O0: call void @llvm.memset{{.*}}, i8 0, {{.+}}), !annotation [[AUTO_INIT]]
1188
1198
// ZERO-O1: store i64 0, ptr %uninit, align 8, !annotation [[AUTO_INIT]]
@@ -1204,7 +1214,8 @@ TEST_UNINIT(complexfloat, _Complex float);
1204
1214
// PATTERN-LABEL: @test_complexfloat_uninit()
1205
1215
// PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_complexfloat_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]]
1206
1216
// 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
1208
1219
// PATTERN-O1: store float 0xFFFFFFFFE0000000, ptr %[[F2]], align {{.+}}, !annotation [[AUTO_INIT]]
1209
1220
1210
1221
// ZERO-LABEL: @test_complexfloat_uninit()
@@ -1303,9 +1314,7 @@ TEST_CUSTOM(semivolatile, semivolatile, { 0x44444444, 0x44444444 });
1303
1314
// CHECK-O0: call void @llvm.memcpy
1304
1315
// CHECK-NOT: !annotation
1305
1316
// 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
1309
1318
// CHECK-NOT: !annotation
1310
1319
1311
1320
TEST_UNINIT (semivolatileinit, semivolatileinit);
@@ -1418,7 +1427,7 @@ TEST_CUSTOM(matching, matching, { .f = 0xf00f });
1418
1427
// CHECK-O0: call void @llvm.memcpy
1419
1428
// CHECK-NOT: !annotation
1420
1429
// 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
1422
1431
// CHECK-NOT: !annotation
1423
1432
1424
1433
TEST_UNINIT (matchingreverse, matchingreverse);
@@ -1497,16 +1506,8 @@ TEST_CUSTOM(unmatchedreverse, unmatchedreverse, { .c = 42 });
1497
1506
// CHECK-O0: call void @llvm.memcpy
1498
1507
// CHECK-NOT: !annotation
1499
1508
// 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
1510
1511
1511
1512
TEST_UNINIT (unmatchedfp, unmatchedfp);
1512
1513
// CHECK-LABEL: @test_unmatchedfp_uninit()
@@ -1531,7 +1532,7 @@ TEST_CUSTOM(unmatchedfp, unmatchedfp, { .d = 3.1415926535897932384626433 });
1531
1532
// CHECK-O0: call void @llvm.memcpy
1532
1533
// CHECK-NOT: !annotation
1533
1534
// 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
1535
1536
// CHECK-NOT: !annotation
1536
1537
1537
1538
TEST_UNINIT (emptyenum, emptyenum);
0 commit comments