From fa951c99fe7b4ddcce057a0b2f616199860e071a Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Mon, 10 Mar 2025 09:06:12 -0700 Subject: [PATCH] [flang][cuda] Fix __ldXX function signatures --- flang/lib/Optimizer/Builder/IntrinsicCall.cpp | 3 ++- flang/test/Lower/CUDA/cuda-device-proc.cuf | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp index 78d84fc3a68bb..f57ed41fd785d 100644 --- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp +++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp @@ -3688,8 +3688,9 @@ IntrinsicLibrary::genCUDALDXXFunc(mlir::Type resultType, mlir::Value res = builder.create(loc, resTy); if (mlir::isa(arg.getType())) arg = builder.create(loc, arg); + mlir::Type refResTy = fir::ReferenceType::get(resTy); mlir::FunctionType ftype = - mlir::FunctionType::get(arg.getContext(), {resTy, resTy}, {}); + mlir::FunctionType::get(arg.getContext(), {refResTy, refResTy}, {}); auto funcOp = builder.createFunction(loc, fctName, ftype); llvm::SmallVector funcArgs; funcArgs.push_back(res); diff --git a/flang/test/Lower/CUDA/cuda-device-proc.cuf b/flang/test/Lower/CUDA/cuda-device-proc.cuf index a68150423f63d..554e6fcfa5327 100644 --- a/flang/test/Lower/CUDA/cuda-device-proc.cuf +++ b/flang/test/Lower/CUDA/cuda-device-proc.cuf @@ -295,3 +295,30 @@ end ! CHECK: fir.call @__ldcs_r8x2_(%{{.*}}, %{{.*}}) fastmath : (!fir.ref>, !fir.ref>) -> () ! CHECK: fir.call @__ldlu_r8x2_(%{{.*}}, %{{.*}}) fastmath : (!fir.ref>, !fir.ref>) -> () ! CHECK: fir.call @__ldcv_r8x2_(%{{.*}}, %{{.*}}) fastmath : (!fir.ref>, !fir.ref>) -> () + + +! CHECK-DAG: func.func private @__ldca_i4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcg_i4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcs_i4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldlu_i4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcv_i4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldca_i8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcg_i8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcs_i8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldlu_i8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcv_i8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldca_r4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcg_r4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcs_r4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldlu_r4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcv_r4x4_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldca_r2x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcg_r2x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcs_r2x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldlu_r2x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcv_r2x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldca_r8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcg_r8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcs_r8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldlu_r8x2_(!fir.ref>, !fir.ref>) +! CHECK-DAG: func.func private @__ldcv_r8x2_(!fir.ref>, !fir.ref>)