llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Adam Smith (adams381)

<details>
<summary>Changes</summary>

After #<!-- -->214742 (empty class) and #<!-- -->215117 (`_Complex` and other 
float formats), seventeen tests carried `-fno-clangir-call-conv-lowering` even 
though the pass refuses nothing in them.  They compile clean with the flag 
gone.  Their CHECK lines still described the un-lowered signature, so they 
failed on the coercion rather than on a missing feature.

Update the expectations and drop the opt-out.

Assisted by: Cursor / claude-opus-5


---

Patch is 130.02 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/218293.diff


17 Files Affected:

- (modified) clang/test/CIR/CodeGen/cleanup-conditional.cpp (+285-316) 
- (modified) clang/test/CIR/CodeGen/cleanup-derived-to-base-ref.cpp (+3-5) 
- (modified) clang/test/CIR/CodeGen/cleanup.cpp (+9-5) 
- (modified) clang/test/CIR/CodeGen/complex-cast.cpp (+6-7) 
- (modified) clang/test/CIR/CodeGen/complex.cpp (+148-45) 
- (modified) clang/test/CIR/CodeGen/cxx-rewritten-binary-operator.cpp (+28-19) 
- (modified) clang/test/CIR/CodeGen/delete-destroying.cpp (+6-11) 
- (modified) clang/test/CIR/CodeGen/dtors.cpp (+5-9) 
- (modified) clang/test/CIR/CodeGen/loop-cond-cleanup.cpp (+15-17) 
- (modified) clang/test/CIR/CodeGen/loop-cond-var-cleanup.cpp (+15-19) 
- (modified) clang/test/CIR/CodeGen/new-null.cpp (+8-16) 
- (modified) clang/test/CIR/CodeGen/nofpclass.c (+3-5) 
- (modified) clang/test/CIR/CodeGen/nrvo.cpp (+28-22) 
- (modified) clang/test/CIR/CodeGen/pack-indexing.cpp (+29-14) 
- (modified) clang/test/CIR/CodeGen/three-way-cmp.cpp (+101-46) 
- (modified) clang/test/CIR/CodeGen/var-arg-aggregate.c (+10-6) 
- (modified) clang/test/CIR/CodeGenSYCL/kernel-call-stmt.cpp (+3-9) 


``````````diff
diff --git a/clang/test/CIR/CodeGen/cleanup-conditional.cpp 
b/clang/test/CIR/CodeGen/cleanup-conditional.cpp
index 4a75dbed1925d..8516949b442be 100644
--- a/clang/test/CIR/CodeGen/cleanup-conditional.cpp
+++ b/clang/test/CIR/CodeGen/cleanup-conditional.cpp
@@ -1,11 +1,9 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports _Complex types.
-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir 
-fno-clangir-call-conv-lowering -emit-cir %s -o %t.cir
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o 
%t.cir
 // RUN: FileCheck --input-file=%t.cir %s --check-prefix=CIR
-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir 
-fno-clangir-call-conv-lowering -emit-llvm %s -o %t-cir.ll
-// RUN: FileCheck --input-file=%t-cir.ll %s --check-prefix=LLVM
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o 
%t-cir.ll
+// RUN: FileCheck --input-file=%t-cir.ll %s --check-prefixes=LLVM,LLVMCIR
 // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll
