@@ -210,7 +210,11 @@ int f_va_1(char *fmt, ...) {
210210// CHECK-NEXT: [[VA:%.*]] = alloca ptr, align 4
211211// CHECK-NEXT: [[V:%.*]] = alloca double, align 4
212212// CHECK-NEXT: store ptr [[FMT:%.*]], ptr [[FMT_ADDR]], align 4
213+ // CHECK-NEXT: [[FREEZE:%.+]] = freeze ptr poison
214+ // CHECK-NEXT: store ptr [[FREEZE]], ptr [[VA]]
213215// CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VA]])
216+ // CHECK-NEXT: [[FREEZE1:%.+]] = freeze double poison
217+ // CHECK-NEXT: store double [[FREEZE1]], ptr [[V]]
214218// CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 4
215219// CHECK-NEXT: [[ARGP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR]], i32 8
216220// CHECK-NEXT: store ptr [[ARGP_NEXT]], ptr [[VA]], align 4
@@ -236,17 +240,25 @@ double f_va_2(char *fmt, ...) {
236240// CHECK-NEXT: [[W:%.*]] = alloca i32, align 4
237241// CHECK-NEXT: [[X:%.*]] = alloca double, align 4
238242// CHECK-NEXT: store ptr [[FMT:%.*]], ptr [[FMT_ADDR]], align 4
243+ // CHECK-NEXT: [[FREEZE:%.+]] = freeze ptr poison
244+ // CHECK-NEXT: store ptr [[FREEZE]], ptr [[VA]]
239245// CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VA]])
246+ // CHECK-NEXT: [[FREEZE1:%.+]] = freeze double poison
247+ // CHECK-NEXT: store double [[FREEZE1]], ptr [[V]]
240248// CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 4
241249// CHECK-NEXT: [[ARGP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR]], i32 8
242250// CHECK-NEXT: store ptr [[ARGP_NEXT]], ptr [[VA]], align 4
243251// CHECK-NEXT: [[TMP4:%.*]] = load double, ptr [[ARGP_CUR]], align 4
244252// CHECK-NEXT: store double [[TMP4]], ptr [[V]], align 4
253+ // CHECK-NEXT: [[FREEZE2:%.+]] = freeze i32 poison
254+ // CHECK-NEXT: store i32 [[FREEZE2]], ptr [[W]]
245255// CHECK-NEXT: [[ARGP_CUR2:%.*]] = load ptr, ptr [[VA]], align 4
246256// CHECK-NEXT: [[ARGP_NEXT3:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR2]], i32 4
247257// CHECK-NEXT: store ptr [[ARGP_NEXT3]], ptr [[VA]], align 4
248258// CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[ARGP_CUR2]], align 4
249259// CHECK-NEXT: store i32 [[TMP6]], ptr [[W]], align 4
260+ // CHECK-NEXT: [[FREEZE3:%.+]] = freeze double poison
261+ // CHECK-NEXT: store double [[FREEZE3]], ptr [[X]]
250262// CHECK-NEXT: [[ARGP_CUR4:%.*]] = load ptr, ptr [[VA]], align 4
251263// CHECK-NEXT: [[ARGP_NEXT5:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR4]], i32 8
252264// CHECK-NEXT: store ptr [[ARGP_NEXT5]], ptr [[VA]], align 4
@@ -279,12 +291,18 @@ double f_va_3(char *fmt, ...) {
279291// CHECK-NEXT: [[LS:%.*]] = alloca [[STRUCT_LARGE:%.*]], align 4
280292// CHECK-NEXT: [[RET:%.*]] = alloca i32, align 4
281293// CHECK-NEXT: store ptr [[FMT:%.*]], ptr [[FMT_ADDR]], align 4
294+ // CHECK-NEXT: [[FREEZE:%.+]] = freeze ptr poison
295+ // CHECK-NEXT: store ptr [[FREEZE]], ptr [[VA]]
282296// CHECK-NEXT: call void @llvm.va_start.p0(ptr [[VA]])
297+ // CHECK-NEXT: [[FREEZE1:%.+]] = freeze i32 poison
298+ // CHECK-NEXT: store i32 [[FREEZE1]], ptr [[V]]
283299// CHECK-NEXT: [[ARGP_CUR:%.*]] = load ptr, ptr [[VA]], align 4
284300// CHECK-NEXT: [[ARGP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR]], i32 4
285301// CHECK-NEXT: store ptr [[ARGP_NEXT]], ptr [[VA]], align 4
286302// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGP_CUR]], align 4
287303// CHECK-NEXT: store i32 [[TMP1]], ptr [[V]], align 4
304+ // CHECK-NEXT: [[FREEZE2:%.+]] = freeze double poison
305+ // CHECK-NEXT: store double [[FREEZE2]], ptr [[LD]]
288306// CHECK-NEXT: [[ARGP_CUR2:%.*]] = load ptr, ptr [[VA]], align 4
289307// CHECK-NEXT: [[ARGP_NEXT3:%.*]] = getelementptr inbounds i8, ptr [[ARGP_CUR2]], i32 8
290308// CHECK-NEXT: store ptr [[ARGP_NEXT3]], ptr [[VA]], align 4
0 commit comments