Author: Adam Smith
Date: 2026-08-26T11:02:45-05:00
New Revision: 68f9f8be6e6948508ce5121b3398838b22ec7eab

URL: 
https://github.com/llvm/llvm-project/commit/68f9f8be6e6948508ce5121b3398838b22ec7eab
DIFF: 
https://github.com/llvm/llvm-project/commit/68f9f8be6e6948508ce5121b3398838b22ec7eab.diff

LOG: [CIR] Regenerate CHECK lines for 8 more callconv opt-out tests (#218931)

These 8 CIR tests compile clean with x86_64 calling-convention lowering
on, but their CHECK lines still pinned the pre-coercion CIR: raw record
types in signatures, plain by-value loads for temporaries with a
non-trivial destructor, and matching store/load pairs for empty records.
The pass now emits the ABI-correct shape instead: sret return
parameters, a dropped or byref-marked argument for records that carry no
data or that need pass-by-reference, and a `#cir.poison` placeholder
where a value the pass ignores used to be stored.

Assisted-by: Cursor / claude-opus-5

Added: 
    

Modified: 
    clang/test/CIR/CodeGen/array-ctor.cpp
    clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper-eh.cpp
    clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper.cpp
    clang/test/CIR/CodeGen/paren-list-agg-init.cpp
    clang/test/CIR/CodeGen/partial-array-cleanup.cpp
    clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp
    clang/test/CIR/CodeGenOpenACC/atomic-update.cpp
    clang/test/CIR/CodeGenOpenACC/atomic-write.cpp

Removed: 
    


################################################################################
diff  --git a/clang/test/CIR/CodeGen/array-ctor.cpp 
b/clang/test/CIR/CodeGen/array-ctor.cpp
index c5ff5f2b82404..07deb299542aa 100644
--- a/clang/test/CIR/CodeGen/array-ctor.cpp
+++ b/clang/test/CIR/CodeGen/array-ctor.cpp
@@ -1,9 +1,7 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports parameters of an empty or tag class.
-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fclangir -fno-clangir-call-conv-lowering -emit-cir -mmlir 
--mlir-print-ir-before=cir-lowering-prepare %s -o -  2>&1 | FileCheck 
--check-prefixes=CIR-BEFORE-LPP %s
-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fclangir -fno-clangir-call-conv-lowering -emit-cir %s -o %t.cir
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fclangir -emit-cir -mmlir --mlir-print-ir-before=cir-lowering-prepare %s -o -  
2>&1 | FileCheck --check-prefixes=CIR-BEFORE-LPP %s
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-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 -Wno-unused-value 
-fclangir -fno-clangir-call-conv-lowering -emit-llvm %s -o %t-cir.ll
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fclangir -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 -Wno-unused-value 
-emit-llvm %s -o %t.ll
 // RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG
@@ -208,8 +206,7 @@ void TempInArray() {
 // CIR:        cir.do {
 // CIR-NEXT:     %[[CURRENT:.*]] = cir.load %[[ITER:.*]] : 
!cir.ptr<!cir.ptr<!rec_CausesTemp>>, !cir.ptr<!rec_CausesTemp>
 // CIR-NEXT:     cir.cleanup.scope {
-// CIR-NEXT:       %[[LOAD:.*]] = cir.load {{.*}} %[[TMP]] : 
!cir.ptr<!rec_Temp>, !rec_Temp
-// CIR-NEXT:       cir.call @_ZN10CausesTempC1E4Temp(%[[CURRENT]], %[[LOAD]])
+// CIR-NEXT:       cir.call @_ZN10CausesTempC1E4Temp(%[[CURRENT]], %[[TMP]]) : 
({{.*}}, !cir.ptr<!rec_Temp> {llvm.align = 1 : i64, llvm.byref = !rec_Temp}) -> 
()
 // CIR-NEXT:       cir.yield
 // CIR-NEXT:     } cleanup normal {
 // CIR-NEXT:       cir.call @_ZN4TempD1Ev(%[[TMP]]) nothrow
@@ -230,8 +227,7 @@ void TempInArray() {
 // LLVM:       %[[CURRENT:.*]] = load ptr, ptr %[[ITER]]
 // LLVM:       br label %[[CONSTRUCT_BR:.*]]
 // LLVM:       [[CONSTRUCT_BR]]:
-// LLVM:       %[[LOAD:.*]] = load %struct.Temp, ptr %[[TMP]]
-// LLVM:       call void @_ZN10CausesTempC1E4Temp(ptr {{.*}}%[[CURRENT]], 
%struct.Temp %[[LOAD]])
+// LLVM:       call void @_ZN10CausesTempC1E4Temp(ptr {{.*}}%[[CURRENT]], ptr 
byref(%struct.Temp) align 1 %[[TMP]])
 // LLVM:       br label %[[CLEANUP_BR:.*]]
 // LLVM:       [[CLEANUP_BR]]:
 // LLVM:       call void @_ZN4TempD1Ev({{.*}}[[TMP]])
@@ -295,8 +291,7 @@ void Temp2InArray() {
 // CIR-NEXT:     %[[CURRENT:.*]] = cir.load %[[ITER:.*]] : 
!cir.ptr<!cir.ptr<!rec_CausesTemp2>>, !cir.ptr<!rec_CausesTemp2>
 // CIR-NEXT:     cir.call @_ZN5Temp2C1Ev(%[[TMP]])
 // CIR-NEXT:     cir.cleanup.scope {
-// CIR-NEXT:       %[[LOAD:.*]] = cir.load {{.*}} %[[TMP]] : 
!cir.ptr<!rec_Temp2>, !rec_Temp2
-// CIR-NEXT:         cir.call @_ZN11CausesTemp2C1E5Temp2(%[[CURRENT]], 
%[[LOAD]])
+// CIR-NEXT:         cir.call @_ZN11CausesTemp2C1E5Temp2(%[[CURRENT]], 
%[[TMP]]) : ({{.*}}, !cir.ptr<!rec_Temp2> {llvm.align = 1 : i64, llvm.byref = 
!rec_Temp2}) -> ()
 // CIR-NEXT:         cir.yield
 // CIR-NEXT:       } cleanup normal {
 // CIR-NEXT:         cir.call @_ZN5Temp2D1Ev(%[[TMP]]) nothrow
