11// RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm %s -triple x86_64-linux-gnu -o - | FileCheck %s --check-prefixes=CHECK,CHECK-ITANIUM,CHECK-64BIT
2- // RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm %s -triple x86_64-windows -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MSABI,CHECK-MSABI64,CHECK-64BIT
3- // RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm %s -triple i386-windows -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MSABI,CHECK-MSABI32,CHECK-32BIT
2+ // RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm %s -triple x86_64-windows -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MSABI,CHECK-MSABI64,CHECK-64BIT,CLANG21-MSABI,CLANG21-MSABI64
3+ // RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm %s -triple i386-windows -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MSABI,CHECK-MSABI32,CHECK-32BIT,CLANG21-MSABI,CLANG21-MSABI32
4+ // RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm %s -triple i386-windows -fclang-abi-compat=20 -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MSABI,CHECK-32BIT,CHECK-MSABI32,CLANG20-MSABI
5+ // RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm %s -triple x86_64-windows -fclang-abi-compat=20 -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MSABI,CHECK-MSABI64,CHECK-64BIT,CLANG20-MSABI
46
57// PR46908: ensure the IR passes the verifier with optimizations enabled.
68// RUN: %clang_cc1 -std=c++2a -fexceptions -emit-llvm-only %s -triple x86_64-linux-gnu -O2
@@ -165,38 +167,44 @@ H::~H() { call_in_dtor(); }
165167// CHECK-MSABI-NOT: call{{ }}
166168// CHECK-MSABI: store i32 %[[IP]], ptr %[[IP_ALLOCA:.*]]
167169// CHECK-MSABI: %[[IMP_PARAM:.*]] = load i32, ptr %[[IP_ALLOCA]]
168- // CHECK-MSABI-NEXT: %[[THIRDBIT:.*]] = and i32 %[[IMP_PARAM]], 4
169- // CHECK-MSABI-NEXT: %[[CHCK:.*]] = icmp eq i32 %[[THIRDBIT]], 0
170- // CHECK-MSABI-NEXT: br i1 %[[CHCK]], label %dtor.entry_cont, label %dtor.call_dtor
170+ // CLANG21: %[[THIRDBIT:.*]] = and i32 %[[IMP_PARAM]], 4
171+ // CLANG21-NEXT: %[[CHCK:.*]] = icmp eq i32 %[[THIRDBIT]], 0
172+ // CLANG21-NEXT: br i1 %[[CHCK]], label %dtor.entry_cont, label %dtor.call_dtor
173+ // CLANG20-MSABI: %[[FIRSTBIT:.*]] = and i32 %[[IMP_PARAM]], 1
174+ // CLANG20-MSABI: %[[CHCK:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
175+ // CLANG20-MSABI: br i1 %[[CHCK]], label %dtor.continue, label %dtor.call_delete
171176//
172- // CHECK_MSABI-LABEL: dtor.call_dtor:
173- // CHECK_MSABI-NEXT: call void @"??1H@@UEAA@XZ"({{.*}})
174- // CHECK_MSABI-NEXT: br label %dtor.entry_cont
177+ // CLANG21-MSABI: dtor.call_dtor:
178+ // CLANG21-MSABI64-NEXT: call void @"??1H@@UEAA@XZ"({{.*}})
179+ // CLANG21-MSABI32-NEXT: call x86_thiscallcc void @"??1H@@UAE@XZ"({{.*}})
180+ // CLANG21-MSABI-NEXT: br label %dtor.entry_cont
175181//
176- // CHECK_MSABI -LABEL: dtor.entry_cont:
177- // CHECK_MSABI -NEXT: %[[FIRSTBIT:.*]] = and i32 %[[IMP_PARAM]], 1
178- // CHECK_MSABI -NEXT: %[[CHCK1:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
179- // CHECK_MSABI -NEXT: br i1 %[[CHCK1]], label %dtor.continue, label %dtor.call_delete
182+ // CLANG21-MSABI -LABEL: dtor.entry_cont:
183+ // CLANG21-MSABI -NEXT: %[[FIRSTBIT:.*]] = and i32 %[[IMP_PARAM]], 1
184+ // CLANG21-MSABI -NEXT: %[[CHCK1:.*]] = icmp eq i32 %[[FIRSTBIT]], 0
185+ // CLANG21-MSABI -NEXT: br i1 %[[CHCK1]], label %dtor.continue, label %dtor.call_delete
180186//
181- // CHECK_MSABI -LABEL: dtor.call_delete:
182- // CHECK -MSABI: %[[THIRDBIT1:.*]] = and i32 %[[IMP_PARAM]], 4
183- // CHECK -MSABI-NEXT: %[[CHCK2:.*]] = icmp eq i32 %[[THIRDBIT1]], 0
184- // CHECK -MSABI-NEXT: br i1 %[[CHCK2]], label %dtor.call_class_delete, label %dtor.call_glob_delete
187+ // CLANG21-MSABI -LABEL: dtor.call_delete:
188+ // CLANG21 -MSABI: %[[THIRDBIT1:.*]] = and i32 %[[IMP_PARAM]], 4
189+ // CLANG21 -MSABI-NEXT: %[[CHCK2:.*]] = icmp eq i32 %[[THIRDBIT1]], 0
190+ // CLANG21 -MSABI-NEXT: br i1 %[[CHCK2]], label %dtor.call_class_delete, label %dtor.call_glob_delete
185191//
186- // CHECK -MSABI-LABEL: dtor.call_glob_delete:
187- // CHECK -MSABI64: call void @"??3@YAXPEAX_K@Z"(ptr noundef %{{.*}}, i64 noundef 48)
188- // CHECK -MSABI32: call void @"??3@YAXPAXIW4align_val_t@std@@@Z"(ptr noundef %{{.*}}, i32 noundef 32, i32 noundef 16)
189- // CHECK -MSABI-NEXT: br label %[[RETURN:.*]]
192+ // CLANG21 -MSABI-LABEL: dtor.call_glob_delete:
193+ // CLANG21 -MSABI64: call void @"??3@YAXPEAX_K@Z"(ptr noundef %{{.*}}, i64 noundef 48)
194+ // CLANG21 -MSABI32: call void @"??3@YAXPAXIW4align_val_t@std@@@Z"(ptr noundef %{{.*}}, i32 noundef 32, i32 noundef 16)
195+ // CLANG21 -MSABI-NEXT: br label %[[RETURN:.*]]
190196//
191- // CHECK-MSABI: dtor.call_class_delete:
192- // CHECK-MSABI-NOT: call{{ }}
193- // CHECK-MSABI64: getelementptr {{.*}}, i64 24
194- // CHECK-MSABI32: getelementptr {{.*}}, i32 20
195- // CHECK-MSABI-NOT: call{{ }}
197+ // CLANG20-MSABI: dtor.call_delete:
198+ // CLANG21-MSABI: dtor.call_class_delete:
199+ // CLANG21-MSABI-NOT: call{{ }}
200+ // CLANG21-MSABI64: getelementptr {{.*}}, i64 24
201+ // CLANG21-MSABI32: getelementptr {{.*}}, i32 20
202+ // CLANG21-MSABI-NOT: call{{ }}
196203// CHECK-MSABI64: call void @"??3F@@SAXPEAU0@Udestroying_delete_t@std@@_KW4align_val_t@2@@Z"({{.*}}, i64 noundef 48, i64 noundef 16)
197204// CHECK-MSABI32: call void @"??3F@@SAXPAU0@Udestroying_delete_t@std@@IW4align_val_t@2@@Z"({{.*}}, i32 noundef 32, i32 noundef 16)
198205// CHECK-MSABI: br label %[[RETURN:]]
199206//
207+ // CHECK-MSABI: dtor.continue:
200208// CHECK-MSABI64: call void @"??1H@@UEAA@XZ"(
201209// CHECK-MSABI32: call x86_thiscallcc void @"??1H@@UAE@XZ"(
202210// CHECK-MSABI: br label %[[RETURN]]
@@ -217,31 +225,32 @@ I::~I() { call_in_dtor(); }
217225// CHECK-MSABI32-LABEL: define {{.*}} @"??_GI@@UAEPAXI@Z"(
218226// CHECK-MSABI-NOT: call{{ }}
219227// CHECK-MSABI: load i32
220- // CHECK -MSABI-NEXT: and i32 %[[IMP_PARAM:.*]], 4
221- // CHECK -MSABI-NEXT: icmp eq i32 {{.*}}, 0
222- // CHECK -MSABI-NEXT: br i1 %[[CHCK]] , label %dtor.entry_cont, label %dtor.call_dtor
228+ // CLANG21 -MSABI-NEXT: and i32 %[[IMP_PARAM:.*]], 4
229+ // CLANG21 -MSABI-NEXT: icmp eq i32 {{.*}}, 0
230+ // CLANG21 -MSABI-NEXT: br i1 %{{.*}} , label %dtor.entry_cont, label %dtor.call_dtor
223231//
224- // CHECK -MSABI: dtor.call_dtor:
225- // CHECK -MSABI64-NEXT: call void @"??1I@@UEAA@XZ"({{.*}})
226- // CHECK -MSABI32-NEXT: call x86_thiscallcc void @"??1I@@UAE@XZ"({{.*}})
227- // CHECK -MSABI-NEXT: br label %dtor.entry_cont
232+ // CLANG21 -MSABI: dtor.call_dtor:
233+ // CLANG21 -MSABI64-NEXT: call void @"??1I@@UEAA@XZ"({{.*}})
234+ // CLANG21 -MSABI32-NEXT: call x86_thiscallcc void @"??1I@@UAE@XZ"({{.*}})
235+ // CLANG21 -MSABI-NEXT: br label %dtor.entry_cont
228236//
229- // CHECK -MSABI: dtor.entry_cont:
230- // CHECK -MSABI-NEXT: and i32 %[[IMP_PARAM]], 1
231- // CHECK -MSABI-NEXT: icmp eq i32 %{{.*}}, 0
232- // CHECK -MSABI-NEXT: br i1 %{{.*}}, label %dtor.continue, label %dtor.call_delete
237+ // CLANG21 -MSABI: dtor.entry_cont:
238+ // CLANG21 -MSABI-NEXT: and i32 %[[IMP_PARAM]], 1
239+ // CLANG21 -MSABI-NEXT: icmp eq i32 %{{.*}}, 0
240+ // CLANG21 -MSABI-NEXT: br i1 %{{.*}}, label %dtor.continue, label %dtor.call_delete
233241//
234- // CHECK -MSABI: dtor.call_delete:
235- // CHECK -MSABI-NEXT: %[[THIRDBIT1:.*]] = and i32 %[[IMP_PARAM]], 4
236- // CHECK -MSABI-NEXT: %[[CHCK2:.*]] = icmp eq i32 %[[THIRDBIT1]], 0
237- // CHECK -MSABI-NEXT: br i1 %[[CHCK2]], label %dtor.call_class_delete, label %dtor.call_glob_delete
242+ // CLANG21 -MSABI: dtor.call_delete:
243+ // CLANG21 -MSABI-NEXT: %[[THIRDBIT1:.*]] = and i32 %[[IMP_PARAM]], 4
244+ // CLANG21 -MSABI-NEXT: %[[CHCK2:.*]] = icmp eq i32 %[[THIRDBIT1]], 0
245+ // CLANG21 -MSABI-NEXT: br i1 %[[CHCK2]], label %dtor.call_class_delete, label %dtor.call_glob_delete
238246//
239- // CHECK -MSABI-LABEL : dtor.call_glob_delete:
240- // CHECK -MSABI64: call void @"??3@YAXPEAX_KW4align_val_t@std@@@Z"(ptr noundef %{{.*}}, i64 noundef 96, i64 noundef 32)
241- // CHECK -MSABI32: call void @"??3@YAXPAXIW4align_val_t@std@@@Z"(ptr noundef %{{.*}}, i32 noundef 64, i32 noundef 32)
242- // CHECK -MSABI-NEXT: br label %[[RETURN:.*]]
247+ // CLANG21 -MSABI: dtor.call_glob_delete:
248+ // CLANG21 -MSABI64: call void @"??3@YAXPEAX_KW4align_val_t@std@@@Z"(ptr noundef %{{.*}}, i64 noundef 96, i64 noundef 32)
249+ // CLANG21 -MSABI32: call void @"??3@YAXPAXIW4align_val_t@std@@@Z"(ptr noundef %{{.*}}, i32 noundef 64, i32 noundef 32)
250+ // CLANG21 -MSABI-NEXT: br label %[[RETURN:.*]]
243251//
244- // CHECK_MSABI: dtor.call_class_delete:
252+ // CLANG20-MSABI: dtor.call_delete:
253+ // CLANG21-MSABI: dtor.call_class_delete:
245254// CHECK-MSABI-NOT: call{{ }}
246255// CHECK-MSABI64: getelementptr {{.*}}, i64 24
247256// CHECK-MSABI32: getelementptr {{.*}}, i32 20
0 commit comments