From 5258552573bb7b8b24d3085f238892d47dca2e32 Mon Sep 17 00:00:00 2001 From: Stuart Adams Date: Wed, 24 Jun 2020 14:51:57 +0100 Subject: [PATCH] Updated CGOpenCLRuntime.cpp Implemented sampled_image_cuda.cl --- clang/lib/CodeGen/CGOpenCLRuntime.cpp | 22 +++++++++++++++++++ .../test/CodeGenOpenCL/sampled_image_cuda.cl | 15 +++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 clang/test/CodeGenOpenCL/sampled_image_cuda.cl diff --git a/clang/lib/CodeGen/CGOpenCLRuntime.cpp b/clang/lib/CodeGen/CGOpenCLRuntime.cpp index dbe375294d179..26c51d6fb573c 100644 --- a/clang/lib/CodeGen/CGOpenCLRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenCLRuntime.cpp @@ -37,6 +37,28 @@ llvm::Type *CGOpenCLRuntime::convertOpenCLSpecificType(const Type *T) { llvm::LLVMContext& Ctx = CGM.getLLVMContext(); uint32_t AddrSpc = CGM.getContext().getTargetAddressSpace( CGM.getContext().getOpenCLTypeAddrSpace(T)); + + if (CGM.getTriple().isNVPTX()) { + switch (cast(T)->getKind()) { + default: + break; +#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \ + case BuiltinType::Id: \ + return llvm::IntegerType::getInt64Ty(CGM.getLLVMContext()); +#include "clang/Basic/OpenCLImageTypes.def" +#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \ + case BuiltinType::Sampled##Id: \ + return llvm::StructType::get( \ + llvm::IntegerType::getInt64Ty(CGM.getLLVMContext()), \ + llvm::IntegerType::getInt32Ty(CGM.getLLVMContext())); +#define IMAGE_WRITE_TYPE(Type, Id, Ext) +#define IMAGE_READ_WRITE_TYPE(Type, Id, Ext) +#include "clang/Basic/OpenCLImageTypes.def" + case BuiltinType::OCLSampler: + return llvm::IntegerType::getInt32Ty(CGM.getLLVMContext()); + } + } + switch (cast(T)->getKind()) { default: llvm_unreachable("Unexpected opencl builtin type!"); diff --git a/clang/test/CodeGenOpenCL/sampled_image_cuda.cl b/clang/test/CodeGenOpenCL/sampled_image_cuda.cl new file mode 100644 index 0000000000000..3ff133e385ee7 --- /dev/null +++ b/clang/test/CodeGenOpenCL/sampled_image_cuda.cl @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 %s -triple nvptx64-nvidia-cuda -O0 -emit-llvm -o - | FileCheck %s + +__attribute__((overloadable)) void my_read_image(__ocl_sampled_image1d_ro_t img_ro); + +__attribute__((overloadable)) __ocl_sampled_image1d_ro_t __spirv_SampledImage(read_only image1d_t img_wo, sampler_t sampl); + +void test_read_image(__ocl_sampled_image1d_ro_t img_ro, read_only image1d_t img_wo, sampler_t sampl) { + + // CHECK: call void @_Z13my_read_image32__spirv_SampledImage__image1d_ro(i64 %{{[a-zA-Z0-9]+}}, i32 %{{[a-zA-Z0-9]+}}) + my_read_image(img_ro); + // CHECK: call { i64, i32 } @_Z20__spirv_SampledImage14ocl_image1d_ro11ocl_sampler(i64 %{{[a-zA-Z0-9]+}}, i32 %{{[a-zA-Z0-9]+}}) + __ocl_sampled_image1d_ro_t s_imag = __spirv_SampledImage(img_wo, sampl); + // CHECK: call void @_Z13my_read_image32__spirv_SampledImage__image1d_ro(i64 %{{[a-zA-Z0-9]+}}, i32 %{{[a-zA-Z0-9]+}}) + my_read_image(s_imag); +}