@@ -333,8 +328,7 @@ void Temp2InArray() {
 // LLVM:       call void @_ZN5Temp2C1Ev({{.*}}%[[TMP]])
 // LLVM:       br label %[[CONSTRUCT_BR:.*]]
 // LLVM:       [[CONSTRUCT_BR]]:
-// LLVM:       %[[LOAD:.*]] = load %struct.Temp2, ptr %[[TMP]]
-// LLVM:       call void @_ZN11CausesTemp2C1E5Temp2(ptr {{.*}}%[[CURRENT]], 
%struct.Temp2 %[[LOAD]])
+// LLVM:       call void @_ZN11CausesTemp2C1E5Temp2(ptr {{.*}}%[[CURRENT]], 
ptr byref(%struct.Temp2) align 1 %[[TMP]])
 // LLVM:       br label %[[CLEANUP_BR:.*]]
 // LLVM:       [[CLEANUP_BR]]:
 // LLVM:       call void @_ZN5Temp2D1Ev({{.*}}[[TMP]])

diff  --git a/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper-eh.cpp 
b/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper-eh.cpp
index 443d15f30fbd6..5792c78cfad49 100644
--- a/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper-eh.cpp
+++ b/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper-eh.cpp
@@ -1,8 +1,6 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports parameters of an empty or tag class.
-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fexceptions 
-fcxx-exceptions -fclangir -fno-clangir-call-conv-lowering -emit-cir %s -o 
%t.cir
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fexceptions 
-fcxx-exceptions -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 -fexceptions 
-fcxx-exceptions -fclangir -fno-clangir-call-conv-lowering -emit-llvm %s -o 
%t-cir.ll
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fexceptions 
-fcxx-exceptions -fclangir -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 -fexceptions 
-fcxx-exceptions -emit-llvm %s -o %t.ll
 // RUN: FileCheck --input-file=%t.ll %s --check-prefix=OGCG
@@ -41,8 +39,7 @@ Wrapper makeWrapper() {
     : Wrapper::empty();
 }
 
-// CIR: cir.func {{.*}} @_Z11makeWrapperv() -> !rec_Wrapper
-// CIR:   %[[RETVAL:.*]] = cir.alloca "__retval" {{.*}} : 
!cir.ptr<!rec_Wrapper>
+// CIR: cir.func {{.*}} @_Z11makeWrapperv(%[[RETVAL:.*]]: 
!cir.ptr<!rec_Wrapper> {llvm.align = 1 : i64, llvm.dead_on_unwind, 
llvm.noalias, llvm.sret = !rec_Wrapper, llvm.writable}{{.*}})
 // CIR:   %[[CLEANUP_COND:.*]] = cir.alloca "cleanup.cond" {{.*}} : 
!cir.ptr<!cir.bool>
 // CIR:   %[[AGG_TMP0:.*]] = cir.alloca "agg.tmp0" {{.*}} : 
!cir.ptr<!rec_std3A3Aunique_ptr3CBase3E>
 // CIR:   cir.cleanup.scope {
@@ -54,11 +51,9 @@ Wrapper makeWrapper() {
 // CIR:       cir.call @_ZNSt10unique_ptrI4BaseEC1EPS0_(%[[AGG_TMP0]], 
%[[SOURCE]])
 // CIR:       %[[TRUE:.*]] = cir.const #true
 // CIR:       cir.store %[[TRUE]], %[[CLEANUP_COND]]
-// CIR:       %[[AGG_TMP0_LOAD:.*]] = cir.load{{.*}} %[[AGG_TMP0]]
-// CIR:       cir.call @_ZN7WrapperC1ESt10unique_ptrI4BaseE(%[[RETVAL]], 
%[[AGG_TMP0_LOAD]])
+// CIR:       cir.call @_ZN7WrapperC1ESt10unique_ptrI4BaseE(%[[RETVAL]], 
%[[AGG_TMP0]]) : ({{.*}}, !cir.ptr<!rec_std3A3Aunique_ptr3CBase3E> {llvm.align 
= 1 : i64, llvm.byref = !rec_std3A3Aunique_ptr3CBase3E}) -> ()
 // CIR:     } else {
-// CIR:       %[[EMPTY:.*]] = cir.call @_ZN7Wrapper5emptyEv()
-// CIR:       cir.store{{.*}} %[[EMPTY]], %[[RETVAL]] : !rec_Wrapper, 
!cir.ptr<!rec_Wrapper>
+// CIR:       cir.call @_ZN7Wrapper5emptyEv(%[[RETVAL]])
 // CIR:     }
 // CIR:     cir.yield
 // CIR:   } cleanup all {
@@ -68,11 +63,9 @@ Wrapper makeWrapper() {
 // CIR:     }
 // CIR:     cir.yield
 // CIR:   }
-// CIR:   %[[RET:.*]] = cir.load %[[RETVAL]]
-// CIR:   cir.return %[[RET]] : !rec_Wrapper
+// CIR:   cir.return
 
-// LLVM: define {{.*}} %struct.Wrapper @_Z11makeWrapperv()
-// LLVM:   %[[RETVAL:.*]] = alloca %struct.Wrapper
+// LLVM: define {{.*}} void @_Z11makeWrapperv(ptr {{.*}} sret(%struct.Wrapper) 
{{.*}} %[[RETVAL:.*]])
 // LLVM:   %[[CLEANUP_COND:.*]] = alloca i8
 // LLVM:   %[[AGG_TMP0:.*]] = alloca %"struct.std::unique_ptr<Base>"
 // LLVM:   br label %[[INIT:.*]]
@@ -96,16 +89,14 @@ Wrapper makeWrapper() {
 // LLVM:                       to label %[[INVOKE_CONTINUE_2:.*]] unwind label 
%[[INVOKE_CLEANUP:.*]]
 // LLVM: [[INVOKE_CONTINUE_2]]:
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND]]
-// LLVM:   %[[AGG_TMP0_LOAD:.*]] = load %"struct.std::unique_ptr<Base>", ptr 
%[[AGG_TMP0]]
-// LLVM:   invoke void @_ZN7WrapperC1ESt10unique_ptrI4BaseE(ptr {{.*}} 
%[[RETVAL]], %"struct.std::unique_ptr<Base>" %[[AGG_TMP0_LOAD]])
+// LLVM:   invoke void @_ZN7WrapperC1ESt10unique_ptrI4BaseE(ptr {{.*}} 
%[[RETVAL]], ptr byref(%"struct.std::unique_ptr<Base>") align 1 %[[AGG_TMP0]])
 // LLVM:                       to label %[[INVOKE_CONTINUE_3:.*]] unwind label 