-// RUN: FileCheck --input-file=%t.ll %s --check-prefix=OGCG
+// RUN: FileCheck --input-file=%t.ll %s --check-prefixes=LLVM,OGCG
 
 struct S {
   S();
@@ -43,42 +41,42 @@ void test_ternary_temporary(bool c, int x) {
 // CIR:     cir.yield
 // CIR:   }
 
-// LLVM-LABEL: define dso_local void @_Z22test_ternary_temporarybi(
-// LLVM:         %[[TMP:.*]] = alloca %struct.S
-// LLVM:         %[[ACTIVE:.*]] = alloca i8
-// LLVM:         %[[RESULT_TMP:.*]] = alloca i32
-// LLVM:         br label %[[INIT:.*]]
-// LLVM:       [[INIT]]:
-// LLVM:         %[[COND_BYTE:.*]] = load i8, ptr %{{.*}}
-// LLVM:         %[[COND_BOOL:.*]] = trunc i8 %[[COND_BYTE]] to i1
-// LLVM:         store i8 0, ptr %[[ACTIVE]]
-// LLVM:         br i1 %[[COND_BOOL]], label %[[TRUE_BR:.*]], label 
%[[FALSE_BR:.*]]
-// LLVM:       [[TRUE_BR]]:
-// LLVM:         call void @_ZN1SC1Ev(ptr {{.*}} %[[TMP]])
-// LLVM:         store i8 1, ptr %[[ACTIVE]]
-// LLVM:         %[[GET_RESULT:.*]] = call {{.*}} i32 @_ZN1S3getEv(ptr {{.*}} 
%[[TMP]])
-// LLVM:         br label %[[MERGE:.*]]
-// LLVM:       [[FALSE_BR]]:
-// LLVM:         %[[XVAL:.*]] = load i32, ptr %{{.*}}
-// LLVM:         br label %[[MERGE]]
-// LLVM:       [[MERGE]]:
-// LLVM:         %[[PHI:.*]] = phi i32 [ %[[XVAL]], %[[FALSE_BR]] ], [ 
%[[GET_RESULT]], %[[TRUE_BR]] ]
-// LLVM:         br label %[[STORE:.*]]
-// LLVM:       [[STORE]]:
-// LLVM:         store i32 %[[PHI]], ptr %[[RESULT_TMP]]
-// LLVM:         br label %[[CLEANUP:.*]]
-// LLVM:       [[CLEANUP]]:
-// LLVM:         %[[ACTIVE_BYTE:.*]] = load i8, ptr %[[ACTIVE]]
-// LLVM:         %[[ACTIVE_BOOL:.*]] = trunc i8 %[[ACTIVE_BYTE]] to i1
-// LLVM:         br i1 %[[ACTIVE_BOOL]], label %[[DTOR:.*]], label 
%[[SKIP_DTOR:.*]]
-// LLVM:       [[DTOR]]:
-// LLVM:         call void @_ZN1SD1Ev(ptr {{.*}} %[[TMP]])
-// LLVM:         br label %[[SKIP_DTOR]]
-// LLVM:       [[SKIP_DTOR]]:
-// LLVM:         br label %[[EXIT:.*]]
-// LLVM:       [[EXIT]]:
-// LLVM:         %[[RESULT:.*]] = load i32, ptr %[[RESULT_TMP]]
-// LLVM:         store i32 %[[RESULT]], ptr %{{.*}}
+// LLVMCIR-LABEL: define dso_local void @_Z22test_ternary_temporarybi(
+// LLVMCIR:         %[[TMP:.*]] = alloca %struct.S
+// LLVMCIR:         %[[ACTIVE:.*]] = alloca i8
+// LLVMCIR:         %[[RESULT_TMP:.*]] = alloca i32
+// LLVMCIR:         br label %[[INIT:.*]]
+// LLVMCIR:       [[INIT]]:
+// LLVMCIR:         %[[COND_BYTE:.*]] = load i8, ptr %{{.*}}
+// LLVMCIR:         %[[COND_BOOL:.*]] = trunc i8 %[[COND_BYTE]] to i1
+// LLVMCIR:         store i8 0, ptr %[[ACTIVE]]
+// LLVMCIR:         br i1 %[[COND_BOOL]], label %[[TRUE_BR:.*]], label 
%[[FALSE_BR:.*]]
+// LLVMCIR:       [[TRUE_BR]]:
+// LLVMCIR:         call void @_ZN1SC1Ev(ptr {{.*}} %[[TMP]])
+// LLVMCIR:         store i8 1, ptr %[[ACTIVE]]
+// LLVMCIR:         %[[GET_RESULT:.*]] = call {{.*}} i32 @_ZN1S3getEv(ptr 
{{.*}} %[[TMP]])
+// LLVMCIR:         br label %[[MERGE:.*]]
+// LLVMCIR:       [[FALSE_BR]]:
+// LLVMCIR:         %[[XVAL:.*]] = load i32, ptr %{{.*}}
+// LLVMCIR:         br label %[[MERGE]]
+// LLVMCIR:       [[MERGE]]:
+// LLVMCIR:         %[[PHI:.*]] = phi i32 [ %[[XVAL]], %[[FALSE_BR]] ], [ 
%[[GET_RESULT]], %[[TRUE_BR]] ]
+// LLVMCIR:         br label %[[STORE:.*]]
+// LLVMCIR:       [[STORE]]:
+// LLVMCIR:         store i32 %[[PHI]], ptr %[[RESULT_TMP]]
+// LLVMCIR:         br label %[[CLEANUP:.*]]
+// LLVMCIR:       [[CLEANUP]]:
+// LLVMCIR:         %[[ACTIVE_BYTE:.*]] = load i8, ptr %[[ACTIVE]]
+// LLVMCIR:         %[[ACTIVE_BOOL:.*]] = trunc i8 %[[ACTIVE_BYTE]] to i1
+// LLVMCIR:         br i1 %[[ACTIVE_BOOL]], label %[[DTOR:.*]], label 
%[[SKIP_DTOR:.*]]
+// LLVMCIR:       [[DTOR]]:
+// LLVMCIR:         call void @_ZN1SD1Ev(ptr {{.*}} %[[TMP]])
+// LLVMCIR:         br label %[[SKIP_DTOR]]
+// LLVMCIR:       [[SKIP_DTOR]]:
+// LLVMCIR:         br label %[[EXIT:.*]]
+// LLVMCIR:       [[EXIT]]:
+// LLVMCIR:         %[[RESULT:.*]] = load i32, ptr %[[RESULT_TMP]]
+// LLVMCIR:         store i32 %[[RESULT]], ptr %{{.*}}
 
 // OGCG-LABEL: define dso_local void @_Z22test_ternary_temporarybi(
 // OGCG:       entry:
