Skip to content

Commit

Permalink
updates for OpenCL C 3.0
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
bashbaug authored and AlexeySotkin committed Sep 28, 2020
1 parent 4f1a327 commit 0db501e
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 5 deletions.
5 changes: 3 additions & 2 deletions lib/SPIRV/OCL20ToSPIRV.cpp
Expand Up @@ -346,7 +346,7 @@ bool OCL20ToSPIRV::runOnModule(Module &Module) {
return false;

CLVer = std::get<1>(Src);
if (CLVer > kOCLVer::CL20)
if (CLVer == kOCLVer::CL21)
return false;

LLVM_DEBUG(dbgs() << "Enter OCL20ToSPIRV:\n");
Expand Down Expand Up @@ -426,7 +426,8 @@ void OCL20ToSPIRV::visitCallInst(CallInst &CI) {
DemangledName == kOCLBuiltinName::AtomicCmpXchgStrong ||
DemangledName == kOCLBuiltinName::AtomicCmpXchgWeakExplicit ||
DemangledName == kOCLBuiltinName::AtomicCmpXchgStrongExplicit) {
assert(CLVer == kOCLVer::CL20 && "Wrong version of OpenCL");
assert((CLVer == kOCLVer::CL20 || CLVer == kOCLVer::CL30) &&
"Wrong version of OpenCL");
PCI = visitCallAtomicCmpXchg(PCI, DemangledName);
}
visitCallAtomicLegacy(PCI, MangledName, DemangledName);
Expand Down
2 changes: 1 addition & 1 deletion lib/SPIRV/OCL21ToSPIRV.cpp
Expand Up @@ -109,7 +109,7 @@ bool OCL21ToSPIRV::runOnModule(Module &Module) {
return false;

CLVer = std::get<1>(Src);
if (CLVer < kOCLVer::CL21)
if (CLVer != kOCLVer::CL21)
return false;

LLVM_DEBUG(dbgs() << "Enter OCL21ToSPIRV:\n");
Expand Down
1 change: 1 addition & 0 deletions lib/SPIRV/OCLUtil.h
Expand Up @@ -256,6 +256,7 @@ namespace kOCLVer {
const unsigned CL12 = 102000;
const unsigned CL20 = 200000;
const unsigned CL21 = 201000;
const unsigned CL30 = 300000;
} // namespace kOCLVer

namespace OclExt {
Expand Down
4 changes: 2 additions & 2 deletions lib/SPIRV/PreprocessMetadata.cpp
Expand Up @@ -208,8 +208,8 @@ void PreprocessMetadata::preprocessOCLMetadata(Module *M, SPIRVMDBuilder *B,
// !{x} = !{i32 3, i32 102000}
B->addNamedMD(kSPIRVMD::Source)
.addOp()
.add(CLVer < kOCLVer::CL21 ? spv::SourceLanguageOpenCL_C
: spv::SourceLanguageOpenCL_CPP)
.add(CLVer == kOCLVer::CL21 ? spv::SourceLanguageOpenCL_CPP
: spv::SourceLanguageOpenCL_C)
.add(CLVer)
.done();
if (EraseOCLMD)
Expand Down

0 comments on commit 0db501e

Please sign in to comment.