File tree Expand file tree Collapse file tree 2 files changed +27
-10
lines changed Expand file tree Collapse file tree 2 files changed +27
-10
lines changed Original file line number Diff line number Diff line change @@ -167,10 +167,21 @@ void SPIRVModuleAnalysis::setBaseInfo(const Module &M) {
167
167
unsigned MajorNum = getMetadataUInt (VersionMD, 0 , 2 );
168
168
unsigned MinorNum = getMetadataUInt (VersionMD, 1 );
169
169
unsigned RevNum = getMetadataUInt (VersionMD, 2 );
170
- MAI.SrcLangVersion = (MajorNum * 100 + MinorNum) * 1000 + RevNum;
170
+ // Prevent Major part of OpenCL version to be 0
171
+ MAI.SrcLangVersion =
172
+ (std::max (1U , MajorNum) * 100 + MinorNum) * 1000 + RevNum;
171
173
} else {
172
- MAI.SrcLang = SPIRV::SourceLanguage::Unknown;
173
- MAI.SrcLangVersion = 0 ;
174
+ // If there is no information about OpenCL version we are forced to generate
175
+ // OpenCL 1.0 by default for the OpenCL environment to avoid puzzling
176
+ // run-times with Unknown/0.0 version output. For a reference, LLVM-SPIRV
177
+ // Translator avoids potential issues with run-times in a similar manner.
178
+ if (ST->isOpenCLEnv ()) {
179
+ MAI.SrcLang = SPIRV::SourceLanguage::OpenCL_CPP;
180
+ MAI.SrcLangVersion = 100000 ;
181
+ } else {
182
+ MAI.SrcLang = SPIRV::SourceLanguage::Unknown;
183
+ MAI.SrcLangVersion = 0 ;
184
+ }
174
185
}
175
186
176
187
if (auto ExtNode = M.getNamedMetadata (" opencl.used.extensions" )) {
Original file line number Diff line number Diff line change 1
- ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
1
+ ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-OCL
2
2
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
3
3
4
- ; CHECK-DAG: OpCapability Addresses
5
- ; CHECK-DAG: OpCapability Linkage
6
- ; CHECK-DAG: OpCapability Kernel
7
- ; CHECK: %1 = OpExtInstImport "OpenCL.std"
8
- ; CHECK: OpMemoryModel Physical64 OpenCL
9
- ; CHECK: OpSource Unknown 0
4
+ ; RUN: llc -O0 -mtriple=spirv-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOOCL
5
+ ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-unknown %s -o - -filetype=obj | spirv-val %}
6
+
7
+ ; CHECK-DAG: OpCapability Linkage
8
+ ; CHECK-NOOCL-DAG: OpCapability Shader
9
+ ; CHECK-OCL-DAG: OpCapability Addresses
10
+ ; CHECK-OCL-DAG: OpCapability Kernel
11
+ ; CHECK-OCL: %1 = OpExtInstImport "OpenCL.std"
12
+ ; CHECK-NOOCL: OpMemoryModel Logical GLSL450
13
+ ; CHECK-OCL: OpMemoryModel Physical64 OpenCL
14
+ ; CHECK-NOOCL: OpSource Unknown 0
15
+ ; CHECK-OCL: OpSource OpenCL_CPP 100000
You can’t perform that action at this time.
0 commit comments