[clang] [CIR] Add address space casts for pointer arguments when creating a call (PR #192303)
David Rivera via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 15 11:37:42 PDT 2026
================
@@ -1109,6 +1109,19 @@ RValue CIRGenFunction::emitCall(const CIRGenFunctionInfo &funcInfo,
if (argType != v.getType() && mlir::isa<cir::IntType>(v.getType()))
cgm.errorNYI(loc, "emitCall: widening integer call argument");
+ // If we have a pointer argument and there's an address space mismatch,
+ // insert an address_space cast to match the expected function signature.
+ if (argType != v.getType()) {
+ auto argPtrTy = mlir::dyn_cast<cir::PointerType>(argType);
+ auto vPtrTy = mlir::dyn_cast<cir::PointerType>(v.getType());
+ if (argPtrTy && vPtrTy &&
+ argPtrTy.getPointee() == vPtrTy.getPointee() &&
+ argPtrTy.getAddrSpace() != vPtrTy.getAddrSpace()) {
+ v = builder.create<cir::CastOp>(loc, argPtrTy,
+ cir::CastKind::address_space, v);
----------------
RiverDave wrote:
You likely want to use:
```suggestion
v = performAddrSpaceCast(v, argPtrTy);
```
https://github.com/llvm/llvm-project/pull/192303
More information about the cfe-commits
mailing list