%[[INVOKE_CLEANUP:.*]]
 // LLVM: [[INVOKE_CONTINUE_3]]:
 // LLVM:   br label %[[CONSTRUCT_CONTINUE:.*]]
 // LLVM: [[CONSTRUCT_FALSE]]:
-// LLVM:   %[[EMPTY:.*]] = invoke %struct.Wrapper @_ZN7Wrapper5emptyEv()
+// LLVM:   invoke void @_ZN7Wrapper5emptyEv(ptr {{.*}} sret(%struct.Wrapper) 
{{.*}} %[[RETVAL]])
 // LLVM:                       to label %[[INVOKE_CONTINUE_4:.*]] unwind label 
%[[INVOKE_CLEANUP:.*]]
 // LLVM: [[INVOKE_CONTINUE_4]]:
-// LLVM:   store %struct.Wrapper %[[EMPTY]], ptr %[[RETVAL]]
 // LLVM:   br label %[[CONSTRUCT_DONE:.*]]
 // LLVM: [[CONSTRUCT_DONE]]:
 // LLVM:   %[[CLEANUP_FLAG:.*]] = load i8, ptr %[[CLEANUP_COND]]
@@ -130,8 +121,7 @@ Wrapper makeWrapper() {
 // LLVM: [[CLEANUP_DONE]]:
 // LLVM:   resume
 // LLVM: [[DONE]]:
-// LLVM:   %[[RET:.*]] = load %struct.Wrapper, ptr %[[RETVAL]]
-// LLVM:   ret %struct.Wrapper %[[RET]]
+// LLVM:   ret void
   
 // OGCG: define {{.*}} void @_Z11makeWrapperv(ptr{{.*}} sret(%struct.Wrapper) 
{{.*}} %[[RETVAL:.*]])
 // OGCG:   %[[RESULT_PTR:.*]] = alloca ptr
@@ -214,8 +204,7 @@ void APFixedPoint::add(int x) const {
 // CIR:             %[[TRUE:.*]] = cir.const #true
 // CIR:             cir.store %[[TRUE]], %[[CLEANUP_COND_TRUE]]
 // CIR:           } else {
-// CIR:             %[[CALL_RES:.*]] = cir.call 
@_ZN5APInt8uadd_satEv(%[[THISVAL]])
-// CIR:             cir.store{{.*}} %[[CALL_RES]], %[[AGG_TMP]]
+// CIR:             cir.call @_ZN5APInt8uadd_satEv(%[[AGG_TMP]], %[[THISVAL]]) 
: (!cir.ptr<!rec_APInt> {llvm.align = 1 : i64, llvm.dead_on_unwind, llvm.sret = 
!rec_APInt, llvm.writable}, {{.*}}) -> ()
 // CIR:             %[[TRUE:.*]] = cir.const #true
 // CIR:             cir.store %[[TRUE]], %[[CLEANUP_COND_FALSE]]
 // CIR:           }
@@ -249,10 +238,9 @@ void APFixedPoint::add(int x) const {
 // LLVM: [[COND_TRUE]]:
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND_TRUE]]
 // LLVM: [[COND_FALSE]]:
-// LLVM:   %[[CALL_RES:.*]] = invoke %struct.APInt @_ZN5APInt8uadd_satEv(ptr 
{{.*}} %[[THISVAL]])
+// LLVM:   invoke void @_ZN5APInt8uadd_satEv(ptr {{.*}} sret(%struct.APInt) 
{{.*}} %[[AGG_TMP]], ptr {{.*}} %[[THISVAL]])
 // LLVM:           to label %[[INVOKE_CONT:.*]] unwind label %[[LPAD:.*]]
 // LLVM: [[INVOKE_CONT]]:
-// LLVM:   store %struct.APInt %[[CALL_RES]], ptr %[[AGG_TMP]]
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND_FALSE]]
 // LLVM:   %[[FF:.*]] = load i8, ptr %[[CLEANUP_COND_FALSE]]
 // LLVM:   %[[FF_B:.*]] = trunc i8 %[[FF]] to i1
@@ -373,8 +361,7 @@ void makeEntry() {
 // CIR:         %{{.*}} = cir.get_global @g_path
 // CIR:         %[[TRUE:.*]] = cir.const #true
 // CIR:         cir.store %[[TRUE]], %[[CLEANUP_COND]]
-// CIR:         %[[PATH_LOAD:.*]] = cir.load{{.*}} %[[AGG_TMP0]]
-// CIR:         cir.call @_ZN5EntryC1E4Path(%[[ENSURED_F]], %[[PATH_LOAD]])
+// CIR:         cir.call @_ZN5EntryC1E4Path(%[[ENSURED_F]], %[[AGG_TMP0]]) : 
({{.*}}, !cir.ptr<!rec_Path> {llvm.align = 1 : i64, llvm.byref = !rec_Path}) -> 
()
 // CIR:       }
 // CIR:       cir.yield
 // CIR:     } cleanup all {
@@ -408,8 +395,7 @@ void makeEntry() {
 // LLVM:   br label %[[COND_END:.*]]
 // LLVM: [[FALSE_BB]]:
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND]]
-// LLVM:   %[[PATH_LOAD:.*]] = load %struct.Path, ptr %[[AGG_TMP0]]
-// LLVM:   invoke void @_ZN5EntryC1E4Path(ptr {{.*}} %[[ENSURED_F]], 
%struct.Path %[[PATH_LOAD]])
+// LLVM:   invoke void @_ZN5EntryC1E4Path(ptr {{.*}} %[[ENSURED_F]], ptr 
byref(%struct.Path) align 1 %[[AGG_TMP0]])
 // LLVM:                     to label %[[FALSE_CONT:.*]] unwind label %[[LPAD]]
 // LLVM: [[FALSE_CONT]]:
 // LLVM:   br label %[[COND_END]]

diff  --git a/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper.cpp 
b/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper.cpp
index 09d1d59631d69..19aaeff91199b 100644
--- a/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper.cpp
+++ b/clang/test/CIR/CodeGen/cleanup-conditional-with-wrapper.cpp
@@ -1,8 +1,6 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports parameters of an empty or tag class.
-// 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: %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-prefix=LLVM
 // 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
