r304389 - [OpenCL] Makes kernels use the SPIR_KERNEL CC by default.
Author: pjaaskel Date: Thu Jun 1 02:18:49 2017 New Revision: 304389 URL: http://llvm.org/viewvc/llvm-project?rev=304389&view=rev Log: [OpenCL] Makes kernels use the SPIR_KERNEL CC by default. Rationale: OpenCL kernels are called via an explicit runtime API with arguments set with clSetKernelArg(), not as normal sub-functions. Return SPIR_KERNEL by default as the kernel calling convention to ensure the fingerprint is fixed such way that each OpenCL argument gets one matching argument in the produced kernel function argument list to enable feasible implementation of clSetKernelArg() with aggregates etc. In case we would use the default C calling conv here, clSetKernelArg() might break depending on the target-specific conventions; different targets might split structs passed as values to multiple function arguments etc. https://reviews.llvm.org/D33639 Added: cfe/trunk/test/CodeGenOpenCL/kernels-have-spir-cc-by-default.cl Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/lib/CodeGen/ABIInfo.h cfe/trunk/lib/CodeGen/CGCall.cpp cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/lib/Sema/SemaType.cpp Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=304389&r1=304388&r2=304389&view=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Thu Jun 1 02:18:49 2017 @@ -3123,6 +3123,7 @@ public: case CC_Swift: case CC_X86Pascal: case CC_IntelOclBicc: +case CC_OpenCLKernel: return CCCR_OK; default: return CCCR_Warning; @@ -4834,6 +4835,7 @@ public: case CC_PreserveMost: case CC_PreserveAll: case CC_X86RegCall: +case CC_OpenCLKernel: return CCCR_OK; default: return CCCR_Warning; @@ -4907,6 +4909,7 @@ public: case CC_X86_64SysV: case CC_Swift: case CC_X86RegCall: +case CC_OpenCLKernel: return CCCR_OK; default: return CCCR_Warning; @@ -5860,6 +5863,7 @@ public: case CC_AAPCS: case CC_AAPCS_VFP: case CC_Swift: +case CC_OpenCLKernel: return CCCR_OK; default: return CCCR_Warning; @@ -6019,6 +6023,7 @@ public: case CC_X86VectorCall: return CCCR_Ignore; case CC_C: +case CC_OpenCLKernel: return CCCR_OK; default: return CCCR_Warning; @@ -6329,6 +6334,7 @@ public: case CC_Swift: case CC_PreserveMost: case CC_PreserveAll: +case CC_OpenCLKernel: return CCCR_OK; default: return CCCR_Warning; @@ -7380,6 +7386,7 @@ public: switch (CC) { case CC_C: case CC_Swift: +case CC_OpenCLKernel: return CCCR_OK; default: return CCCR_Warning; @@ -7663,6 +7670,15 @@ public: ArrayRef getGCCRegAliases() const override { return None; } + CallingConvCheckResult checkCallingConvention(CallingConv CC) const override { +switch (CC) { + default: +return CCCR_Warning; + case CC_C: + case CC_OpenCLKernel: +return CCCR_OK; +} + } }; class MipsTargetInfo : public TargetInfo { Modified: cfe/trunk/lib/CodeGen/ABIInfo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ABIInfo.h?rev=304389&r1=304388&r2=304389&view=diff == --- cfe/trunk/lib/CodeGen/ABIInfo.h (original) +++ cfe/trunk/lib/CodeGen/ABIInfo.h Thu Jun 1 02:18:49 2017 @@ -149,7 +149,6 @@ namespace swiftcall { return info->supportsSwift(); } }; - } // end namespace CodeGen } // end namespace clang Modified: cfe/trunk/lib/CodeGen/CGCall.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=304389&r1=304388&r2=304389&view=diff == --- cfe/trunk/lib/CodeGen/CGCall.cpp (original) +++ cfe/trunk/lib/CodeGen/CGCall.cpp Thu Jun 1 02:18:49 2017 @@ -707,6 +707,12 @@ CodeGenTypes::arrangeCall(const CGFuncti signature.getRequiredArgs()); } +namespace clang { +namespace CodeGen { +void computeSPIRKernelABIInfo(CodeGenModule &CGM, CGFunctionInfo &FI); +} +} + /// Arrange the argument and result information for an abstract value /// of a given function type. This is the method which all of the /// above functions ultimately defer to. @@ -741,12 +747,16 @@ CodeGenTypes::arrangeLLVMFunctionInfo(Ca bool inserted = FunctionsBeingProcessed.insert(FI).second; (void)inserted; assert(inserted && "Recursively being processed?"); - + // Compute ABI information. - if (info.getCC() != CC_Swift) { -getABIInfo().computeInfo(*FI); - } else { + if (CC == llvm::CallingConv::SPIR_KERNEL) { +// Force target independent argument handling for the host visible +// kernel functions. +computeSPIRKernelABIInfo(CGM, *FI); + } else if
r304396 - [OpenCL] spir_kern by defaul: fix old test cases
Author: pjaaskel Date: Thu Jun 1 03:19:43 2017 New Revision: 304396 URL: http://llvm.org/viewvc/llvm-project?rev=304396&view=rev Log: [OpenCL] spir_kern by defaul: fix old test cases Modified: cfe/trunk/test/CodeGenOpenCL/bool_cast.cl cfe/trunk/test/CodeGenOpenCL/kernel-attributes.cl cfe/trunk/test/CodeGenOpenCL/kernel-metadata.cl cfe/trunk/test/CodeGenOpenCL/pipe_types.cl cfe/trunk/test/CodeGenOpenCL/ptx-calls.cl cfe/trunk/test/CodeGenOpenCL/ptx-kernels.cl Modified: cfe/trunk/test/CodeGenOpenCL/bool_cast.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/bool_cast.cl?rev=304396&r1=304395&r2=304396&view=diff == --- cfe/trunk/test/CodeGenOpenCL/bool_cast.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/bool_cast.cl Thu Jun 1 03:19:43 2017 @@ -4,7 +4,7 @@ typedef unsigned char uchar4 __attribute typedef unsigned int int4 __attribute((ext_vector_type(4))); typedef float float4 __attribute((ext_vector_type(4))); -// CHECK-LABEL: define void @ker() +// CHECK-LABEL: define spir_kernel void @ker() void kernel ker() { bool t = true; int4 vec4 = (int4)t; Modified: cfe/trunk/test/CodeGenOpenCL/kernel-attributes.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/kernel-attributes.cl?rev=304396&r1=304395&r2=304396&view=diff == --- cfe/trunk/test/CodeGenOpenCL/kernel-attributes.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/kernel-attributes.cl Thu Jun 1 03:19:43 2017 @@ -3,13 +3,13 @@ typedef unsigned int uint4 __attribute__((ext_vector_type(4))); kernel __attribute__((vec_type_hint(int))) __attribute__((reqd_work_group_size(1,2,4))) void kernel1(int a) {} -// CHECK: define void @kernel1(i32 {{[^%]*}}%a) {{[^{]+}} !vec_type_hint ![[MD1:[0-9]+]] !reqd_work_group_size ![[MD2:[0-9]+]] +// CHECK: define spir_kernel void @kernel1(i32 {{[^%]*}}%a) {{[^{]+}} !vec_type_hint ![[MD1:[0-9]+]] !reqd_work_group_size ![[MD2:[0-9]+]] kernel __attribute__((vec_type_hint(uint4))) __attribute__((work_group_size_hint(8,16,32))) void kernel2(int a) {} -// CHECK: define void @kernel2(i32 {{[^%]*}}%a) {{[^{]+}} !vec_type_hint ![[MD3:[0-9]+]] !work_group_size_hint ![[MD4:[0-9]+]] +// CHECK: define spir_kernel void @kernel2(i32 {{[^%]*}}%a) {{[^{]+}} !vec_type_hint ![[MD3:[0-9]+]] !work_group_size_hint ![[MD4:[0-9]+]] kernel __attribute__((intel_reqd_sub_group_size(8))) void kernel3(int a) {} -// CHECK: define void @kernel3(i32 {{[^%]*}}%a) {{[^{]+}} !intel_reqd_sub_group_size ![[MD5:[0-9]+]] +// CHECK: define spir_kernel void @kernel3(i32 {{[^%]*}}%a) {{[^{]+}} !intel_reqd_sub_group_size ![[MD5:[0-9]+]] // CHECK: [[MD1]] = !{i32 undef, i32 1} // CHECK: [[MD2]] = !{i32 1, i32 2, i32 4} Modified: cfe/trunk/test/CodeGenOpenCL/kernel-metadata.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/kernel-metadata.cl?rev=304396&r1=304395&r2=304396&view=diff == --- cfe/trunk/test/CodeGenOpenCL/kernel-metadata.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/kernel-metadata.cl Thu Jun 1 03:19:43 2017 @@ -6,5 +6,5 @@ void normal_function() { __kernel void kernel_function() { } -// CHECK: define void @kernel_function() {{[^{]+}} !kernel_arg_addr_space ![[MD:[0-9]+]] !kernel_arg_access_qual ![[MD]] !kernel_arg_type ![[MD]] !kernel_arg_base_type ![[MD]] !kernel_arg_type_qual ![[MD]] { +// CHECK: define spir_kernel void @kernel_function() {{[^{]+}} !kernel_arg_addr_space ![[MD:[0-9]+]] !kernel_arg_access_qual ![[MD]] !kernel_arg_type ![[MD]] !kernel_arg_base_type ![[MD]] !kernel_arg_type_qual ![[MD]] { // CHECK: ![[MD]] = !{} Modified: cfe/trunk/test/CodeGenOpenCL/pipe_types.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/pipe_types.cl?rev=304396&r1=304395&r2=304396&view=diff == --- cfe/trunk/test/CodeGenOpenCL/pipe_types.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/pipe_types.cl Thu Jun 1 03:19:43 2017 @@ -28,7 +28,7 @@ void test5(read_only pipe int4 p) { typedef read_only pipe int MyPipe; kernel void test6(MyPipe p) { -// CHECK: define void @test6(%opencl.pipe_t* %p) +// CHECK: define spir_kernel void @test6(%opencl.pipe_t* %p) } struct Person { Modified: cfe/trunk/test/CodeGenOpenCL/ptx-calls.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/ptx-calls.cl?rev=304396&r1=304395&r2=304396&view=diff == --- cfe/trunk/test/CodeGenOpenCL/ptx-calls.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/ptx-calls.cl Thu Jun 1 03:19:43 2017 @@ -7,7 +7,7 @@ void device_function() { __kernel void kernel_function() { device_function(); } -// CHECK-LABEL: define void @kernel_function() +// CHECK-L
r287112 - Add a little endian variant of TCE.
Author: pjaaskel Date: Wed Nov 16 09:22:31 2016 New Revision: 287112 URL: http://llvm.org/viewvc/llvm-project?rev=287112&view=rev Log: Add a little endian variant of TCE. Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/ToolChains.cpp cfe/trunk/lib/Driver/ToolChains.h Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=287112&r1=287111&r2=287112&view=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Wed Nov 16 09:22:31 2016 @@ -7210,8 +7210,11 @@ public: FloatFormat = &llvm::APFloat::IEEEsingle; DoubleFormat = &llvm::APFloat::IEEEsingle; LongDoubleFormat = &llvm::APFloat::IEEEsingle; -resetDataLayout("E-p:32:32-i8:8:32-i16:16:32-i64:32" -"-f64:32-v64:32-v128:32-a:0:32-n32"); +resetDataLayout("E-p:32:32:32-i1:8:8-i8:8:32-" +"i16:16:32-i32:32:32-i64:32:32-" +"f32:32:32-f64:32:32-v64:32:32-" +"v128:32:32-v256:32:32-v512:32:32-" +"v1024:32:32-a0:0:32-n32"); AddrSpaceMap = &TCEOpenCLAddrSpaceMap; UseAddrSpaceMapMangling = true; } @@ -7239,6 +7242,31 @@ public: } }; +class TCELETargetInfo : public TCETargetInfo { +public: + TCELETargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) + : TCETargetInfo(Triple, Opts) { +BigEndian = false; + +resetDataLayout("e-p:32:32:32-i1:8:8-i8:8:32-" +"i16:16:32-i32:32:32-i64:32:32-" +"f32:32:32-f64:32:32-v64:32:32-" +"v128:32:32-v256:32:32-v512:32:32-" +"v1024:32:32-a0:0:32-n32"); + + } + + virtual void getTargetDefines(const LangOptions &Opts, +MacroBuilder &Builder) const { +DefineStd(Builder, "tcele", Opts); +Builder.defineMacro("__TCE__"); +Builder.defineMacro("__TCE_V1__"); +Builder.defineMacro("__TCELE__"); +Builder.defineMacro("__TCELE_V1__"); + } + +}; + class BPFTargetInfo : public TargetInfo { public: BPFTargetInfo(const llvm::Triple &Triple, const TargetOptions &) @@ -8627,6 +8655,9 @@ static TargetInfo *AllocateTarget(const case llvm::Triple::tce: return new TCETargetInfo(Triple, Opts); + case llvm::Triple::tcele: +return new TCELETargetInfo(Triple, Opts); + case llvm::Triple::x86: if (Triple.isOSDarwin()) return new DarwinI386TargetInfo(Triple, Opts); Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=287112&r1=287111&r2=287112&view=diff == --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Wed Nov 16 09:22:31 2016 @@ -8251,6 +8251,7 @@ const TargetCodeGenInfo &CodeGenModule:: } case llvm::Triple::tce: + case llvm::Triple::tcele: return SetCGInfo(new TCETargetCodeGenInfo(Types)); case llvm::Triple::x86: { Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=287112&r1=287111&r2=287112&view=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Wed Nov 16 09:22:31 2016 @@ -3618,6 +3618,9 @@ const ToolChain &Driver::getToolChain(co case llvm::Triple::tce: TC = new toolchains::TCEToolChain(*this, Target, Args); break; + case llvm::Triple::tcele: +TC = new toolchains::TCELEToolChain(*this, Target, Args); +break; case llvm::Triple::hexagon: TC = new toolchains::HexagonToolChain(*this, Target, Args); break; Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=287112&r1=287111&r2=287112&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Nov 16 09:22:31 2016 @@ -3435,6 +3435,13 @@ bool TCEToolChain::isPIEDefault() const bool TCEToolChain::isPICDefaultForced() const { return false; } +TCELEToolChain::TCELEToolChain(const Driver &D, const llvm::Triple& Triple, + const ArgList &Args) + : TCEToolChain(D, Triple, Args) { +} + +TCELEToolChain::~TCELEToolChain() {} + // CloudABI - CloudABI tool chain which can call ld(1) directly. CloudABI::CloudABI(const Driver &D, const llvm::Triple &Triple, Modified: cfe/trunk/lib/Driver/ToolChains.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=287112&r1=287111&r2=287112&view=diff
r287115 - target-data test update for TCE and TCELE
Author: pjaaskel Date: Wed Nov 16 10:21:59 2016 New Revision: 287115 URL: http://llvm.org/viewvc/llvm-project?rev=287115&view=rev Log: target-data test update for TCE and TCELE Modified: cfe/trunk/test/CodeGen/target-data.c Modified: cfe/trunk/test/CodeGen/target-data.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/target-data.c?rev=287115&r1=287114&r2=287115&view=diff == --- cfe/trunk/test/CodeGen/target-data.c (original) +++ cfe/trunk/test/CodeGen/target-data.c Wed Nov 16 10:21:59 2016 @@ -179,7 +179,11 @@ // RUN: %clang_cc1 -triple tce-unknown -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=TCE -// TCE: target datalayout = "E-p:32:32-i8:8:32-i16:16:32-i64:32-f64:32-v64:32-v128:32-a:0:32-n32" +// TCE: target datalayout = "E-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:32-v128:32:32-v256:32:32-v512:32:32-v1024:32:32-a0:0:32-n32" + +// RUN: %clang_cc1 -triple tcele-unknown -o - -emit-llvm %s | \ +// RUN: FileCheck %s -check-prefix=TCELE +// TCELE: target datalayout = "e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:32-v128:32:32-v256:32:32-v512:32:32-v1024:32:32-a0:0:32-n32" // RUN: %clang_cc1 -triple spir-unknown -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=SPIR ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r286821 - Fix r286819 (accidentally patched multiple times.
Author: pjaaskel Date: Mon Nov 14 07:14:38 2016 New Revision: 286821 URL: http://llvm.org/viewvc/llvm-project?rev=286821&view=rev Log: Fix r286819 (accidentally patched multiple times. Modified: cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl Modified: cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl?rev=286821&r1=286820&r2=286821&view=diff == --- cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl Mon Nov 14 07:14:38 2016 @@ -7,21 +7,3 @@ kernel void foo(__global int * G, __cons } // CHECK: !kernel_arg_addr_space ![[MD123:[0-9]+]] // CHECK: ![[MD123]] = !{i32 1, i32 2, i32 3} -// Test that the kernel argument info always refers to SPIR address spaces, -// even if the target has only one address space like x86_64 does. -// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -triple x86_64-unknown-unknown -cl-kernel-arg-info | FileCheck %s - -kernel void foo(__global int * G, __constant int *C, __local int *L) { - *G = *C + *L; -} -// CHECK: !kernel_arg_addr_space ![[MD123:[0-9]+]] -// CHECK: ![[MD123]] = !{i32 1, i32 2, i32 3} -// Test that the kernel argument info always refers to SPIR address spaces, -// even if the target has only one address space like x86_64 does. -// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -triple x86_64-unknown-unknown -cl-kernel-arg-info | FileCheck %s - -kernel void foo(__global int * G, __constant int *C, __local int *L) { - *G = *C + *L; -} -// CHECK: !kernel_arg_addr_space ![[MD123:[0-9]+]] -// CHECK: ![[MD123]] = !{i32 1, i32 2, i32 3} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r286819 - [OpenCL] always use SPIR address spaces for kernel_arg_addr_space MD
Author: pjaaskel Date: Mon Nov 14 07:08:30 2016 New Revision: 286819 URL: http://llvm.org/viewvc/llvm-project?rev=286819&view=rev Log: [OpenCL] always use SPIR address spaces for kernel_arg_addr_space MD It doesn't make sense to use the target's address space ids in this context as this is metadata that should be referring to the "logical" OpenCL address spaces. For flat AS machines like all "CPUs" in general, the logical AS info gets lost as there's only one address space (0). This commit changes the logic such that we always use the SPIR address space ids for the argument metadata. It thus allows implementing the clGetKernelArgInfo() and the other detection needs. https://reviews.llvm.org/D26157 Added: cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=286819&r1=286818&r2=286819&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Mon Nov 14 07:08:30 2016 @@ -466,6 +466,23 @@ static void removeImageAccessQualifier(s } } +// Returns the address space id that should be produced to the +// kernel_arg_addr_space metadata. This is always fixed to the ids +// as specified in the SPIR 2.0 specification in order to differentiate +// for example in clGetKernelArgInfo() implementation between the address +// spaces with targets without unique mapping to the OpenCL address spaces +// (basically all single AS CPUs). +static unsigned ArgInfoAddressSpace(unsigned LangAS) { + switch (LangAS) { + case LangAS::opencl_global: return 1; + case LangAS::opencl_constant: return 2; + case LangAS::opencl_local:return 3; + case LangAS::opencl_generic: return 4; // Not in SPIR 2.0 specs. + default: +return 0; // Assume private. + } +} + // OpenCL v1.2 s5.6.4.6 allows the compiler to store kernel argument // information in the program executable. The argument information stored // includes the argument name, its type, the address and access qualifiers used. @@ -506,7 +523,7 @@ static void GenOpenCLArgMetadata(const F // Get address qualifier. addressQuals.push_back(llvm::ConstantAsMetadata::get(Builder.getInt32( - ASTCtx.getTargetAddressSpace(pointeeTy.getAddressSpace(); +ArgInfoAddressSpace(pointeeTy.getAddressSpace(); // Get argument type name. std::string typeName = @@ -543,8 +560,7 @@ static void GenOpenCLArgMetadata(const F uint32_t AddrSpc = 0; bool isPipe = ty->isPipeType(); if (ty->isImageType() || isPipe) -AddrSpc = - CGM.getContext().getTargetAddressSpace(LangAS::opencl_global); +AddrSpc = ArgInfoAddressSpace(LangAS::opencl_global); addressQuals.push_back( llvm::ConstantAsMetadata::get(Builder.getInt32(AddrSpc))); Added: cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl?rev=286819&view=auto == --- cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl (added) +++ cfe/trunk/test/CodeGenOpenCL/kernel-arg-info-single-as.cl Mon Nov 14 07:08:30 2016 @@ -0,0 +1,27 @@ +// Test that the kernel argument info always refers to SPIR address spaces, +// even if the target has only one address space like x86_64 does. +// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -triple x86_64-unknown-unknown -cl-kernel-arg-info | FileCheck %s + +kernel void foo(__global int * G, __constant int *C, __local int *L) { + *G = *C + *L; +} +// CHECK: !kernel_arg_addr_space ![[MD123:[0-9]+]] +// CHECK: ![[MD123]] = !{i32 1, i32 2, i32 3} +// Test that the kernel argument info always refers to SPIR address spaces, +// even if the target has only one address space like x86_64 does. +// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -triple x86_64-unknown-unknown -cl-kernel-arg-info | FileCheck %s + +kernel void foo(__global int * G, __constant int *C, __local int *L) { + *G = *C + *L; +} +// CHECK: !kernel_arg_addr_space ![[MD123:[0-9]+]] +// CHECK: ![[MD123]] = !{i32 1, i32 2, i32 3} +// Test that the kernel argument info always refers to SPIR address spaces, +// even if the target has only one address space like x86_64 does. +// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -triple x86_64-unknown-unknown -cl-kernel-arg-info | FileCheck %s + +kernel void foo(__global int * G, __constant int *C, __local int *L) { + *G = *C + *L; +} +// CHECK: !kernel_arg_addr_space ![[MD123:[0-9]+]] +// CHECK: ![[MD123]] = !{i32 1, i32 2, i32 3} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/