@@ -134,11 +134,13 @@ void f_va_caller(void) {
134134// CHECK-NEXT: [[FMT_ADDR:%.*]] = alloca ptr, align 8
135135// CHECK-NEXT: [[VA:%.*]] = alloca ptr, align 8
136136// CHECK-NEXT: [[V:%.*]] = alloca i32, align 4
137- // CHECK-NEXT: [[FREEZE_POISON:%.*]] = freeze i32 poison
138- // CHECK-NEXT: store i32 [[FREEZE_POISON]], ptr [[V]], align 4
139137// CHECK-NEXT: store ptr [[FMT]], ptr [[FMT_ADDR]], align 8
138+ // CHECK-NEXT: [[FREEZE_POISON:%.*]] = freeze ptr poison
139+ // CHECK-NEXT: store ptr [[FREEZE_POISON]], ptr [[VA]], align 8
140140// CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VA]])
141- // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
141+ // CHECK-NEXT: [[FREEZE_POISON1:%.*]] = freeze i32 poison
142+ // CHECK-NEXT: store i32 [[FREEZE_POISON1]], ptr [[V]], align 4
143+ // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8
142144// CHECK-NEXT: [[ARGP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR]], i64 8
143145// CHECK-NEXT: store ptr [[ARGP_NEXT]], ptr [[VA]], align 8
144146// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARGP_CUR]], align 8, !freeze_bits [[META6]]
@@ -168,16 +170,20 @@ int f_va_1(char *fmt, ...) {
168170// CHECK-NEXT: [[VA:%.*]] = alloca ptr, align 8
169171// CHECK-NEXT: [[V:%.*]] = alloca fp128, align 16
170172// CHECK-NEXT: store ptr [[FMT]], ptr [[FMT_ADDR]], align 8
173+ // CHECK-NEXT: [[FREEZE_POISON:%.*]] = freeze ptr poison
174+ // CHECK-NEXT: store ptr [[FREEZE_POISON]], ptr [[VA]], align 8
171175// CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VA]])
172- // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
176+ // CHECK-NEXT: [[FREEZE_POISON1:%.*]] = freeze fp128 poison
177+ // CHECK-NEXT: store fp128 [[FREEZE_POISON1]], ptr [[V]], align 16
178+ // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8
173179// CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR]], i32 15
174180// CHECK-NEXT: [[ARGP_CUR_ALIGNED:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[TMP0]], i64 -16)
175181// CHECK-NEXT: [[ARGP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR_ALIGNED]], i64 16
176182// CHECK-NEXT: store ptr [[ARGP_NEXT]], ptr [[VA]], align 8
177183// CHECK-NEXT: [[TMP1:%.*]] = load fp128, ptr [[ARGP_CUR_ALIGNED]], align 16, !freeze_bits [[META6]]
178184// CHECK-NEXT: store fp128 [[TMP1]], ptr [[V]], align 16
179185// CHECK-NEXT: call void @llvm.va_end.p0(ptr [[VA]])
180- // CHECK-NEXT: [[TMP2:%.*]] = load fp128, ptr [[V]], align 16, !freeze_bits [[META6]]
186+ // CHECK-NEXT: [[TMP2:%.*]] = load fp128, ptr [[V]], align 16
181187// CHECK-NEXT: ret fp128 [[TMP2]]
182188//
183189long double f_va_2 (char * fmt , ...) {
@@ -199,33 +205,39 @@ long double f_va_2(char *fmt, ...) {
199205// CHECK-NEXT: [[VA:%.*]] = alloca ptr, align 8
200206// CHECK-NEXT: [[V:%.*]] = alloca fp128, align 16
201207// CHECK-NEXT: [[W:%.*]] = alloca i32, align 4
202- // CHECK-NEXT: [[FREEZE_POISON:%.*]] = freeze i32 poison
203- // CHECK-NEXT: store i32 [[FREEZE_POISON]], ptr [[W]], align 4
204208// CHECK-NEXT: [[X:%.*]] = alloca fp128, align 16
205209// CHECK-NEXT: store ptr [[FMT]], ptr [[FMT_ADDR]], align 8
210+ // CHECK-NEXT: [[FREEZE_POISON:%.*]] = freeze ptr poison
211+ // CHECK-NEXT: store ptr [[FREEZE_POISON]], ptr [[VA]], align 8
206212// CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VA]])
207- // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
213+ // CHECK-NEXT: [[FREEZE_POISON1:%.*]] = freeze fp128 poison
214+ // CHECK-NEXT: store fp128 [[FREEZE_POISON1]], ptr [[V]], align 16
215+ // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8
208216// CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR]], i32 15
209217// CHECK-NEXT: [[ARGP_CUR_ALIGNED:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[TMP0]], i64 -16)
210218// CHECK-NEXT: [[ARGP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR_ALIGNED]], i64 16
211219// CHECK-NEXT: store ptr [[ARGP_NEXT]], ptr [[VA]], align 8
212220// CHECK-NEXT: [[TMP1:%.*]] = load fp128, ptr [[ARGP_CUR_ALIGNED]], align 16, !freeze_bits [[META6]]
213221// CHECK-NEXT: store fp128 [[TMP1]], ptr [[V]], align 16
214- // CHECK-NEXT: [[ARGP_CUR1:%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
215- // CHECK-NEXT: [[ARGP_NEXT2:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR1]], i64 8
216- // CHECK-NEXT: store ptr [[ARGP_NEXT2]], ptr [[VA]], align 8
217- // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARGP_CUR1]], align 8, !freeze_bits [[META6]]
218- // CHECK-NEXT: store i32 [[TMP2]], ptr [[W]], align 4
219- // CHECK-NEXT: [[ARGP_CUR3:%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
220- // CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR3]], i32 15
221- // CHECK-NEXT: [[ARGP_CUR3_ALIGNED:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[TMP3]], i64 -16)
222- // CHECK-NEXT: [[ARGP_NEXT4:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR3_ALIGNED]], i64 16
222+ // CHECK-NEXT: [[FREEZE_POISON2:%.*]] = freeze i32 poison
223+ // CHECK-NEXT: store i32 [[FREEZE_POISON2]], ptr [[W]], align 4
224+ // CHECK-NEXT: [[ARGP_CUR3:%.*]] = load ptr, ptr [[VA]], align 8
225+ // CHECK-NEXT: [[ARGP_NEXT4:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR3]], i64 8
223226// CHECK-NEXT: store ptr [[ARGP_NEXT4]], ptr [[VA]], align 8
224- // CHECK-NEXT: [[TMP4:%.*]] = load fp128, ptr [[ARGP_CUR3_ALIGNED]], align 16, !freeze_bits [[META6]]
227+ // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARGP_CUR3]], align 8, !freeze_bits [[META6]]
228+ // CHECK-NEXT: store i32 [[TMP2]], ptr [[W]], align 4
229+ // CHECK-NEXT: [[FREEZE_POISON5:%.*]] = freeze fp128 poison
230+ // CHECK-NEXT: store fp128 [[FREEZE_POISON5]], ptr [[X]], align 16
231+ // CHECK-NEXT: [[ARGP_CUR6:%.*]] = load ptr, ptr [[VA]], align 8
232+ // CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR6]], i32 15
233+ // CHECK-NEXT: [[ARGP_CUR6_ALIGNED:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[TMP3]], i64 -16)
234+ // CHECK-NEXT: [[ARGP_NEXT7:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR6_ALIGNED]], i64 16
235+ // CHECK-NEXT: store ptr [[ARGP_NEXT7]], ptr [[VA]], align 8
236+ // CHECK-NEXT: [[TMP4:%.*]] = load fp128, ptr [[ARGP_CUR6_ALIGNED]], align 16, !freeze_bits [[META6]]
225237// CHECK-NEXT: store fp128 [[TMP4]], ptr [[X]], align 16
226238// CHECK-NEXT: call void @llvm.va_end.p0(ptr [[VA]])
227- // CHECK-NEXT: [[TMP5:%.*]] = load fp128, ptr [[V]], align 16, !freeze_bits [[META6]]
228- // CHECK-NEXT: [[TMP6:%.*]] = load fp128, ptr [[X]], align 16, !freeze_bits [[META6]]
239+ // CHECK-NEXT: [[TMP5:%.*]] = load fp128, ptr [[V]], align 16
240+ // CHECK-NEXT: [[TMP6:%.*]] = load fp128, ptr [[X]], align 16
229241// CHECK-NEXT: [[ADD:%.*]] = fadd fp128 [[TMP5]], [[TMP6]]
230242// CHECK-NEXT: ret fp128 [[ADD]]
231243//
@@ -247,46 +259,48 @@ long double f_va_3(char *fmt, ...) {
247259// CHECK-NEXT: [[FMT_ADDR:%.*]] = alloca ptr, align 8
248260// CHECK-NEXT: [[VA:%.*]] = alloca ptr, align 8
249261// CHECK-NEXT: [[V:%.*]] = alloca i32, align 4
250- // CHECK-NEXT: [[FREEZE_POISON:%.*]] = freeze i32 poison
251- // CHECK-NEXT: store i32 [[FREEZE_POISON]], ptr [[V]], align 4
252262// CHECK-NEXT: [[TS:%.*]] = alloca [[STRUCT_TINY:%.*]], align 2
253263// CHECK-NEXT: [[SS:%.*]] = alloca [[STRUCT_SMALL:%.*]], align 8
254264// CHECK-NEXT: [[LS:%.*]] = alloca [[STRUCT_LARGE:%.*]], align 8
255265// CHECK-NEXT: [[RET:%.*]] = alloca i32, align 4
256- // CHECK-NEXT: [[FREEZE_POISON7:%.*]] = freeze i32 poison
257- // CHECK-NEXT: store i32 [[FREEZE_POISON7]], ptr [[RET]], align 4
258266// CHECK-NEXT: store ptr [[FMT]], ptr [[FMT_ADDR]], align 8
267+ // CHECK-NEXT: [[FREEZE_POISON:%.*]] = freeze ptr poison
268+ // CHECK-NEXT: store ptr [[FREEZE_POISON]], ptr [[VA]], align 8
259269// CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VA]])
260- // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
270+ // CHECK-NEXT: [[FREEZE_POISON1:%.*]] = freeze i32 poison
271+ // CHECK-NEXT: store i32 [[FREEZE_POISON1]], ptr [[V]], align 4
272+ // CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 8
261273// CHECK-NEXT: [[ARGP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR]], i64 8
262274// CHECK-NEXT: store ptr [[ARGP_NEXT]], ptr [[VA]], align 8
263275// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARGP_CUR]], align 8, !freeze_bits [[META6]]
264276// CHECK-NEXT: store i32 [[TMP0]], ptr [[V]], align 4
265- // CHECK-NEXT: [[ARGP_CUR1 :%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
266- // CHECK-NEXT: [[ARGP_NEXT2 :%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR1 ]], i64 8
267- // CHECK-NEXT: store ptr [[ARGP_NEXT2 ]], ptr [[VA]], align 8
268- // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 2 [[TS]], ptr align 8 [[ARGP_CUR1 ]], i64 8, i1 false)
269- // CHECK-NEXT: [[ARGP_CUR3 :%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
270- // CHECK-NEXT: [[ARGP_NEXT4 :%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR3 ]], i64 16
271- // CHECK-NEXT: store ptr [[ARGP_NEXT4 ]], ptr [[VA]], align 8
272- // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[SS]], ptr align 8 [[ARGP_CUR3 ]], i64 16, i1 false)
273- // CHECK-NEXT: [[ARGP_CUR5 :%.*]] = load ptr, ptr [[VA]], align 8, !freeze_bits [[META6]]
274- // CHECK-NEXT: [[ARGP_NEXT6 :%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR5 ]], i64 8
275- // CHECK-NEXT: store ptr [[ARGP_NEXT6 ]], ptr [[VA]], align 8
276- // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[ARGP_CUR5 ]], align 8, !freeze_bits [[META6]]
277+ // CHECK-NEXT: [[ARGP_CUR2 :%.*]] = load ptr, ptr [[VA]], align 8
278+ // CHECK-NEXT: [[ARGP_NEXT3 :%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR2 ]], i64 8
279+ // CHECK-NEXT: store ptr [[ARGP_NEXT3 ]], ptr [[VA]], align 8
280+ // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 2 [[TS]], ptr align 8 [[ARGP_CUR2 ]], i64 8, i1 false)
281+ // CHECK-NEXT: [[ARGP_CUR4 :%.*]] = load ptr, ptr [[VA]], align 8
282+ // CHECK-NEXT: [[ARGP_NEXT5 :%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR4 ]], i64 16
283+ // CHECK-NEXT: store ptr [[ARGP_NEXT5 ]], ptr [[VA]], align 8
284+ // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[SS]], ptr align 8 [[ARGP_CUR4 ]], i64 16, i1 false)
285+ // CHECK-NEXT: [[ARGP_CUR6 :%.*]] = load ptr, ptr [[VA]], align 8
286+ // CHECK-NEXT: [[ARGP_NEXT7 :%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR6 ]], i64 8
287+ // CHECK-NEXT: store ptr [[ARGP_NEXT7 ]], ptr [[VA]], align 8
288+ // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[ARGP_CUR6 ]], align 8, !freeze_bits [[META6]]
277289// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[LS]], ptr align 8 [[TMP1]], i64 32, i1 false)
278290// CHECK-NEXT: call void @llvm.va_end.p0(ptr [[VA]])
291+ // CHECK-NEXT: [[FREEZE_POISON8:%.*]] = freeze i32 poison
292+ // CHECK-NEXT: store i32 [[FREEZE_POISON8]], ptr [[RET]], align 4
279293// CHECK-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_TINY]], ptr [[TS]], i32 0, i32 0
280294// CHECK-NEXT: [[TMP2:%.*]] = load i16, ptr [[A]], align 2, !freeze_bits [[META6]]
281295// CHECK-NEXT: [[CONV:%.*]] = zext i16 [[TMP2]] to i64
282- // CHECK-NEXT: [[A8 :%.*]] = getelementptr inbounds [[STRUCT_SMALL]], ptr [[SS]], i32 0, i32 0
283- // CHECK-NEXT: [[TMP3:%.*]] = load i64, ptr [[A8 ]], align 8, !freeze_bits [[META6]]
296+ // CHECK-NEXT: [[A9 :%.*]] = getelementptr inbounds [[STRUCT_SMALL]], ptr [[SS]], i32 0, i32 0
297+ // CHECK-NEXT: [[TMP3:%.*]] = load i64, ptr [[A9 ]], align 8, !freeze_bits [[META6]]
284298// CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[CONV]], [[TMP3]]
285299// CHECK-NEXT: [[C:%.*]] = getelementptr inbounds [[STRUCT_LARGE]], ptr [[LS]], i32 0, i32 2
286300// CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr [[C]], align 8, !freeze_bits [[META6]]
287- // CHECK-NEXT: [[ADD9 :%.*]] = add nsw i64 [[ADD]], [[TMP4]]
288- // CHECK-NEXT: [[CONV10 :%.*]] = trunc i64 [[ADD9 ]] to i32
289- // CHECK-NEXT: store i32 [[CONV10 ]], ptr [[RET]], align 4
301+ // CHECK-NEXT: [[ADD10 :%.*]] = add nsw i64 [[ADD]], [[TMP4]]
302+ // CHECK-NEXT: [[CONV11 :%.*]] = trunc i64 [[ADD10 ]] to i32
303+ // CHECK-NEXT: store i32 [[CONV11 ]], ptr [[RET]], align 4
290304// CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[RET]], align 4
291305// CHECK-NEXT: ret i32 [[TMP5]]
292306//
0 commit comments