@@ -41,8 +39,7 @@ Wrapper makeWrapper() {
     : Wrapper::empty();
 }
 
-// CIR: cir.func {{.*}} @_Z11makeWrapperv() -> !rec_Wrapper
-// CIR:   %[[RETVAL:.*]] = cir.alloca "__retval" {{.*}} : 
!cir.ptr<!rec_Wrapper>
+// CIR: cir.func {{.*}} @_Z11makeWrapperv(%[[RETVAL:.*]]: 
!cir.ptr<!rec_Wrapper> {llvm.align = 1 : i64, llvm.dead_on_unwind, 
llvm.noalias, llvm.sret = !rec_Wrapper, llvm.writable}{{.*}})
 // CIR:   %[[CLEANUP_COND:.*]] = cir.alloca "cleanup.cond" {{.*}} : 
!cir.ptr<!cir.bool>
 // CIR:   %[[AGG_TMP0:.*]] = cir.alloca "agg.tmp0" {{.*}} : 
!cir.ptr<!rec_std3A3Aunique_ptr3CBase3E>
 // CIR:   cir.cleanup.scope {
@@ -54,11 +51,9 @@ Wrapper makeWrapper() {
 // CIR:       cir.call @_ZNSt10unique_ptrI4BaseEC1EPS0_(%[[AGG_TMP0]], 
%[[SOURCE]])
 // CIR:       %[[TRUE:.*]] = cir.const #true
 // CIR:       cir.store %[[TRUE]], %[[CLEANUP_COND]]
-// CIR:       %[[AGG_TMP0_LOAD:.*]] = cir.load{{.*}} %[[AGG_TMP0]]
-// CIR:       cir.call @_ZN7WrapperC1ESt10unique_ptrI4BaseE(%[[RETVAL]], 
%[[AGG_TMP0_LOAD]])
+// CIR:       cir.call @_ZN7WrapperC1ESt10unique_ptrI4BaseE(%[[RETVAL]], 
%[[AGG_TMP0]]) : ({{.*}}, !cir.ptr<!rec_std3A3Aunique_ptr3CBase3E> {llvm.align 
= 1 : i64, llvm.byref = !rec_std3A3Aunique_ptr3CBase3E}) -> ()
 // CIR:     } else {
-// CIR:       %[[EMPTY:.*]] = cir.call @_ZN7Wrapper5emptyEv()
-// CIR:       cir.store{{.*}} %[[EMPTY]], %[[RETVAL]] : !rec_Wrapper, 
!cir.ptr<!rec_Wrapper>
+// CIR:       cir.call @_ZN7Wrapper5emptyEv(%[[RETVAL]])
 // CIR:     }
 // CIR:     cir.yield
 // CIR:   } cleanup normal {
@@ -68,11 +63,9 @@ Wrapper makeWrapper() {
 // CIR:     }
 // CIR:     cir.yield
 // CIR:   }
-// CIR:   %[[RET:.*]] = cir.load %[[RETVAL]]
-// CIR:   cir.return %[[RET]] : !rec_Wrapper
+// CIR:   cir.return
 
-// LLVM: define {{.*}} %struct.Wrapper @_Z11makeWrapperv()
-// LLVM:   %[[RETVAL:.*]] = alloca %struct.Wrapper
+// LLVM: define {{.*}} void @_Z11makeWrapperv(ptr {{.*}} sret(%struct.Wrapper) 
{{.*}} %[[RETVAL:.*]])
 // LLVM:   %[[CLEANUP_COND:.*]] = alloca i8
 // LLVM:   %[[AGG_TMP0:.*]] = alloca %"struct.std::unique_ptr<Base>"
 // LLVM:   br label %[[INIT:.*]]
@@ -82,12 +75,10 @@ Wrapper makeWrapper() {
 // LLVM:   %[[SOURCE:.*]] = call {{.*}} ptr @_Z9getSourcev()
 // LLVM:   call void @_ZNSt10unique_ptrI4BaseEC1EPS0_(ptr {{.*}} 
%[[AGG_TMP0]], ptr {{.*}} %[[SOURCE]])
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND]]
-// LLVM:   %[[AGG_TMP0_LOAD:.*]] = load %"struct.std::unique_ptr<Base>", ptr 
%[[AGG_TMP0]]
-// LLVM:   call void @_ZN7WrapperC1ESt10unique_ptrI4BaseE(ptr {{.*}} 
%[[RETVAL]], %"struct.std::unique_ptr<Base>" %[[AGG_TMP0_LOAD]])
+// LLVM:   call void @_ZN7WrapperC1ESt10unique_ptrI4BaseE(ptr {{.*}} 
%[[RETVAL]], ptr byref(%"struct.std::unique_ptr<Base>") align 1 %[[AGG_TMP0]])
 // LLVM:   br label %[[CONSTRUCT_CONTINUE:.*]]
 // LLVM: [[CONSTRUCT_FALSE]]:
-// LLVM:   %[[EMPTY:.*]] = call %struct.Wrapper @_ZN7Wrapper5emptyEv()
-// LLVM:   store %struct.Wrapper %[[EMPTY]], ptr %[[RETVAL]]
+// LLVM:   call void @_ZN7Wrapper5emptyEv(ptr {{.*}} sret(%struct.Wrapper) 
{{.*}} %[[RETVAL]])
 // LLVM:   br label %[[CONSTRUCT_DONE:.*]]
 // LLVM: [[CONSTRUCT_DONE]]:
 // LLVM:   %[[CLEANUP_FLAG:.*]] = load i8, ptr %[[CLEANUP_COND]]
@@ -97,8 +88,7 @@ Wrapper makeWrapper() {
 // LLVM:   call void @_ZNSt10unique_ptrI4BaseED1Ev(ptr {{.*}} %[[AGG_TMP0]])
 // LLVM:   br label %[[DONE:.*]]
 // LLVM: [[DONE]]:
-// LLVM:   %[[RET:.*]] = load %struct.Wrapper, ptr %[[RETVAL]]
-// LLVM:   ret %struct.Wrapper %[[RET]]
+// LLVM:   ret void
   
 // OGCG: define {{.*}} void @_Z11makeWrapperv(ptr{{.*}} sret(%struct.Wrapper) 
{{.*}} %[[RETVAL:.*]])
 // OGCG:   %[[RESULT_PTR:.*]] = alloca ptr