@@ -155,53 +153,53 @@ void test_ternary_both_branches(bool c) {
 // CIR:     cir.yield
 // CIR:   }
 
-// LLVM-LABEL: define dso_local void @_Z26test_ternary_both_branchesb(
-// LLVM:         %{{.*}} = alloca i8
-// LLVM:         %{{.*}} = alloca i32
-// LLVM:         %[[TMPA:.*]] = alloca %struct.A
-// LLVM:         %[[ACTA:.*]] = alloca i8
-// LLVM:         %[[TMPB:.*]] = alloca %struct.B
-// LLVM:         %[[ACTB:.*]] = alloca i8
-// LLVM:         %[[RESULT_TMP:.*]] = alloca i32
-// LLVM:         br label %[[INIT:.*]]
-// LLVM:       [[INIT]]:
-// LLVM:         %[[COND_BYTE:.*]] = load i8, ptr %{{.*}}
-// LLVM:         %[[COND_BOOL:.*]] = trunc i8 %[[COND_BYTE]] to i1
-// LLVM:         store i8 0, ptr %[[ACTA]]
-// LLVM:         store i8 0, ptr %[[ACTB]]
-// LLVM:         br i1 %[[COND_BOOL]], label %[[CONSTRUCT_A:.*]], label 
%[[CONSTRUCT_B:.*]]
-// LLVM:       [[CONSTRUCT_A]]:
-// LLVM:         call void @_ZN1AC1Ev({{.*}} %[[TMPA]])
-// LLVM:         store i8 1, ptr %[[ACTA]]
-// LLVM:         %[[CALLA:.*]] = call noundef i32 @_ZN1A3getEv({{.*}} 
%[[TMPA]])
-// LLVM:         br label %[[MERGE:.*]]
-// LLVM:       [[CONSTRUCT_B]]:
-// LLVM:         call void @_ZN1BC1Ev({{.*}} %[[TMPB]])
-// LLVM:         store i8 1, ptr %[[ACTB]]
-// LLVM:         %[[CALLB:.*]] = call {{.*}} i32 @_ZN1B3getEv({{.*}} %[[TMPB]])
-// LLVM:         br label %[[MERGE]]
-// LLVM:       [[MERGE]]:
-// LLVM:         %[[PHI:.*]] = phi i32 [ %[[CALLB]], %[[CONSTRUCT_B]] ], [ 
%[[CALLA]], %[[CONSTRUCT_A]] ]
-// LLVM:         br label %[[STORE:.*]]
-// LLVM:       [[STORE]]:
-// LLVM:         store i32 %[[PHI]], ptr %[[RESULT_TMP]]
-// LLVM:         br label %[[CLEANUP_B:.*]]
-// LLVM:       [[CLEANUP_B]]:
-// LLVM:         %[[ACTIVE_BYTE_B:.*]] = load i8, ptr %[[ACTB]]
-// LLVM:         %[[ACTIVE_BOOL_B:.*]] = trunc i8 %[[ACTIVE_BYTE_B]] to i1
-// LLVM:         br i1 %[[ACTIVE_BOOL_B]], label %[[DTOR_B:.*]], label 
%[[SKIP_DTOR_B:.*]]
-// LLVM:       [[DTOR_B]]:
-// LLVM:         call void @_ZN1BD1Ev({{.*}} %[[TMPB]])
-// LLVM:         br label %[[SKIP_DTOR_B]]
-// LLVM:       [[SKIP_DTOR_B]]:
-// LLVM:         %[[ACTIVE_BYTE_A:.*]] = load i8, ptr %[[ACTA]]
-// LLVM:         %[[ACTIVE_BOOL_A:.*]] = trunc i8 %[[ACTIVE_BYTE_A]] to i1
-// LLVM:         br i1 %[[ACTIVE_BOOL_A]], label %[[DTOR_A:.*]], label 
%[[SKIP_DTOR_A:.*]]
-// LLVM:       [[DTOR_A]]:
-// LLVM:         call void @_ZN1AD1Ev({{.*}} %[[TMPA]])
-// LLVM:         br label %[[SKIP_DTOR_A]]
-// LLVM:       [[SKIP_DTOR_A]]:
-// LLVM:         br label %{{.*}}
+// LLVMCIR-LABEL: define dso_local void @_Z26test_ternary_both_branchesb(
+// LLVMCIR:         %{{.*}} = alloca i8
+// LLVMCIR:         %{{.*}} = alloca i32
+// LLVMCIR:         %[[TMPA:.*]] = alloca %struct.A
+// LLVMCIR:         %[[ACTA:.*]] = alloca i8
+// LLVMCIR:         %[[TMPB:.*]] = alloca %struct.B
+// LLVMCIR:         %[[ACTB:.*]] = alloca i8
+// LLVMCIR:         %[[RESULT_TMP:.*]] = alloca i32
+// LLVMCIR:         br label %[[INIT:.*]]
+// LLVMCIR:       [[INIT]]:
+// LLVMCIR:         %[[COND_BYTE:.*]] = load i8, ptr %{{.*}}
+// LLVMCIR:         %[[COND_BOOL:.*]] = trunc i8 %[[COND_BYTE]] to i1
+// LLVMCIR:         store i8 0, ptr %[[ACTA]]
+// LLVMCIR:         store i8 0, ptr %[[ACTB]]
+// LLVMCIR:         br i1 %[[COND_BOOL]], label %[[CONSTRUCT_A:.*]], label 
%[[CONSTRUCT_B:.*]]
+// LLVMCIR:       [[CONSTRUCT_A]]:
+// LLVMCIR:         call void @_ZN1AC1Ev({{.*}} %[[TMPA]])
+// LLVMCIR:         store i8 1, ptr %[[ACTA]]
+// LLVMCIR:         %[[CALLA:.*]] = call noundef i32 @_ZN1A3getEv({{.*}} 
%[[TMPA]])
+// LLVMCIR:         br label %[[MERGE:.*]]
+// LLVMCIR:       [[CONSTRUCT_B]]:
+// LLVMCIR:         call void @_ZN1BC1Ev({{.*}} %[[TMPB]])
+// LLVMCIR:         store i8 1, ptr %[[ACTB]]
+// LLVMCIR:         %[[CALLB:.*]] = call {{.*}} i32 @_ZN1B3getEv({{.*}} 
%[[TMPB]])
+// LLVMCIR:         br label %[[MERGE]]
+// LLVMCIR:       [[MERGE]]:
+// LLVMCIR:         %[[PHI:.*]] = phi i32 [ %[[CALLB]], %[[CONSTRUCT_B]] ], [ 
%[[CALLA]], %[[CONSTRUCT_A]] ]
+// LLVMCIR:         br label %[[STORE:.*]]
+// LLVMCIR:       [[STORE]]:
+// LLVMCIR:         store i32 %[[PHI]], ptr %[[RESULT_TMP]]
+// LLVMCIR:         br label %[[CLEANUP_B:.*]]
+// LLVMCIR:       [[CLEANUP_B]]:
+// LLVMCIR:         %[[ACTIVE_BYTE_B:.*]] = load i8, ptr %[[ACTB]]
+// LLVMCIR:         %[[ACTIVE_BOOL_B:.*]] = trunc i8 %[[ACTIVE_BYTE_B]] to i1
+// LLVMCIR:         br i1 %[[ACTIVE_BOOL_B]], label %[[DTOR_B:.*]], label 
%[[SKIP_DTOR_B:.*]]
+// LLVMCIR:       [[DTOR_B]]:
+// LLVMCIR:         call void @_ZN1BD1Ev({{.*}} %[[TMPB]])
+// LLVMCIR:         br label %[[SKIP_DTOR_B]]
+// LLVMCIR:       [[SKIP_DTOR_B]]:
+// LLVMCIR:         %[[ACTIVE_BYTE_A:.*]] = load i8, ptr %[[ACTA]]
+// LLVMCIR:         %[[ACTIVE_BOOL_A:.*]] = trunc i8 %[[ACTIVE_BYTE_A]] to i1
+// LLVMCIR:         br i1 %[[ACTIVE_BOOL_A]], label %[[DTOR_A:.*]], label 
%[[SKIP_DTOR_A:.*]]
+// LLVMCIR:       [[DTOR_A]]:
+// LLVMCIR:         call void @_ZN1AD1Ev({{.*}} %[[TMPA]])
+// LLVMCIR:         br label %[[SKIP_DTOR_A]]
+// LLVMCIR:       [[SKIP_DTOR_A]]:
+// LLVMCIR:         br label %{{.*}}
 
 // OGCG-LABEL: define dso_local void @_Z26test_ternary_both_branchesb(
 // OGCG:       entry:
