llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clangir

Author: Arseniy Obolenskiy (aobolensk)

<details>
<summary>Changes</summary>

Drop the bitcast to a generic-AS `ptr`, which is invalid for `ptr addrspace(4)` 
on SPIR-V

---
Full diff: https://github.com/llvm/llvm-project/pull/238455.diff


2 Files Affected:

- (modified) clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp (+6-19) 
- (added) clang/test/CIR/CodeGen/varargs-with-nonzero-default-address-space.c 
(+32) 


``````````diff
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp 
b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index d28e65ef8fa79..1b349c46a01bc 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -6296,32 +6296,22 @@ mlir::LogicalResult 
CIRToLLVMInlineAsmOpLowering::matchAndRewrite(
 mlir::LogicalResult CIRToLLVMVAStartOpLowering::matchAndRewrite(
     cir::VAStartOp op, OpAdaptor adaptor,
     mlir::ConversionPatternRewriter &rewriter) const {
-  auto opaquePtr = mlir::LLVM::LLVMPointerType::get(getContext());
-  auto vaList = mlir::LLVM::BitcastOp::create(rewriter, op.getLoc(), opaquePtr,
-                                              adaptor.getArgList());
-  rewriter.replaceOpWithNewOp<mlir::LLVM::VaStartOp>(op, vaList);
+  rewriter.replaceOpWithNewOp<mlir::LLVM::VaStartOp>(op, adaptor.getArgList());
   return mlir::success();
 }
 
 mlir::LogicalResult CIRToLLVMVAEndOpLowering::matchAndRewrite(
     cir::VAEndOp op, OpAdaptor adaptor,
     mlir::ConversionPatternRewriter &rewriter) const {
-  auto opaquePtr = mlir::LLVM::LLVMPointerType::get(getContext());
-  auto vaList = mlir::LLVM::BitcastOp::create(rewriter, op.getLoc(), opaquePtr,
-                                              adaptor.getArgList());
-  rewriter.replaceOpWithNewOp<mlir::LLVM::VaEndOp>(op, vaList);
+  rewriter.replaceOpWithNewOp<mlir::LLVM::VaEndOp>(op, adaptor.getArgList());
   return mlir::success();
 }
 
 mlir::LogicalResult CIRToLLVMVACopyOpLowering::matchAndRewrite(
     cir::VACopyOp op, OpAdaptor adaptor,
     mlir::ConversionPatternRewriter &rewriter) const {
-  auto opaquePtr = mlir::LLVM::LLVMPointerType::get(getContext());
-  auto dstList = mlir::LLVM::BitcastOp::create(rewriter, op.getLoc(), 
opaquePtr,
-                                               adaptor.getDstList());
-  auto srcList = mlir::LLVM::BitcastOp::create(rewriter, op.getLoc(), 
opaquePtr,
-                                               adaptor.getSrcList());
-  rewriter.replaceOpWithNewOp<mlir::LLVM::VaCopyOp>(op, dstList, srcList);
+  rewriter.replaceOpWithNewOp<mlir::LLVM::VaCopyOp>(op, adaptor.getDstList(),
+                                                    adaptor.getSrcList());
   return mlir::success();
 }
 
@@ -6329,16 +6319,13 @@ mlir::LogicalResult 
CIRToLLVMVAArgOpLowering::matchAndRewrite(
     cir::VAArgOp op, OpAdaptor adaptor,
     mlir::ConversionPatternRewriter &rewriter) const {
   assert(!cir::MissingFeatures::vaArgABILowering());
-  auto opaquePtr = mlir::LLVM::LLVMPointerType::get(getContext());
-  auto vaList = mlir::LLVM::BitcastOp::create(rewriter, op.getLoc(), opaquePtr,
-                                              adaptor.getArgList());
-
   mlir::Type llvmType =
       getTypeConverter()->convertType(op->getResultTypes().front());
   if (!llvmType)
     return mlir::failure();
 
-  rewriter.replaceOpWithNewOp<mlir::LLVM::VaArgOp>(op, llvmType, vaList);
+  rewriter.replaceOpWithNewOp<mlir::LLVM::VaArgOp>(op, llvmType,
+                                                   adaptor.getArgList());
   return mlir::success();
 }
 
diff --git 
a/clang/test/CIR/CodeGen/varargs-with-nonzero-default-address-space.c 
b/clang/test/CIR/CodeGen/varargs-with-nonzero-default-address-space.c
new file mode 100644
index 0000000000000..3247361347188
--- /dev/null
+++ b/clang/test/CIR/CodeGen/varargs-with-nonzero-default-address-space.c
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -triple spirv64-unknown-unknown -fcuda-is-device -fclangir 
-emit-cir %s -o %t.cir
+// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR
+// RUN: %clang_cc1 -triple spirv64-unknown-unknown -fcuda-is-device -fclangir 
-emit-llvm %s -o %t-cir.ll
+// RUN: FileCheck --input-file=%t-cir.ll %s -check-prefixes=LLVM,LLVMCIR
+// RUN: %clang_cc1 -triple spirv64-unknown-unknown -fcuda-is-device -emit-llvm 
%s -o %t.ll
+// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM
+
+// TODO(cir): Add aggregate va_arg once va_arg ABI lowering supports SPIR-V.
+int testva(int n, ...) {
+  __builtin_va_list ap;
+  __builtin_va_start(ap, n);
+  __builtin_va_list ap2;
+  __builtin_va_copy(ap2, ap);
+  int v = __builtin_va_arg(ap2, int);
+  __builtin_va_end(ap2);
+  __builtin_va_end(ap);
+  return v;
+}
+
+// CIR-LABEL: cir.func {{.*}} @testva(
+// CIR:   cir.va_start %[[AP:.+]] : !cir.ptr<!cir.ptr<!void, 
target_address_space(4)>, target_address_space(4)>
+// CIR:   cir.va_copy %[[AP]] to %[[AP2:.+]] : !cir.ptr<!cir.ptr<!void, 
target_address_space(4)>, target_address_space(4)>, !cir.ptr<!cir.ptr<!void, 
target_address_space(4)>, target_address_space(4)>
+// CIR:   cir.va_arg %[[AP2]] : (!cir.ptr<!cir.ptr<!void, 
target_address_space(4)>, target_address_space(4)>) -> !s32i
+// CIR:   cir.va_end %[[AP2]] : !cir.ptr<!cir.ptr<!void, 
target_address_space(4)>, target_address_space(4)>
+// CIR:   cir.va_end %[[AP]] : !cir.ptr<!cir.ptr<!void, 
target_address_space(4)>, target_address_space(4)>
+
+// LLVM-LABEL: define spir_func i32 @testva(
+// LLVM:   call void @llvm.va_start.p4(ptr addrspace(4) %[[AP:.*]])
+// LLVM:   call void @llvm.va_copy.p4(ptr addrspace(4) %[[AP2:.*]], ptr 
addrspace(4) %[[AP]])
+// LLVMCIR: va_arg ptr addrspace(4) %[[AP2]], i32
+// LLVM:   call void @llvm.va_end.p4(ptr addrspace(4) %[[AP2]])
+// LLVM:   call void @llvm.va_end.p4(ptr addrspace(4) %[[AP]])

``````````

</details>


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

Reply via email to