@@ -167,8 +157,7 @@ void APFixedPoint::add(int x) const {
 // CIR:             %[[TRUE:.*]] = cir.const #true
 // CIR:             cir.store %[[TRUE]], %[[CLEANUP_COND_TRUE]]
 // CIR:           } else {
-// CIR:             %[[CALL_RES:.*]] = cir.call 
@_ZN5APInt8uadd_satEv(%[[THISVAL]])
-// CIR:             cir.store{{.*}} %[[CALL_RES]], %[[AGG_TMP]]
+// CIR:             cir.call @_ZN5APInt8uadd_satEv(%[[AGG_TMP]], %[[THISVAL]]) 
: (!cir.ptr<!rec_APInt> {llvm.align = 1 : i64, llvm.dead_on_unwind, llvm.sret = 
!rec_APInt, llvm.writable}, {{.*}}) -> ()
 // CIR:             %[[TRUE:.*]] = cir.const #true
 // CIR:             cir.store %[[TRUE]], %[[CLEANUP_COND_FALSE]]
 // CIR:           }
@@ -202,8 +191,7 @@ void APFixedPoint::add(int x) const {
 // LLVM: [[COND_TRUE]]:
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND_TRUE]]
 // LLVM: [[COND_FALSE]]:
-// LLVM:   %[[CALL_RES:.*]] = call %struct.APInt @_ZN5APInt8uadd_satEv(ptr 
{{.*}} %[[THISVAL]])
-// LLVM:   store %struct.APInt %[[CALL_RES]], ptr %[[AGG_TMP]]
+// LLVM:   call void @_ZN5APInt8uadd_satEv(ptr {{.*}} sret(%struct.APInt) 
{{.*}} %[[AGG_TMP]], ptr {{.*}} %[[THISVAL]])
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND_FALSE]]
 // LLVM:   %[[FF:.*]] = load i8, ptr %[[CLEANUP_COND_FALSE]]
 // LLVM:   %[[FF_B:.*]] = trunc i8 %[[FF]] to i1
@@ -294,8 +282,7 @@ void makeEntry() {
 // CIR:         %{{.*}} = cir.get_global @g_path
 // CIR:         %[[TRUE:.*]] = cir.const #true
 // CIR:         cir.store %[[TRUE]], %[[CLEANUP_COND]]
-// CIR:         %[[PATH_LOAD:.*]] = cir.load{{.*}} %[[AGG_TMP0]]
-// CIR:         cir.call @_ZN5EntryC1E4Path(%[[ENSURED_F]], %[[PATH_LOAD]])
+// CIR:         cir.call @_ZN5EntryC1E4Path(%[[ENSURED_F]], %[[AGG_TMP0]]) : 
({{.*}}, !cir.ptr<!rec_Path> {llvm.align = 1 : i64, llvm.byref = !rec_Path}) -> 
()
 // CIR:       }
 // CIR:       cir.yield
 // CIR:     } cleanup normal {
@@ -327,8 +314,7 @@ void makeEntry() {
 // LLVM:   br label %[[COND_END:.*]]
 // LLVM: [[FALSE_BB]]:
 // LLVM:   store i8 1, ptr %[[CLEANUP_COND]]
-// LLVM:   %[[PATH_LOAD:.*]] = load %struct.Path, ptr %[[AGG_TMP0]]
-// LLVM:   call void @_ZN5EntryC1E4Path(ptr {{.*}} %[[ENSURED_F]], 
%struct.Path %[[PATH_LOAD]])
+// LLVM:   call void @_ZN5EntryC1E4Path(ptr {{.*}} %[[ENSURED_F]], ptr 
byref(%struct.Path) align 1 %[[AGG_TMP0]])
 // LLVM:   br label %[[COND_END]]
 // LLVM: [[COND_END]]:
 // LLVM:   br label %[[AFTER_INNER:.*]]

diff  --git a/clang/test/CIR/CodeGen/paren-list-agg-init.cpp 
b/clang/test/CIR/CodeGen/paren-list-agg-init.cpp
index 9a25b590a3a2e..72bcf2c2e7ac1 100644
--- a/clang/test/CIR/CodeGen/paren-list-agg-init.cpp
+++ b/clang/test/CIR/CodeGen/paren-list-agg-init.cpp
@@ -1,6 +1,4 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports padded, packed, and over-aligned record shapes.
-// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir 
-fno-clangir-call-conv-lowering -emit-cir %s -o %t.cir
+// RUN: %clang_cc1 -std=c++20 -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 -std=c++20 -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,LLVMCIR
@@ -174,20 +172,18 @@ A foo1() {
 
 // LLVM: define dso_local {{.*}}@{{.*foo2.*}}
 // LLVM: call void @llvm.memcpy.p0.p0.i64(ptr align 8 {{.*}}, ptr align 8 
[[B1]], i64 24, i1 false)
-// CIR: cir.func {{.*}}@_Z4foo2v()
-// CIR: %[[B_ALLOCA:.*]] = cir.alloca "__retval" align(8) : 
!cir.ptr<![[STRUCT_B]]>
+// CIR: cir.func {{.*}}@_Z4foo2v(%[[B_RETVAL:.*]]: !cir.ptr<![[STRUCT_B]]> 
{llvm.align = 8 : i64, llvm.dead_on_unwind, llvm.noalias, llvm.sret = 
![[STRUCT_B]], llvm.writable}{{.*}})
 // CIR: %[[GET_GLOB:.*]] = cir.get_global @_ZL2b1 : !cir.ptr<![[STRUCT_B]]>
-// CIR: cir.copy %[[GET_GLOB]] align(8) to %[[B_ALLOCA]] align(8) : 
!cir.ptr<![[STRUCT_B]]>
+// CIR: cir.copy %[[GET_GLOB]] align(8) to %[[B_RETVAL]] align(8) : 
!cir.ptr<![[STRUCT_B]]>
 B foo2() {
   return b1;
 }
 
 // LLVM: define dso_local {{.*}}@{{.*foo3.*}}
 // LLVM: call void @llvm.memcpy.p0.p0.i64(ptr align 8 {{.*}}, ptr align 8 
