Skip to content

Commit 32786ff

Browse files
authored
Support both legacy and Khronos version of global variable extensions (#2228)
This is done to provide smooth drivers transition to official extensions. Also updated tests for new extensions to use new tokens after KhronosGroup/SPIRV-Headers@cca08c6
1 parent f18e64d commit 32786ff

File tree

13 files changed

+263
-47
lines changed

13 files changed

+263
-47
lines changed

include/LLVMSPIRVExtensions.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ EXT(SPV_INTEL_arithmetic_fence)
5555
EXT(SPV_INTEL_bfloat16_conversion)
5656
EXT(SPV_INTEL_joint_matrix)
5757
EXT(SPV_INTEL_hw_thread_queries)
58+
EXT(SPV_INTEL_global_variable_decorations)
5859
EXT(SPV_INTEL_global_variable_host_access)
5960
EXT(SPV_INTEL_global_variable_fpga_decorations)
6061
EXT(SPV_INTEL_complex_float_mul_div)

lib/SPIRV/SPIRVReader.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3874,6 +3874,7 @@ transDecorationsToMetadataList(llvm::LLVMContext *Context,
38743874
OPs.push_back(LinkTypeMD);
38753875
break;
38763876
}
3877+
case spv::internal::DecorationHostAccessINTEL:
38773878
case DecorationHostAccessINTEL: {
38783879
const auto *const HostAccDeco =
38793880
static_cast<const SPIRVDecorateHostAccessINTEL *>(Deco);

lib/SPIRV/SPIRVWriter.cpp

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2599,6 +2599,7 @@ static void transMetadataDecorations(Metadata *MD, SPIRVEntry *Target) {
25992599
break;
26002600
}
26012601

2602+
case spv::internal::DecorationHostAccessINTEL:
26022603
case DecorationHostAccessINTEL: {
26032604
checkIsGlobalVar(Target, DecoKind);
26042605

@@ -2618,11 +2619,16 @@ static void transMetadataDecorations(Metadata *MD, SPIRVEntry *Target) {
26182619
Name, SPIRVEC_InvalidLlvmModule,
26192620
"HostAccessINTEL requires second extra operand to be a string");
26202621

2621-
Target->addDecorate(
2622-
new SPIRVDecorateHostAccessINTEL(Target, Q, Name->getString().str()));
2622+
if (DecoKind == DecorationHostAccessINTEL)
2623+
Target->addDecorate(new SPIRVDecorateHostAccessINTEL(
2624+
Target, Q, Name->getString().str()));
2625+
else
2626+
Target->addDecorate(new SPIRVDecorateHostAccessINTELLegacy(
2627+
Target, Q, Name->getString().str()));
26232628
break;
26242629
}
26252630

2631+
case spv::internal::DecorationInitModeINTEL:
26262632
case DecorationInitModeINTEL: {
26272633
checkIsGlobalVar(Target, DecoKind);
26282634
ErrLog.checkError(static_cast<SPIRVVariable *>(Target)->getInitializer(),
@@ -2639,10 +2645,26 @@ static void transMetadataDecorations(Metadata *MD, SPIRVEntry *Target) {
26392645
InitializationModeQualifier Q =
26402646
static_cast<InitializationModeQualifier>(Trigger->getZExtValue());
26412647

2642-
Target->addDecorate(new SPIRVDecorateInitModeINTEL(Target, Q));
2648+
if (DecoKind == DecorationInitModeINTEL)
2649+
Target->addDecorate(new SPIRVDecorateInitModeINTEL(Target, Q));
2650+
else
2651+
Target->addDecorate(new SPIRVDecorateInitModeINTELLegacy(Target, Q));
26432652

26442653
break;
26452654
}
2655+
case spv::internal::DecorationImplementInCSRINTEL: {
2656+
checkIsGlobalVar(Target, DecoKind);
2657+
ErrLog.checkError(NumOperands == 2, SPIRVEC_InvalidLlvmModule,
2658+
"ImplementInCSRINTEL requires exactly 1 extra operand");
2659+
auto *Value = mdconst::dyn_extract<ConstantInt>(DecoMD->getOperand(1));
2660+
ErrLog.checkError(
2661+
Value, SPIRVEC_InvalidLlvmModule,
2662+
"ImplementInCSRINTEL requires extra operand to be an integer");
2663+
2664+
Target->addDecorate(
2665+
new SPIRVDecorateImplementInCSRINTEL(Target, Value->getZExtValue()));
2666+
break;
2667+
}
26462668
case DecorationImplementInRegisterMapINTEL: {
26472669
checkIsGlobalVar(Target, DecoKind);
26482670
ErrLog.checkError(

lib/SPIRV/libSPIRV/SPIRVDecorate.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ void SPIRVDecorate::encode(spv_ostream &O) const {
124124
case DecorationUserSemantic:
125125
SPIRVDecorateUserSemanticAttr::encodeLiterals(Encoder, Literals);
126126
break;
127+
case internal::DecorationHostAccessINTEL:
128+
SPIRVDecorateHostAccessINTELLegacy::encodeLiterals(Encoder, Literals);
129+
break;
127130
case DecorationHostAccessINTEL:
128131
SPIRVDecorateHostAccessINTEL::encodeLiterals(Encoder, Literals);
129132
break;
@@ -156,6 +159,9 @@ void SPIRVDecorate::decode(std::istream &I) {
156159
case DecorationUserSemantic:
157160
SPIRVDecorateUserSemanticAttr::decodeLiterals(Decoder, Literals);
158161
break;
162+
case internal::DecorationHostAccessINTEL:
163+
SPIRVDecorateHostAccessINTELLegacy::decodeLiterals(Decoder, Literals);
164+
break;
159165
case DecorationHostAccessINTEL:
160166
SPIRVDecorateHostAccessINTEL::decodeLiterals(Decoder, Literals);
161167
break;

lib/SPIRV/libSPIRV/SPIRVDecorate.h

Lines changed: 106 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ class SPIRVDecorate : public SPIRVDecorateGeneric {
187187
return ExtensionID::SPV_INTEL_fpga_invocation_pipelining_attributes;
188188
case internal::DecorationRuntimeAlignedINTEL:
189189
return ExtensionID::SPV_INTEL_runtime_aligned;
190+
case internal::DecorationHostAccessINTEL:
191+
case internal::DecorationInitModeINTEL:
192+
case internal::DecorationImplementInCSRINTEL:
193+
return ExtensionID::SPV_INTEL_global_variable_decorations;
190194
case DecorationInitModeINTEL:
191195
case DecorationImplementInRegisterMapINTEL:
192196
return ExtensionID::SPV_INTEL_global_variable_fpga_decorations;
@@ -735,13 +739,13 @@ class SPIRVDecoratePipelineEnableINTEL : public SPIRVDecorate {
735739
: SPIRVDecorate(spv::DecorationPipelineEnableINTEL, TheTarget, Enable) {}
736740
};
737741

738-
class SPIRVDecorateHostAccessINTEL : public SPIRVDecorate {
742+
class SPIRVDecorateHostAccessINTELBase : public SPIRVDecorate {
739743
public:
740744
// Complete constructor for SPIRVHostAccessINTEL
741-
SPIRVDecorateHostAccessINTEL(SPIRVEntry *TheTarget,
742-
HostAccessQualifier AccessMode,
743-
const std::string &VarName)
744-
: SPIRVDecorate(DecorationHostAccessINTEL, TheTarget) {
745+
SPIRVDecorateHostAccessINTELBase(Decoration D, SPIRVEntry *TheTarget,
746+
HostAccessQualifier AccessMode,
747+
const std::string &VarName)
748+
: SPIRVDecorate(D, TheTarget) {
745749
Literals.push_back(AccessMode);
746750
for (auto &I : getVec(VarName))
747751
Literals.push_back(I);
@@ -752,7 +756,15 @@ class SPIRVDecorateHostAccessINTEL : public SPIRVDecorate {
752756
std::string getVarName() const {
753757
return getString(Literals.cbegin() + 1, Literals.cend());
754758
}
759+
};
755760

761+
class SPIRVDecorateHostAccessINTEL : public SPIRVDecorateHostAccessINTELBase {
762+
public:
763+
SPIRVDecorateHostAccessINTEL(SPIRVEntry *TheTarget,
764+
HostAccessQualifier AccessMode,
765+
const std::string &VarName)
766+
: SPIRVDecorateHostAccessINTELBase(DecorationHostAccessINTEL, TheTarget,
767+
AccessMode, VarName) {}
756768
static void encodeLiterals(SPIRVEncoder &Encoder,
757769
const std::vector<SPIRVWord> &Literals) {
758770
#ifdef _SPIRV_SUPPORT_TEXT_FMT
@@ -783,15 +795,62 @@ class SPIRVDecorateHostAccessINTEL : public SPIRVDecorate {
783795
}
784796
};
785797

786-
class SPIRVDecorateInitModeINTEL : public SPIRVDecorate {
798+
class SPIRVDecorateHostAccessINTELLegacy
799+
: public SPIRVDecorateHostAccessINTELBase {
800+
public:
801+
SPIRVDecorateHostAccessINTELLegacy(SPIRVEntry *TheTarget,
802+
HostAccessQualifier AccessMode,
803+
const std::string &VarName)
804+
: SPIRVDecorateHostAccessINTELBase(internal::DecorationHostAccessINTEL,
805+
TheTarget, AccessMode, VarName) {}
806+
static void encodeLiterals(SPIRVEncoder &Encoder,
807+
const std::vector<SPIRVWord> &Literals) {
808+
#ifdef _SPIRV_SUPPORT_TEXT_FMT
809+
if (SPIRVUseTextFormat) {
810+
Encoder << Literals.front();
811+
std::string Name = getString(Literals.cbegin() + 1, Literals.cend());
812+
Encoder << Name;
813+
} else
814+
#endif
815+
Encoder << Literals;
816+
}
817+
818+
static void decodeLiterals(SPIRVDecoder &Decoder,
819+
std::vector<SPIRVWord> &Literals) {
820+
#ifdef _SPIRV_SUPPORT_TEXT_FMT
821+
if (SPIRVUseTextFormat) {
822+
SPIRVWord Mode;
823+
Decoder >> Mode;
824+
std::string Name;
825+
Decoder >> Name;
826+
Literals.front() = Mode;
827+
std::copy_n(getVec(Name).begin(), Literals.size() - 1,
828+
Literals.begin() + 1);
829+
830+
} else
831+
#endif
832+
Decoder >> Literals;
833+
}
834+
};
835+
836+
class SPIRVDecorateInitModeINTELBase : public SPIRVDecorate {
787837
public:
788838
// Complete constructor for SPIRVInitModeINTEL
789-
SPIRVDecorateInitModeINTEL(SPIRVEntry *TheTarget,
790-
InitializationModeQualifier Trigger)
791-
: SPIRVDecorate(DecorationInitModeINTEL, TheTarget) {
839+
SPIRVDecorateInitModeINTELBase(Decoration D, SPIRVEntry *TheTarget,
840+
InitializationModeQualifier Trigger)
841+
: SPIRVDecorate(D, TheTarget) {
792842
Literals.push_back(Trigger);
793843
WordCount += Literals.size();
794844
}
845+
};
846+
847+
class SPIRVDecorateInitModeINTEL : public SPIRVDecorateInitModeINTELBase {
848+
public:
849+
SPIRVDecorateInitModeINTEL(SPIRVEntry *TheTarget,
850+
InitializationModeQualifier Trigger)
851+
: SPIRVDecorateInitModeINTELBase(DecorationInitModeINTEL, TheTarget,
852+
Trigger) {}
853+
795854
static void encodeLiterals(SPIRVEncoder &Encoder,
796855
const std::vector<SPIRVWord> &Literals) {
797856
#ifdef _SPIRV_SUPPORT_TEXT_FMT
@@ -815,6 +874,44 @@ class SPIRVDecorateInitModeINTEL : public SPIRVDecorate {
815874
}
816875
};
817876

877+
class SPIRVDecorateInitModeINTELLegacy : public SPIRVDecorateInitModeINTELBase {
878+
public:
879+
SPIRVDecorateInitModeINTELLegacy(SPIRVEntry *TheTarget,
880+
InitializationModeQualifier Trigger)
881+
: SPIRVDecorateInitModeINTELBase(internal::DecorationInitModeINTEL,
882+
TheTarget, Trigger) {}
883+
884+
static void encodeLiterals(SPIRVEncoder &Encoder,
885+
const std::vector<SPIRVWord> &Literals) {
886+
#ifdef _SPIRV_SUPPORT_TEXT_FMT
887+
if (SPIRVUseTextFormat) {
888+
Encoder << Literals.back();
889+
} else
890+
#endif
891+
Encoder << Literals;
892+
}
893+
894+
static void decodeLiterals(SPIRVDecoder &Decoder,
895+
std::vector<SPIRVWord> &Literals) {
896+
#ifdef _SPIRV_SUPPORT_TEXT_FMT
897+
if (SPIRVUseTextFormat) {
898+
SPIRVWord Q;
899+
Decoder >> Q;
900+
Literals.back() = Q;
901+
} else
902+
#endif
903+
Decoder >> Literals;
904+
}
905+
};
906+
907+
class SPIRVDecorateImplementInCSRINTEL : public SPIRVDecorate {
908+
public:
909+
// Complete constructor for SPIRVImplementInCSRINTEL
910+
SPIRVDecorateImplementInCSRINTEL(SPIRVEntry *TheTarget, SPIRVWord Value)
911+
: SPIRVDecorate(spv::internal::DecorationImplementInCSRINTEL, TheTarget,
912+
Value) {}
913+
};
914+
818915
class SPIRVDecorateImplementInRegisterMapINTEL : public SPIRVDecorate {
819916
public:
820917
// Complete constructor for SPIRVImplementInCSRINTEL

lib/SPIRV/libSPIRV/SPIRVEnum.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,12 @@ template <> inline void SPIRVMap<Decoration, SPIRVCapVec>::init() {
472472
{CapabilityFPGAInvocationPipeliningAttributesINTEL});
473473
ADD_VEC_INIT(internal::DecorationRuntimeAlignedINTEL,
474474
{CapabilityRuntimeAlignedAttributeINTEL});
475+
ADD_VEC_INIT(internal::DecorationHostAccessINTEL,
476+
{internal::CapabilityGlobalVariableDecorationsINTEL});
477+
ADD_VEC_INIT(internal::DecorationInitModeINTEL,
478+
{internal::CapabilityGlobalVariableDecorationsINTEL});
479+
ADD_VEC_INIT(internal::DecorationImplementInCSRINTEL,
480+
{internal::CapabilityGlobalVariableDecorationsINTEL});
475481
ADD_VEC_INIT(DecorationHostAccessINTEL,
476482
{CapabilityGlobalVariableHostAccessINTEL});
477483
ADD_VEC_INIT(DecorationInitModeINTEL,

lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,9 @@ template <> inline void SPIRVMap<Decoration, std::string>::init() {
210210
// From spirv_internal.hpp
211211
add(internal::DecorationCallableFunctionINTEL, "CallableFunctionINTEL");
212212
add(internal::DecorationRuntimeAlignedINTEL, "RuntimeAlignedINTEL");
213+
add(internal::DecorationHostAccessINTEL, "HostAccessINTEL");
214+
add(internal::DecorationInitModeINTEL, "InitModeINTEL");
215+
add(internal::DecorationImplementInCSRINTEL, "ImplementInCSRINTEL");
213216
add(internal::DecorationArgumentAttributeINTEL, "ArgumentAttributeINTEL");
214217
add(internal::DecorationCacheControlLoadINTEL, "CacheControlLoadINTEL");
215218
add(internal::DecorationCacheControlStoreINTEL, "CacheControlStoreINTEL");
@@ -640,6 +643,8 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
640643
add(internal::CapabilityBfloat16ConversionINTEL, "Bfloat16ConversionINTEL");
641644
add(internal::CapabilityJointMatrixINTEL, "JointMatrixINTEL");
642645
add(internal::CapabilityHWThreadQueryINTEL, "HWThreadQueryINTEL");
646+
add(internal::CapabilityGlobalVariableDecorationsINTEL,
647+
"GlobalVariableDecorationsINTEL");
643648
add(internal::CapabilityComplexFloatMulDivINTEL, "ComplexFloatMulDivINTEL");
644649
add(internal::CapabilityMaskedGatherScatterINTEL, "MaskedGatherScatterINTEL");
645650
add(internal::CapabilityTensorFloat32RoundingINTEL,

lib/SPIRV/libSPIRV/spirv_internal.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ enum InternalOp {
8686
enum InternalDecoration {
8787
IDecRuntimeAlignedINTEL = 5940,
8888
IDecCallableFunctionINTEL = 6087,
89+
IDecHostAccessINTEL = 6147,
90+
IDecInitModeINTEL = 6148,
91+
IDecImplementInCSRINTEL = 6149,
8992
IDecArgumentAttributeINTEL = 6409,
9093
IDecCacheControlLoadINTEL = 6442,
9194
IDecCacheControlStoreINTEL = 6443
@@ -252,6 +255,12 @@ constexpr Decoration DecorationCallableFunctionINTEL =
252255
static_cast<Decoration>(IDecCallableFunctionINTEL);
253256
constexpr Decoration DecorationRuntimeAlignedINTEL =
254257
static_cast<Decoration>(IDecRuntimeAlignedINTEL);
258+
constexpr Decoration DecorationHostAccessINTEL =
259+
static_cast<Decoration>(IDecHostAccessINTEL);
260+
constexpr Decoration DecorationInitModeINTEL =
261+
static_cast<Decoration>(IDecInitModeINTEL);
262+
constexpr Decoration DecorationImplementInCSRINTEL =
263+
static_cast<Decoration>(IDecImplementInCSRINTEL);
255264
constexpr Decoration DecorationArgumentAttributeINTEL =
256265
static_cast<Decoration>(IDecArgumentAttributeINTEL);
257266
constexpr Decoration DecorationCacheControlLoadINTEL =

spirv-headers-tag.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
88bc5e321c2839707df8b1ab534e243e00744177
1+
cca08c63cefa129d082abca0302adcb81610b465
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
; RUN: llvm-as %s -o %t.bc
2+
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_INTEL_global_variable_decorations -o %t.spv
3+
; RUN: llvm-spirv %t.spv -to-text -o %t.spt
4+
; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV
5+
6+
; RUN: llvm-spirv -r %t.spv --spirv-target-env=SPV-IR -o %t.rev.bc
7+
; RUN: llvm-dis %t.rev.bc
8+
; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-SPV-IR
9+
10+
; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
11+
; RUN: llvm-dis %t.rev.bc
12+
; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
13+
14+
; Expected to fail - the decorations require enabled extension to be translated.
15+
; RUN: not llvm-spirv %t.bc -o %t.spv
16+
17+
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
18+
target triple = "spir64-unknown-unknown"
19+
20+
@int_var = addrspace(1) global i32 42, !spirv.Decorations !1
21+
@float_var = addrspace(1) global float 1.0, !spirv.Decorations !6
22+
@bool_var = addrspace(1) global i1 0, !spirv.Decorations !9
23+
24+
; CHECK-SPIRV: Capability GlobalVariableDecorationsINTEL
25+
; CHECK-SPIRV: Extension "SPV_INTEL_global_variable_decorations"
26+
; CHECK-SPIRV: Decorate [[#INT_VAR_ID:]] HostAccessINTEL 1 "IntVarName"
27+
; CHECK-SPIRV: Decorate [[#INT_VAR_ID]] ImplementInCSRINTEL 1
28+
; CHECK-SPIRV: Decorate [[#INT_VAR_ID]] InitModeINTEL 0
29+
30+
; CHECK-SPIRV: Decorate [[#FLOAT_VAR_ID:]] ImplementInCSRINTEL 1
31+
; CHECK-SPIRV: Decorate [[#FLOAT_VAR_ID]] InitModeINTEL 1
32+
33+
; CHECK-SPIRV: Decorate [[#BOOL_VAR_ID:]] HostAccessINTEL 3 "BoolVarName"
34+
; CHECK-SPIRV: Decorate [[#BOOL_VAR_ID]] ImplementInCSRINTEL 0
35+
; CHECK-SPIRV: Decorate [[#BOOL_VAR_ID]] InitModeINTEL 0
36+
37+
; 5 is a global storage
38+
; CHECK-SPIRV: Variable [[#]] [[#INT_VAR_ID]] 5
39+
; CHECK-SPIRV: Variable [[#]] [[#FLOAT_VAR_ID]] 5
40+
; CHECK-SPIRV: Variable [[#]] [[#BOOL_VAR_ID]] 5
41+
42+
!1 = !{!2, !3, !4}
43+
!2 = !{i32 6147, i32 1, !"IntVarName"} ; HostAccessINTEL 1 "IntVarName"
44+
!3 = !{i32 6149, i1 true} ; ImplementInCSRINTEL = true
45+
!4 = !{i32 6148, i32 0} ; InitModeINTEL = 0
46+
!5 = !{i32 6148, i32 1} ; InitModeINTEL = 1
47+
!6 = !{!3, !5}
48+
!7 = !{i32 6147, i32 3, !"BoolVarName"} ; HostAccessINTEL 3 "BoolVarName"
49+
!8 = !{i32 6149, i1 false} ; ImplementInCSRINTEL = false
50+
!9 = !{!7, !8, !4}
51+
52+
; CHECK-SPV-IR: @int_var = addrspace(1) global i32 42, !spirv.Decorations ![[#INT_VAR_DEC:]]
53+
; CHECK-SPV-IR: @float_var = addrspace(1) global float 1.000000e+00, !spirv.Decorations ![[#FLOAT_VAR_DEC:]]
54+
; CHECK-SPV-IR: @bool_var = addrspace(1) global i1 false, !spirv.Decorations ![[#BOOL_VAR_DEC:]]
55+
56+
; CHECK-SPV-IR: ![[#INT_VAR_DEC]] = !{![[#]], ![[#MD_HOST_ACCESS_INTVAR:]], ![[#MD_INIT_0:]], ![[#MD_CSR_1:]]}
57+
; CHECK-SPV-IR: ![[#MD_HOST_ACCESS_INTVAR]] = !{i32 6147, i32 1, !"IntVarName"}
58+
; CHECK-SPV-IR: ![[#MD_INIT_0]] = !{i32 6148, i32 0}
59+
; CHECK-SPV-IR: ![[#MD_CSR_1]] = !{i32 6149, i32 1}
60+
; CHECK-SPV-IR: ![[#FLOAT_VAR_DEC]] = !{![[#]], ![[#MD_INIT_1:]], ![[#MD_CSR_1]]}
61+
; CHECK-SPV-IR: ![[#MD_INIT_1]] = !{i32 6148, i32 1}
62+
; CHECK-SPV-IR: ![[#BOOL_VAR_DEC]] = !{![[#]], ![[#MD_HOST_ACCESS_BOOLVAR:]], ![[#MD_INIT_0]], ![[#MD_CSR_0:]]}
63+
; CHECK-SPV-IR: ![[#MD_HOST_ACCESS_BOOLVAR]] = !{i32 6147, i32 3, !"BoolVarName"}
64+
; CHECK-SPV-IR: ![[#MD_CSR_0]] = !{i32 6149, i32 0}
65+
66+
67+
; CHECK-LLVM-NOT: @int_var = {{.*}}, !spirv.Decorations ![[#]]
68+
; CHECK-LLVM-NOT: @float_var = {{.*}}, !spirv.Decorations ![[#]]
69+
; CHECK-LLVM-NOT: @bool_var = {{.*}}, !spirv.Decorations ![[#]]
70+
71+
; CHECK-LLVM: @int_var = addrspace(1) global i32 42
72+
; CHECK-LLVM: @float_var = addrspace(1) global float 1.000000e+00
73+
; CHECK-LLVM: @bool_var = addrspace(1) global i1 false

0 commit comments

Comments
 (0)