Skip to content

Commit 3605a56

Browse files
aratajewsys_zuul
authored andcommitted
Fix crash if specialization constant is not specialized by API call
Change-Id: Ifd9dd78c4f1fb9a589be8cce078dc1294b2e7b50
1 parent 6e00c51 commit 3605a56

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

IGC/AdaptorOCL/SPIRV/SPIRVReader.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2174,7 +2174,8 @@ SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function *F,
21742174
if(BV->hasDecorate(DecorationSpecId)) {
21752175
IGC_ASSERT_EXIT(OC == OpSpecConstant && "Only SpecConstants can be specialized!");
21762176
SPIRVWord specid = *BV->getDecorate(DecorationSpecId).begin();
2177-
V = BM->getSpecConstant(specid);
2177+
if(BM->isSpecConstantSpecialized(specid))
2178+
V = BM->getSpecConstant(specid);
21782179
}
21792180
switch(BT->getOpCode()) {
21802181
case OpTypeBool:

IGC/AdaptorOCL/SPIRV/libSPIRV/SPIRVModule.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,14 @@ class SPIRVModuleImpl : public SPIRVModule {
116116
SPIRVAddressingModelKind getAddressingModel() override { return AddrModel;}
117117
SPIRVExtInstSetKind getBuiltinSet(SPIRVId SetId) const override;
118118
const SPIRVCapSet &getCapability() const override { return CapSet;}
119-
bool isSpecConstant(SPIRVWord spec_id) const override {
119+
bool isSpecConstantSpecialized(SPIRVWord spec_id) const override {
120120
if(SCMap)
121121
return SCMap->find(spec_id) != SCMap->end();
122122
else
123123
return false;
124124
}
125125
uint64_t getSpecConstant(SPIRVWord spec_id) override {
126-
IGC_ASSERT_EXIT(isSpecConstant(spec_id) && "Specialization constant was not specialized!");
126+
IGC_ASSERT_EXIT(isSpecConstantSpecialized(spec_id) && "Specialization constant was not specialized!");
127127
return SCMap->at(spec_id);
128128
}
129129
void setSpecConstantMap(SPIRVSpecConstantMap *specConstants) override { SCMap = specConstants; }

IGC/AdaptorOCL/SPIRV/libSPIRV/SPIRVModule.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class SPIRVModule
146146
virtual SPIRVAddressingModelKind getAddressingModel() = 0;
147147
virtual const SPIRVCapSet &getCapability() const = 0;
148148
virtual SPIRVExtInstSetKind getBuiltinSet(SPIRVId) const = 0;
149-
virtual bool isSpecConstant(SPIRVWord) const = 0;
149+
virtual bool isSpecConstantSpecialized(SPIRVWord) const = 0;
150150
virtual uint64_t getSpecConstant(SPIRVWord) = 0;
151151
virtual void setSpecConstantMap(SPIRVSpecConstantMap *) = 0;
152152
virtual SPIRVFunction *getEntryPoint(SPIRVExecutionModelKind, unsigned) const = 0;

0 commit comments

Comments
 (0)