[[C1]], i64 48, i1 false)
-// CIR: cir.func {{.*}}@_Z4foo3v()
-// CIR: %[[C_ALLOCA:.*]] = cir.alloca "__retval" align(8) : 
!cir.ptr<![[STRUCT_C]]>
+// CIR: cir.func {{.*}}@_Z4foo3v(%[[C_RETVAL:.*]]: !cir.ptr<![[STRUCT_C]]> 
{llvm.align = 8 : i64, llvm.dead_on_unwind, llvm.noalias, llvm.sret = 
![[STRUCT_C]], llvm.writable}{{.*}})
 // CIR: %[[GET_GLOB:.*]] = cir.get_global @_ZL2c1 : !cir.ptr<![[STRUCT_C]]>
-// CIR: cir.copy %[[GET_GLOB]] align(8) to %[[C_ALLOCA]] align(8) : 
!cir.ptr<![[STRUCT_C]]>
+// CIR: cir.copy %[[GET_GLOB]] align(8) to %[[C_RETVAL]] align(8) : 
!cir.ptr<![[STRUCT_C]]>
 C foo3() {
   return c1;
 }
@@ -320,10 +316,10 @@ void foo7() {
 
 // LLVM: dso_local {{.*}}@{{.*foo8.*}}(
 // LLVM: call void @llvm.memcpy.p0.p0.i64(ptr align 8 {{.*}}, ptr align 8 
[[D1]], i64 56, i1 false)
-// CIR-LABEL: cir.func no_inline dso_local @_Z4foo8v() 
-// CIR: %[[RET_ALLOCA:.*]] = cir.alloca "__retval" align(8) : 
!cir.ptr<![[STRUCT_D]]>
+// CIR-LABEL: cir.func no_inline dso_local @_Z4foo8v(
+// CIR: %[[D_RETVAL:.*]]: !cir.ptr<![[STRUCT_D]]> {llvm.align = 8 : i64, 
llvm.dead_on_unwind, llvm.noalias, llvm.sret = ![[STRUCT_D]], 
llvm.writable}{{.*}})
 // CIR: %[[GET_GLOB:.*]] = cir.get_global @_ZL2d1 : !cir.ptr<![[STRUCT_D]]>
-// CIR: cir.copy %[[GET_GLOB]] align(8) to %[[RET_ALLOCA]] align(8) : 
!cir.ptr<![[STRUCT_D]]>
+// CIR: cir.copy %[[GET_GLOB]] align(8) to %[[D_RETVAL]] align(8) : 
!cir.ptr<![[STRUCT_D]]>
 D foo8() {
   return d1;
 }

diff  --git a/clang/test/CIR/CodeGen/partial-array-cleanup.cpp 
b/clang/test/CIR/CodeGen/partial-array-cleanup.cpp
index 83582700ea15f..25d23f234e6ba 100644
--- a/clang/test/CIR/CodeGen/partial-array-cleanup.cpp
+++ b/clang/test/CIR/CodeGen/partial-array-cleanup.cpp
@@ -1,9 +1,7 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports parameters of an empty or tag class.
-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fclangir -fno-clangir-call-conv-lowering -fexceptions -fcxx-exceptions 
-emit-cir -mmlir --mlir-print-ir-before=cir-lowering-prepare %s -o %t.cir  2> 
%t-before-lp.cir
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fclangir -fexceptions -fcxx-exceptions -emit-cir -mmlir 
--mlir-print-ir-before=cir-lowering-prepare %s -o %t.cir  2> %t-before-lp.cir
 // RUN: FileCheck --input-file=%t-before-lp.cir %s -check-prefix=CIR-BEFORE-LPP
 // RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR
-// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fexceptions -fcxx-exceptions -fclangir -fno-clangir-call-conv-lowering 
-emit-llvm %s -o %t-cir.ll
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value 
-fexceptions -fcxx-exceptions -fclangir -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 -Wno-unused-value 
-fexceptions -fcxx-exceptions -emit-llvm %s -o %t.ll
 // RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG
@@ -874,8 +872,7 @@ void Temp2InArray() {
 // CIR-NEXT:      %[[CURRENT:.*]] = cir.load %[[ARR_IDX]] : 
!cir.ptr<!cir.ptr<!rec_CausesTemp2>>, !cir.ptr<!rec_CausesTemp2>
 // CIR-NEXT:      cir.call @_ZN5Temp2C1Ev(%[[TMP]])
 // CIR-NEXT:      cir.cleanup.scope {
-// CIR-NEXT:        %[[LOAD_TMP:.*]] = cir.load {{.*}}%[[TMP]] : 
!cir.ptr<!rec_Temp2>, !rec_Temp2
-// CIR-NEXT:        cir.call @_ZN11CausesTemp2C1E5Temp2(%[[CURRENT]], 
%[[LOAD_TMP]])
+// CIR-NEXT:        cir.call @_ZN11CausesTemp2C1E5Temp2(%[[CURRENT]], 
%[[TMP]]) : ({{.*}}, !cir.ptr<!rec_Temp2> {llvm.align = 1 : i64, llvm.byref = 
!rec_Temp2}) -> ()
 // CIR-NEXT:        cir.yield
 // CIR-NEXT:      } cleanup all {
 // CIR-NEXT:        cir.call @_ZN5Temp2D1Ev(%[[TMP]]) nothrow
@@ -925,8 +922,7 @@ void Temp2InArray() {
 // LLVM: [[EMPTY2]]:
 // LLVM: br label %[[CONSTRUCT_CT:.*]]
 // LLVM: [[CONSTRUCT_CT]]:
-// LLVM: %[[LOAD:.*]] = load %struct.Temp2, ptr %[[TMP]]
-// LLVM: invoke void @_ZN11CausesTemp2C1E5Temp2(ptr noundef nonnull align 1 
dereferenceable(1) %12, %struct.Temp2 %15)
+// LLVM: invoke void @_ZN11CausesTemp2C1E5Temp2(ptr {{.*}} %{{.*}}, ptr 
byref(%struct.Temp2) align 1 %[[TMP]])
 // LLVM-NEXT:         to label %[[EMPTY3:.*]] unwind label %[[EXCEPT:.*]]
 // LLVM: [[EMPTY3]]:
 // LLVM: br label %[[DTOR_TEMP:.*]]
