Skip to content

Commit 7e0b9e3

Browse files
bashbaugvmaksimo
authored andcommitted
updates for OpenCL C 3.0
OpenCL C 3.0 is a derivative of OpenCL C 2.0 and not OpenCL C++. Run the OpenCL C++ passes for OpenCL 2.1 only, and run similar OpenCL C 2.0 passes for OpenCL C 3.0.
1 parent 3e26932 commit 7e0b9e3

File tree

4 files changed

+7
-5
lines changed

4 files changed

+7
-5
lines changed

llvm-spirv/lib/SPIRV/OCL20ToSPIRV.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ bool OCL20ToSPIRV::runOnModule(Module &Module) {
329329
return false;
330330

331331
CLVer = std::get<1>(Src);
332-
if (CLVer > kOCLVer::CL20)
332+
if (CLVer == kOCLVer::CL21)
333333
return false;
334334

335335
LLVM_DEBUG(dbgs() << "Enter OCL20ToSPIRV:\n");
@@ -406,7 +406,8 @@ void OCL20ToSPIRV::visitCallInst(CallInst &CI) {
406406
DemangledName == kOCLBuiltinName::AtomicCmpXchgStrong ||
407407
DemangledName == kOCLBuiltinName::AtomicCmpXchgWeakExplicit ||
408408
DemangledName == kOCLBuiltinName::AtomicCmpXchgStrongExplicit) {
409-
assert(CLVer == kOCLVer::CL20 && "Wrong version of OpenCL");
409+
assert((CLVer == kOCLVer::CL20 || CLVer == kOCLVer::CL30) &&
410+
"Wrong version of OpenCL");
410411
PCI = visitCallAtomicCmpXchg(PCI);
411412
}
412413
visitCallAtomicLegacy(PCI, MangledName, DemangledName);

llvm-spirv/lib/SPIRV/OCL21ToSPIRV.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ bool OCL21ToSPIRV::runOnModule(Module &Module) {
107107
return false;
108108

109109
CLVer = std::get<1>(Src);
110-
if (CLVer < kOCLVer::CL21)
110+
if (CLVer != kOCLVer::CL21)
111111
return false;
112112

113113
LLVM_DEBUG(dbgs() << "Enter OCL21ToSPIRV:\n");

llvm-spirv/lib/SPIRV/OCLUtil.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ namespace kOCLVer {
321321
const unsigned CL12 = 102000;
322322
const unsigned CL20 = 200000;
323323
const unsigned CL21 = 201000;
324+
const unsigned CL30 = 300000;
324325
} // namespace kOCLVer
325326

326327
namespace OclExt {

llvm-spirv/lib/SPIRV/PreprocessMetadata.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ void PreprocessMetadata::preprocessOCLMetadata(Module *M, SPIRVMDBuilder *B,
207207
// !{x} = !{i32 3, i32 102000}
208208
B->addNamedMD(kSPIRVMD::Source)
209209
.addOp()
210-
.add(CLVer < kOCLVer::CL21 ? spv::SourceLanguageOpenCL_C
211-
: spv::SourceLanguageOpenCL_CPP)
210+
.add(CLVer == kOCLVer::CL21 ? spv::SourceLanguageOpenCL_CPP
211+
: spv::SourceLanguageOpenCL_C)
212212
.add(CLVer)
213213
.done();
214214
if (EraseOCLMD)

0 commit comments

Comments
 (0)