@@ -277,55 +275,55 @@ int test_return_ternary(bool c) {
 // CIR:   %[[RET:.*]] = cir.load %{{.*}} : !cir.ptr<!s32i>, !s32i
 // CIR:   cir.return %[[RET]] : !s32i
 
-// LLVM-LABEL: define dso_local noundef i32 @_Z19test_return_ternaryb(
-// LLVM:         %{{.*}} = alloca i8
-// LLVM:         %[[RETVAL:.*]] = alloca i32
-// LLVM:         %[[TMPA:.*]] = alloca %struct.A
-// LLVM:         %[[ACTA:.*]] = alloca i8
-// LLVM:         %[[TMPB:.*]] = alloca %struct.B
-// LLVM:         %[[ACTB:.*]] = alloca i8
-// LLVM:         br label %[[INIT:.*]]
-// LLVM:       [[INIT]]:
-// LLVM:         %[[COND_BYTE:.*]] = load i8, ptr %{{.*}}
-// LLVM:         %[[COND_BOOL:.*]] = trunc i8 %[[COND_BYTE]] to i1
-// LLVM:         store i8 0, ptr %[[ACTA]]
-// LLVM:         store i8 0, ptr %[[ACTB]]
-// LLVM:         br i1 %[[COND_BOOL]], label %[[CONSTRUCT_A:.*]], label 
%[[CONSTRUCT_B:.*]]
-// LLVM:       [[CONSTRUCT_A]]:
-// LLVM:         call void @_ZN1AC1Ev({{.*}} %[[TMPA]])
-// LLVM:         store i8 1, ptr %[[ACTA]]
-// LLVM:         %[[CALLA:.*]] = call noundef i32 @_ZN1A3getEv({{.*}} 
%[[TMPA]])
-// LLVM:         br label %[[MERGE:.*]]
-// LLVM:       [[CONSTRUCT_B]]:
-// LLVM:         call void @_ZN1BC1Ev({{.*}} %[[TMPB]])
-// LLVM:         store i8 1, ptr %[[ACTB]]
-// LLVM:         %[[CALLB:.*]] = call noundef i32 @_ZN1B3getEv({{.*}} 
%[[TMPB]])
-// LLVM:         br label %[[MERGE]]
-// LLVM:       [[MERGE]]:
-// LLVM:         %[[PHI:.*]] = phi i32 [ %[[CALLB]], %[[CONSTRUCT_B]] ], [ 
%[[CALLA]], %[[CONSTRUCT_A]] ]
-// LLVM:         br label %[[STORE_RET:.*]]
-// LLVM:       [[STORE_RET]]:
-// LLVM:         store i32 %[[PHI]], ptr %[[RETVAL]]
-// LLVM:         br label %[[CLEANUP_B:.*]]
-// LLVM:       [[CLEANUP_B]]:
-// LLVM:         %[[ACTIVE_BYTE_B:.*]] = load i8, ptr %[[ACTB]]
-// LLVM:         %[[ACTIVE_BOOL_B:.*]] = trunc i8 %[[ACTIVE_BYTE_B]] to i1
-// LLVM:         br i1 %[[ACTIVE_BOOL_B]], label %[[DTOR_B:.*]], label 
%[[SKIP_DTOR_B:.*]]
-// LLVM:       [[DTOR_B]]:
-// LLVM:         call void @_ZN1BD1Ev({{.*}} %[[TMPB]])
-// LLVM:         br label %[[SKIP_DTOR_B]]
-// LLVM:       [[SKIP_DTOR_B]]:
-// LLVM:         %[[ACTIVE_BYTE_A:.*]] = load i8, ptr %[[ACTA]]
-// LLVM:         %[[ACTIVE_BOOL_A:.*]] = trunc i8 %[[ACTIVE_BYTE_A]] to i1
-// LLVM:         br i1 %[[ACTIVE_BOOL_A]], label %[[DTOR_A:.*]], label 
%[[SKIP_DTOR_A:.*]]
-// LLVM:       [[DTOR_A]]:
-// LLVM:         call void @_ZN1AD1Ev({{.*}} %[[TMPA]])
-// LLVM:         br label %[[SKIP_DTOR_A]]
-// LLVM:       [[SKIP_DTOR_A]]:
-// LLVM:         br label %[[EXIT:.*]]
-// LLVM:       [[EXIT]]:
-// LLVM:         %[[RET:.*]] = load i32, ptr %[[RETVAL]]
-// LLVM:         ret i32 %[[RET]]
+// LLVMCIR-LABEL: define dso_local noundef i32 @_Z19test_return_ternaryb(
+// LLVMCIR:         %{{.*}} = alloca i8
+// LLVMCIR:         %[[RETVAL:.*]] = alloca i32
+// LLVMCIR:         %[[TMPA:.*]] = alloca %struct.A
+// LLVMCIR:         %[[ACTA:.*]] = alloca i8
+// LLVMCIR:         %[[TMPB:.*]] = alloca %struct.B
+// LLVMCIR:         %[[ACTB:.*]] = alloca i8
+// LLVMCIR:         br label %[[INIT:.*]]
+// LLVMCIR:       [[INIT]]:
+// LLVMCIR:         %[[COND_BYTE:.*]] = load i8, ptr %{{.*}}
+// LLVMCIR:         %[[COND_BOOL:.*]] = trunc i8 %[[COND_BYTE]] to i1
+// LLVMCIR:         store i8 0, ptr %[[ACTA]]
+// LLVMCIR:         store i8 0, ptr %[[ACTB]]
+// LLVMCIR:         br i1 %[[COND_BOOL]], label %[[CONSTRUCT_A:.*]], label 
%[[CONSTRUCT_B:.*]]
+// LLVMCIR:       [[CONSTRUCT_A]]:
+// LLVMCIR:         call void @_ZN1AC1Ev({{.*}} %[[TMPA]])
+// LLVMCIR:         store i8 1, ptr %[[ACTA]]
+// LLVMCIR:         %[[CALLA:.*]] = call noundef i32 @_ZN1A3getEv({{.*}} 
%[[TMPA]])
+// LLVMCIR:         br label %[[MERGE:.*]]
+// LLVMCIR:       [[CONSTRUCT_B]]:
+// LLVMCIR:         call void @_ZN1BC1Ev({{.*}} %[[TMPB]])
+// LLVMCIR:         store i8 1, ptr %[[ACTB]]
+// LLVMCIR:         %[[CALLB:.*]] = call noundef i32 @_ZN1B3getEv({{.*}} 
%[[TMPB]])
+// LLVMCIR:         br label %[[MERGE]]
+// LLVMCIR:       [[MERGE]]:
+// LLVMCIR:         %[[PHI:.*]] = phi i32 [ %[[CALLB]], %[[CONSTRUCT_B]] ], [ 
%[[CALLA]], %[[CONSTRUCT_A]] ]
+// LLVMCIR:         br label %[[STORE_RET:.*]]
+// LLVMCIR:       [[STORE_RET]]:
+// LLVMCIR:         store i32 %[[PHI]], ptr %[[RETVAL]]
+// LLVMCIR:         br label %[[CLEANUP_B:.*]]
+// LLVMCIR:       [[CLEANUP_B]]:
+// LLVMCIR:         %[[ACTIVE_BYTE_B:.*]] = load i8, ptr %[[ACTB]]
+// LLVMCIR:         %[[ACTIVE_BOOL_B:.*]] = trunc i8 %[[ACTIVE_BYTE_B]] to i1
+// LLVMCIR:         br i1 %[[ACTIVE_BOOL_B]], label %[[DTOR_B:.*]], label 
%[[SKIP_DTOR_B:.*]]
+// LLVMCIR:       [[DTOR_B]]:
+// LLVMCIR:         call void @_ZN1BD1Ev({{.*}} %[[TMPB]])
+// LLVMCIR:         br label %[[SKIP_DTOR_B]]
+// LLVMCIR:       [[SKIP_DTOR_B]]:
+// LLVMCIR:         %[[ACTIVE_BYTE_A:.*]] = load i8, ptr %[[ACTA]]
+// LLVMCIR:         %[[ACTIVE_BOOL_A:.*]] = trunc i8 %[[ACTIVE_BYTE_A]] to i1
+// LLVMCIR:         br i1 %[[ACTIVE_BOOL_A]], label %[[DTOR_A:.*]], label 
%[[SKIP_DTOR_A:.*]]
+// LLVMCIR:       [[DTOR_A]]:
+// LLVMCIR:         call void @_ZN1AD1Ev({{.*}} %[[TMPA]])
+// LLVMCIR:         br label %[[SKIP_DTOR_A]]
+// LLVMCIR:       [[SKIP_DTOR_A]]:
+// LLVMCIR:         br label %[[EXIT:.*]]
+// LLVMCIR:       [[EXIT]]:
+// LLVMCIR:         %[[RET:.*]] = load i32, ptr %[[RETVAL]]
+// LLVMCIR:         ret i32 %[[RET]]
 
 // OGCG-LABEL: define dso_local noundef i32 @_Z19test_return_ternaryb(
 // OGCG:       entry:
@@ -386,23 +384,23 @@ int test_false_positive_conditional(bool c) {
 // CIR:     cir.yield
 // CIR:   }
 
-// LLVM-LABEL: define dso_local noundef i32 
@_Z31test_false_positive_conditionalb(
-// LLVM:         %[[RETVAL:.*]] = alloca i32
-// LLVM:         %[[TMP:.*]] = alloca %struct.S
-// LLVM:         call void @_ZN1SC1Ev({{.*}} %[[TMP]])
-// LLVM:         br label %[[BODY:.*]]
-// LLVM:       [[BODY]]:
-// LLVM:         %[[VAL:.*]] = call {{.*}} i32 @_ZN1S3getEv({{.*}} %[[TMP]])
-// LLVM:         %[[CMP:.*]] = icmp ne i32 %[[VAL]], 0
-// LLVM:         %[[SEL:.*]] = select i1 %[[CMP]], i32 1, i32 2
-// LLVM:         store i32 %[[SEL]], ptr %[[RETVAL]]
-// LLVM:         br label %[[DTOR:.*]]
-// LLVM:       [[DTOR]]:
-// LLVM:         call void @_ZN1SD1Ev({{.*}} %[[TMP]])
-// LLVM:         br label %[[EXIT:.*]]
-// LLVM:       [[EXIT]]:
-// LLVM:         %[[RET:.*]] = load i32, ptr %[[RETVAL]]
-// LLVM:         ret i32 %[[RET]]
+// LLVMCIR-LABEL: define dso_local noundef i32 
@_Z31test_false_positive_conditionalb(
+// LLVMCIR:         %[[RETVAL:.*]] = alloca i32
+// LLVMCIR:         %[[TMP:.*]] = alloca %struct.S
+// LLVMCIR:         call void @_ZN1SC1Ev({{.*}} %[[TMP]])
+// LLVMCIR:         br label %[[BODY:.*]]
+// LLVMCIR:       [[BODY]]:
+// LLVMCIR:         %[[VAL:.*]] = call {{.*}} i32 @_ZN1S3getEv({{.*}} %[[TMP]])
+// LLVMCIR:         %[[CMP:.*]] = icmp ne i32 %[[VAL]], 0
+// LLVMCIR:         %[[SEL:.*]] = select i1 %[[CMP]], i32 1, i32 2
+// LLVMCIR:         store i32 %[[SEL]], ptr %[[RETVAL]]
+// LLVMCIR:         br label %[[DTOR:.*]]
+// LLVMCIR:       [[DTOR]]:
+// LLVMCIR:         call void @_ZN1SD1Ev({{.*}} %[[TMP]])
+// LLVMCIR:         br label %[[EXIT:.*]]
+// LLVMCIR:       [[EXIT]]:
+// LLVMCIR:         %[[RET:.*]] = load i32, ptr %[[RETVAL]]
+// LLVMCIR:         ret i32 %[[RET]]
 
 // OGCG-LABEL: define dso_local noundef i32 
@_Z31test_false_positive_conditionalb(
 // OGCG:         call void @_ZN1SC1Ev({{.*}} %[[TMP:.*]])
@@ -523,40 +521,6 @@ void test_nested_ewc(bool c1, bool c2) {
 // LLVM:         call void @_ZN1TD1Ev({{.*}} %[[REF_TMP]])
 // LLVM:         call void @_ZN1TD1Ev({{.*}} %[[RESULT]])
 
-// OGCG-LABEL: define dso_local void @_Z15test_nested_ewcbb(
-// Inner ternary: c1 ? T(1) : T(2).
-// OGCG:         br i1 %{{.*}}, label %[[T1:.*]], label %[[T2:.*]]
-// OGCG:       [[T1]]:
-// OGCG:         call void @_ZN1TC1Ei({{.*}} %[[S:.*]], i32 {{.*}} 1)
-// OGCG:         br label %[[INNER_MERGE:.*]]
-// OGCG:       [[T2]]:
-// OGCG:         call void @_ZN1TC1Ei({{.*}} %[[S]], i32 {{.*}} 2)
-// OGCG:         br label %[[INNER_MERGE]]
-// Copy construct ref.tmp from s, then destroy s.
-// OGCG:       [[INNER_MERGE]]:
-// OGCG:         call void @_ZN1TC1ERKS_({{.*}} %[[REF_TMP:.*]], {{.*}} %[[S]])
-// OGCG:         call void @_ZN1TD1Ev({{.*}} %[[S]])
-// Outer ternary: operator bool() + conditional construction of result.
-// OGCG:         %[[BOOL:.*]] = call {{.*}} i1 @_ZN1TcvbEv({{.*}} %[[REF_TMP]])
-// OGCG:         br i1 %[[BOOL]], label %[[TRUE:.*]], label %[[FALSE:.*]]
-// OGCG:       [[TRUE]]:
-// OGCG:         br i1 %{{.*}}, label %[[T3:.*]], label %[[T4:.*]]
-// OGCG:       [[T3]]:
-// OGCG:         call void @_ZN1TC1Ei({{.*}} %[[RESULT:.*]], i32 {{.*}} 3)
-// OGCG:         br label %[[OUTER_MERGE1:.*]]
-// OGCG:       [[T4]]:
-// OGCG:         call void @_ZN1TC1Ei({{.*}} %[[RESULT]], i32 {{.*}} 4)
-// OGCG:         br label %[[OUTER_MERGE1]]
-// OGCG:       [[OUTER_MERGE1]]:
-// OGCG:         br label %[[OUTER_MERGE2:.*]]
-// OGCG:       [[FALSE]]:
-// OGCG:         call void @_ZN1TC1Ei({{.*}} %[[RESULT]], i32 {{.*}} 5)
-// OGCG:         br label %[[OUTER_MERGE2]]
-// Cleanup: destroy ref.tmp, then result.
-// OGCG:       [[OUTER_MERGE2]]:
-// OGCG:         call void @_ZN1TD1Ev({{.*}} %[[REF_TMP]])
-// OGCG:         call void @_ZN1TD1Ev({{.*}} %[[RESULT]])
-
 // The result of the ternary is bound to an lvalue (the parameter of
 // operator=), so the enclosing ExprWithCleanups is lowered through the
 // LValue emission path.  The lvalue path must still open a
@@ -620,41 +584,41 @@ void test_lvalue_ternary_cleanup(bool c, V &y) {
 // CIR:     cir.yield
 // CIR:   }
 
-// LLVM-LABEL: define dso_local void @_Z27test_lvalue_ternary_cleanupbR1V(
-// LLVM:         %[[REFTMP:.*]] = alloca %struct.V
-// LLVM:         %[[UTRUE:.*]] = alloca %struct.U
-// LLVM:         %[[ACTTRUE:.*]] = alloca i8
-// LLVM:         %[[UFALSE:.*]] = alloca %struct.U
-// LLVM:         %[[ACTFALSE:.*]] = alloca i8
-// LLVM:         store i8 0, ptr %[[ACTTRUE]]
-// LLVM:         store i8 0, ptr %[[ACTFALSE]]
-// LLVM:         br i1 %{{.*}}, label %[[CONS_TRUE:.*]], label 
%[[CONS_FALSE:.*]]
...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/218293
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to