@@ -941,7 +937,7 @@ void Temp2InArray() {
 // LLVM: [[EXCEPT_TEMP]]:
 // LLVM: br label %[[CHECK_TEMP:.*]]
 // LLVM: [[CHECK_TEMP]]:
-// LLVM: br i1 %37, label %[[EMPTY4:.*]], 
+// LLVM: br i1 %{{.*}}, label %[[EMPTY4:.*]], 
 // LLVM: [[EMPTY4]]:
 // LLVM: br label %[[DTOR_TMP:.*]]
 //

diff  --git a/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp 
b/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp
index b65b18804466f..450dd7319d301 100644
--- a/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp
+++ b/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp
@@ -1,6 +1,4 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports parameters of an empty or tag class.
-// RUN: %clang_cc1 -fopenacc -triple x86_64-linux-gnu 
-Wno-openacc-self-if-potential-conflict -emit-cir -fclangir 
-fno-clangir-call-conv-lowering -triple x86_64-linux-pc %s -o - | FileCheck %s
+// RUN: %clang_cc1 -fopenacc -triple x86_64-linux-gnu 
-Wno-openacc-self-if-potential-conflict -emit-cir -fclangir -triple 
x86_64-linux-pc %s -o - | FileCheck %s
 
 struct HasOps {
   operator float();
@@ -10,7 +8,8 @@ struct HasOps {
 };
 
 void use(int x, int v, float f, HasOps ops) {
-  // CHECK: cir.func{{.*}}(%[[X_ARG:.*]]: !s32i{{.*}}, %[[V_ARG:.*]]: 
!s32i{{.*}}, %[[F_ARG:.*]]: !cir.float{{.*}}){{.*}}, %[[OPS_ARG:.*]]: 
!rec_HasOps{{.*}}) {{.*}}{
+  // CHECK: cir.func{{.*}}(%[[X_ARG:.*]]: !s32i{{.*}}, %[[V_ARG:.*]]: 
!s32i{{.*}}, %[[F_ARG:.*]]: !cir.float{{.*}}) {{.*}}{
+  // CHECK-NEXT: %[[OPS_POISON:.*]] = cir.const #cir.poison : !rec_HasOps
   // CHECK-NEXT: %[[X_ALLOCA:.*]] = cir.alloca "x" {{.*}} init : 
!cir.ptr<!s32i>
   // CHECK-NEXT: %[[V_ALLOCA:.*]] = cir.alloca "v" {{.*}} init : 
!cir.ptr<!s32i>
   // CHECK-NEXT: %[[F_ALLOCA:.*]] = cir.alloca "f" {{.*}} init : 
!cir.ptr<!cir.float>
@@ -18,7 +17,7 @@ void use(int x, int v, float f, HasOps ops) {
   // CHECK-NEXT: cir.store %[[X_ARG]], %[[X_ALLOCA]] : !s32i, !cir.ptr<!s32i>
   // CHECK-NEXT: cir.store %[[V_ARG]], %[[V_ALLOCA]] : !s32i, !cir.ptr<!s32i>
   // CHECK-NEXT: cir.store %[[F_ARG]], %[[F_ALLOCA]] : !cir.float, 
!cir.ptr<!cir.float>
-  // CHECK-NEXT: cir.store %[[OPS_ARG]], %[[OPS_ALLOCA]] : !rec_HasOps, 
!cir.ptr<!rec_HasOps>
+  // CHECK-NEXT: cir.store %[[OPS_POISON]], %[[OPS_ALLOCA]] : !rec_HasOps, 
!cir.ptr<!rec_HasOps>
 
   // CHECK-NEXT: %[[X_LOAD:.*]] = cir.load{{.*}} %[[X_ALLOCA]] : 
!cir.ptr<!s32i>, !s32i
   // CHECK-NEXT: %[[V_LOAD:.*]] = cir.load{{.*}} %[[V_ALLOCA]] : 
!cir.ptr<!s32i>, !s32i

diff  --git a/clang/test/CIR/CodeGenOpenACC/atomic-update.cpp 
b/clang/test/CIR/CodeGenOpenACC/atomic-update.cpp
index 90f025ba9f0cc..da511723489e9 100644
--- a/clang/test/CIR/CodeGenOpenACC/atomic-update.cpp
+++ b/clang/test/CIR/CodeGenOpenACC/atomic-update.cpp
@@ -1,6 +1,4 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports parameters of an empty or tag class.
-// RUN: %clang_cc1 -fopenacc -triple x86_64-linux-gnu 
-Wno-openacc-self-if-potential-conflict -emit-cir -fclangir 
-fno-clangir-call-conv-lowering -triple x86_64-linux-pc %s -o - | FileCheck %s
+// RUN: %clang_cc1 -fopenacc -triple x86_64-linux-gnu 
-Wno-openacc-self-if-potential-conflict -emit-cir -fclangir -triple 
x86_64-linux-pc %s -o - | FileCheck %s
 
 struct HasOps {
   operator float();
@@ -8,7 +6,8 @@ struct HasOps {
 };
 
 void use(int x, unsigned int y, float f, HasOps ops) {
-  // CHECK: cir.func{{.*}}(%[[X_ARG:.*]]: !s32i{{.*}}, %[[Y_ARG:.*]]: 
!u32i{{.*}}, %[[F_ARG:.*]]: !cir.float{{.*}}){{.*}}, %[[OPS_ARG:.*]]: 
!rec_HasOps{{.*}}) {{.*}}{
+  // CHECK: cir.func{{.*}}(%[[X_ARG:.*]]: !s32i{{.*}}, %[[Y_ARG:.*]]: 
!u32i{{.*}}, %[[F_ARG:.*]]: !cir.float{{.*}}) {{.*}}{
+  // CHECK-NEXT: %[[OPS_POISON:.*]] = cir.const #cir.poison : !rec_HasOps
   // CHECK-NEXT: %[[X_ALLOCA:.*]] = cir.alloca "x" {{.*}} init : 
!cir.ptr<!s32i>
   // CHECK-NEXT: %[[Y_ALLOCA:.*]] = cir.alloca "y" {{.*}} init : 
!cir.ptr<!u32i>
   // CHECK-NEXT: %[[F_ALLOCA:.*]] = cir.alloca "f" {{.*}} init : 
!cir.ptr<!cir.float>
@@ -16,7 +15,7 @@ void use(int x, unsigned int y, float f, HasOps ops) {
   // CHECK-NEXT: cir.store %[[X_ARG]], %[[X_ALLOCA]] : !s32i, !cir.ptr<!s32i>
   // CHECK-NEXT: cir.store %[[Y_ARG]], %[[Y_ALLOCA]] : !u32i, !cir.ptr<!u32i>
   // CHECK-NEXT: cir.store %[[F_ARG]], %[[F_ALLOCA]] : !cir.float, 
!cir.ptr<!cir.float>
-  // CHECK-NEXT: cir.store %[[OPS_ARG]], %[[OPS_ALLOCA]] : !rec_HasOps, 
!cir.ptr<!rec_HasOps>
+  // CHECK-NEXT: cir.store %[[OPS_POISON]], %[[OPS_ALLOCA]] : !rec_HasOps, 
!cir.ptr<!rec_HasOps>
 
   // CHECK-NEXT: acc.atomic.update %[[X_ALLOCA]] : !cir.ptr<!s32i> {
   // CHECK-NEXT: ^bb0(%[[RECIPE_ARG:.*]]: !s32i{{.*}}):

diff  --git a/clang/test/CIR/CodeGenOpenACC/atomic-write.cpp 
b/clang/test/CIR/CodeGenOpenACC/atomic-write.cpp
index ca2ef838a5685..7dd5626c9fa77 100644
--- a/clang/test/CIR/CodeGenOpenACC/atomic-write.cpp
+++ b/clang/test/CIR/CodeGenOpenACC/atomic-write.cpp
@@ -1,6 +1,4 @@
-// TODO(cir): drop -fno-clangir-call-conv-lowering once CallConvLowering
-// supports parameters of an empty or tag class.
-// RUN: %clang_cc1 -fopenacc -triple x86_64-linux-gnu 
-Wno-openacc-self-if-potential-conflict -emit-cir -fclangir 
-fno-clangir-call-conv-lowering -triple x86_64-linux-pc %s -o - | FileCheck %s
+// RUN: %clang_cc1 -fopenacc -triple x86_64-linux-gnu 
-Wno-openacc-self-if-potential-conflict -emit-cir -fclangir -triple 
x86_64-linux-pc %s -o - | FileCheck %s
 
 extern "C" bool condition(int x, unsigned int y, float f);
 extern "C" double do_thing(float f);
@@ -10,7 +8,8 @@ struct ConvertsToScalar {
 };
 
 void use(int x, unsigned int y, float f, ConvertsToScalar cts) {
-  // CHECK: cir.func{{.*}}(%[[X_ARG:.*]]: !s32i{{.*}}, %[[Y_ARG:.*]]: 
!u32i{{.*}}, %[[F_ARG:.*]]: !cir.float{{.*}}){{.*}}, %[[CTS_ARG:.*]]: 
!rec_ConvertsToScalar{{.*}}) {{.*}}{
+  // CHECK: cir.func{{.*}}(%[[X_ARG:.*]]: !s32i{{.*}}, %[[Y_ARG:.*]]: 
!u32i{{.*}}, %[[F_ARG:.*]]: !cir.float{{.*}}) {{.*}}{
+  // CHECK-NEXT: %[[CTS_POISON:.*]] = cir.const #cir.poison : 
!rec_ConvertsToScalar
   // CHECK-NEXT: %[[X_ALLOC:.*]] = cir.alloca "x" {{.*}} init : !cir.ptr<!s32i>
   // CHECK-NEXT: %[[Y_ALLOC:.*]] = cir.alloca "y" {{.*}} init : !cir.ptr<!u32i>
   // CHECK-NEXT: %[[F_ALLOC:.*]] = cir.alloca "f" {{.*}} init : 
!cir.ptr<!cir.float>
@@ -19,7 +18,7 @@ void use(int x, unsigned int y, float f, ConvertsToScalar 
cts) {
   // CHECK-NEXT: cir.store %[[X_ARG]], %[[X_ALLOC]] : !s32i, !cir.ptr<!s32i>
   // CHECK-NEXT: cir.store %[[Y_ARG]], %[[Y_ALLOC]] : !u32i, !cir.ptr<!u32i>
   // CHECK-NEXT: cir.store %[[F_ARG]], %[[F_ALLOC]] : !cir.float, 
!cir.ptr<!cir.float>
-  // CHECK-NEXT: cir.store %[[CTS_ARG]], %[[CTS_ALLOC]] : 
!rec_ConvertsToScalar, !cir.ptr<!rec_ConvertsToScalar>
+  // CHECK-NEXT: cir.store %[[CTS_POISON]], %[[CTS_ALLOC]] : 
!rec_ConvertsToScalar, !cir.ptr<!rec_ConvertsToScalar>
 
   // CHECK-NEXT: %[[Y_LOAD:.*]] = cir.load {{.*}}%[[Y_ALLOC]] : 
!cir.ptr<!u32i>, !u32i
   // CHECK-NEXT: %[[Y_TO_FLOAT:.*]] = cir.cast int_to_float %[[Y_LOAD]] : 
!u32i -> !cir.float
@@ -44,7 +43,7 @@ void use(int x, unsigned int y, float f, ConvertsToScalar 
cts) {
   // CHECK-NEXT: %[[X_LOAD:.*]] = cir.load {{.*}}%[[X_ALLOC]] : 
!cir.ptr<!s32i>, !s32i
   // CHECK-NEXT: %[[Y_LOAD:.*]] = cir.load {{.*}}%[[Y_ALLOC]] : 
!cir.ptr<!u32i>, !u32i
   // CHECK-NEXT: %[[F_LOAD:.*]] = cir.load {{.*}}%[[F_ALLOC]] : 
!cir.ptr<!cir.float>, !cir.float
-  // CHECK-NEXT: %[[COND_CALL:.*]] = cir.call @condition(%[[X_LOAD]], 
%[[Y_LOAD]], %[[F_LOAD]]) : (!s32i {{.*}}, !u32i {{.*}}, !cir.float {{.*}}) -> 
!cir.bool
+  // CHECK-NEXT: %[[COND_CALL:.*]] = cir.call @condition(%[[X_LOAD]], 
%[[Y_LOAD]], %[[F_LOAD]]) : (!s32i {{.*}}, !u32i {{.*}}, !cir.float {{.*}}) -> 
(!cir.bool {llvm.zeroext})
   // CHECK-NEXT: %[[COND_CAST:.*]] = builtin.unrealized_conversion_cast 
%[[COND_CALL]] : !cir.bool to i1
   // CHECK-NEXT: acc.atomic.write if(%[[COND_CAST]]) %[[F_ALLOC]] = 
%[[THING_CAST]] : !cir.ptr<!cir.float>, !cir.float
 #pragma acc atomic write if (condition(x, y, f))


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

Reply via email to