summaryrefslogtreecommitdiff
path: root/lib/SPIRV/libSPIRV/SPIRVModule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/SPIRV/libSPIRV/SPIRVModule.cpp')
-rw-r--r--lib/SPIRV/libSPIRV/SPIRVModule.cpp440
1 files changed, 220 insertions, 220 deletions
diff --git a/lib/SPIRV/libSPIRV/SPIRVModule.cpp b/lib/SPIRV/libSPIRV/SPIRVModule.cpp
index 67ecaf1..0a24dbf 100644
--- a/lib/SPIRV/libSPIRV/SPIRVModule.cpp
+++ b/lib/SPIRV/libSPIRV/SPIRVModule.cpp
@@ -70,281 +70,281 @@ public:
// OpenCL memory model requires Kernel capability
setMemoryModel(MemoryModelOpenCL);
}
- virtual ~SPIRVModuleImpl();
+ ~SPIRVModuleImpl() override;
// Object query functions
- bool exist(SPIRVId) const;
- bool exist(SPIRVId, SPIRVEntry **) const;
+ bool exist(SPIRVId) const override;
+ bool exist(SPIRVId, SPIRVEntry **) const override;
SPIRVId getId(SPIRVId Id = SPIRVID_INVALID, unsigned Increment = 1);
- virtual SPIRVEntry *getEntry(SPIRVId Id) const;
- bool hasDebugInfo() const { return !StringVec.empty(); }
+ SPIRVEntry *getEntry(SPIRVId Id) const override;
+ bool hasDebugInfo() const override { return !StringVec.empty(); }
// Error handling functions
- SPIRVErrorLog &getErrorLog() { return ErrLog; }
- SPIRVErrorCode getError(std::string &ErrMsg) {
+ SPIRVErrorLog &getErrorLog() override { return ErrLog; }
+ SPIRVErrorCode getError(std::string &ErrMsg) override {
return ErrLog.getError(ErrMsg);
}
// Module query functions
- SPIRVAddressingModelKind getAddressingModel() { return AddrModel; }
- SPIRVExtInstSetKind getBuiltinSet(SPIRVId SetId) const;
- const SPIRVCapMap &getCapability() const { return CapMap; }
- bool hasCapability(SPIRVCapabilityKind Cap) const {
+ SPIRVAddressingModelKind getAddressingModel() override { return AddrModel; }
+ SPIRVExtInstSetKind getBuiltinSet(SPIRVId SetId) const override;
+ const SPIRVCapMap &getCapability() const override { return CapMap; }
+ bool hasCapability(SPIRVCapabilityKind Cap) const override {
return CapMap.find(Cap) != CapMap.end();
}
- std::set<std::string> &getExtension() { return SPIRVExt; }
- SPIRVFunction *getFunction(unsigned I) const { return FuncVec[I]; }
- SPIRVVariable *getVariable(unsigned I) const { return VariableVec[I]; }
- virtual SPIRVValue *getValue(SPIRVId TheId) const;
- virtual std::vector<SPIRVValue *>
- getValues(const std::vector<SPIRVId> &) const;
- virtual std::vector<SPIRVId> getIds(const std::vector<SPIRVEntry *> &) const;
- virtual std::vector<SPIRVId> getIds(const std::vector<SPIRVValue *> &) const;
- virtual SPIRVType *getValueType(SPIRVId TheId) const;
- virtual std::vector<SPIRVType *>
- getValueTypes(const std::vector<SPIRVId> &) const;
- SPIRVMemoryModelKind getMemoryModel() const { return MemoryModel; }
- virtual SPIRVConstant *getLiteralAsConstant(unsigned Literal);
- unsigned getNumEntryPoints(SPIRVExecutionModelKind EM) const {
+ std::set<std::string> &getExtension() override { return SPIRVExt; }
+ SPIRVFunction *getFunction(unsigned I) const override { return FuncVec[I]; }
+ SPIRVVariable *getVariable(unsigned I) const override {
+ return VariableVec[I];
+ }
+ SPIRVValue *getValue(SPIRVId TheId) const override;
+ std::vector<SPIRVValue *>
+ getValues(const std::vector<SPIRVId> &) const override;
+ std::vector<SPIRVId> getIds(const std::vector<SPIRVEntry *> &) const override;
+ std::vector<SPIRVId> getIds(const std::vector<SPIRVValue *> &) const override;
+ SPIRVType *getValueType(SPIRVId TheId) const override;
+ std::vector<SPIRVType *>
+ getValueTypes(const std::vector<SPIRVId> &) const override;
+ SPIRVMemoryModelKind getMemoryModel() const override { return MemoryModel; }
+ SPIRVConstant *getLiteralAsConstant(unsigned Literal) override;
+ unsigned getNumEntryPoints(SPIRVExecutionModelKind EM) const override {
auto Loc = EntryPointVec.find(EM);
if (Loc == EntryPointVec.end())
return 0;
return Loc->second.size();
}
- SPIRVFunction *getEntryPoint(SPIRVExecutionModelKind EM, unsigned I) const {
+ SPIRVFunction *getEntryPoint(SPIRVExecutionModelKind EM,
+ unsigned I) const override {
auto Loc = EntryPointVec.find(EM);
if (Loc == EntryPointVec.end())
return nullptr;
assert(I < Loc->second.size());
return get<SPIRVFunction>(Loc->second[I]);
}
- unsigned getNumFunctions() const { return FuncVec.size(); }
- unsigned getNumVariables() const { return VariableVec.size(); }
- SourceLanguage getSourceLanguage(SPIRVWord *Ver = nullptr) const {
+ unsigned getNumFunctions() const override { return FuncVec.size(); }
+ unsigned getNumVariables() const override { return VariableVec.size(); }
+ SourceLanguage getSourceLanguage(SPIRVWord *Ver = nullptr) const override {
if (Ver)
*Ver = SrcLangVer;
return SrcLang;
}
- std::set<std::string> &getSourceExtension() { return SrcExtension; }
- bool isEntryPoint(SPIRVExecutionModelKind, SPIRVId EP) const;
- unsigned short getGeneratorId() const { return GeneratorId; }
- unsigned short getGeneratorVer() const { return GeneratorVer; }
- SPIRVWord getSPIRVVersion() const { return SPIRVVersion; }
+ std::set<std::string> &getSourceExtension() override { return SrcExtension; }
+ bool isEntryPoint(SPIRVExecutionModelKind, SPIRVId EP) const override;
+ unsigned short getGeneratorId() const override { return GeneratorId; }
+ unsigned short getGeneratorVer() const override { return GeneratorVer; }
+ SPIRVWord getSPIRVVersion() const override { return SPIRVVersion; }
// Module changing functions
- bool importBuiltinSet(const std::string &, SPIRVId *);
- bool importBuiltinSetWithId(const std::string &, SPIRVId);
- void optimizeDecorates();
- void setAddressingModel(SPIRVAddressingModelKind AM) { AddrModel = AM; }
- void setAlignment(SPIRVValue *, SPIRVWord);
- void setMemoryModel(SPIRVMemoryModelKind MM) {
+ bool importBuiltinSet(const std::string &, SPIRVId *) override;
+ bool importBuiltinSetWithId(const std::string &, SPIRVId) override;
+ void optimizeDecorates() override;
+ void setAddressingModel(SPIRVAddressingModelKind AM) override {
+ AddrModel = AM;
+ }
+ void setAlignment(SPIRVValue *, SPIRVWord) override;
+ void setMemoryModel(SPIRVMemoryModelKind MM) override {
MemoryModel = MM;
if (MemoryModel == spv::MemoryModelOpenCL)
addCapability(CapabilityKernel);
}
- void setName(SPIRVEntry *E, const std::string &Name);
- void setSourceLanguage(SourceLanguage Lang, SPIRVWord Ver) {
+ void setName(SPIRVEntry *E, const std::string &Name) override;
+ void setSourceLanguage(SourceLanguage Lang, SPIRVWord Ver) override {
SrcLang = Lang;
SrcLangVer = Ver;
}
- void setGeneratorId(unsigned short Id) { GeneratorId = Id; }
- void setGeneratorVer(unsigned short Ver) { GeneratorVer = Ver; }
- void resolveUnknownStructFields();
+ void setGeneratorId(unsigned short Id) override { GeneratorId = Id; }
+ void setGeneratorVer(unsigned short Ver) override { GeneratorVer = Ver; }
+ void resolveUnknownStructFields() override;
void setSPIRVVersion(SPIRVWord Ver) override { SPIRVVersion = Ver; }
// Object creation functions
template <class T> void addTo(std::vector<T *> &V, SPIRVEntry *E);
- virtual SPIRVEntry *addEntry(SPIRVEntry *E);
- virtual SPIRVBasicBlock *addBasicBlock(SPIRVFunction *, SPIRVId);
- virtual SPIRVString *getString(const std::string &Str);
- virtual SPIRVMemberName *addMemberName(SPIRVTypeStruct *ST,
- SPIRVWord MemberNumber,
- const std::string &Name);
- virtual void addUnknownStructField(SPIRVTypeStruct *Struct, unsigned I,
- SPIRVId ID);
- virtual void addLine(SPIRVEntry *E, SPIRVId FileNameId, SPIRVWord Line,
- SPIRVWord Column);
- virtual const std::shared_ptr<const SPIRVLine> &getCurrentLine() const;
- virtual void setCurrentLine(const std::shared_ptr<const SPIRVLine> &Line);
- virtual void addCapability(SPIRVCapabilityKind);
- virtual void addCapabilityInternal(SPIRVCapabilityKind);
- virtual const SPIRVDecorateGeneric *addDecorate(SPIRVDecorateGeneric *);
- virtual SPIRVDecorationGroup *addDecorationGroup();
- virtual SPIRVDecorationGroup *addDecorationGroup(SPIRVDecorationGroup *Group);
- virtual SPIRVGroupDecorate *
+ SPIRVEntry *addEntry(SPIRVEntry *E) override;
+ SPIRVBasicBlock *addBasicBlock(SPIRVFunction *, SPIRVId) override;
+ SPIRVString *getString(const std::string &Str) override;
+ SPIRVMemberName *addMemberName(SPIRVTypeStruct *ST, SPIRVWord MemberNumber,
+ const std::string &Name) override;
+ void addUnknownStructField(SPIRVTypeStruct *Struct, unsigned I,
+ SPIRVId ID) override;
+ void addLine(SPIRVEntry *E, SPIRVId FileNameId, SPIRVWord Line,
+ SPIRVWord Column) override;
+ const std::shared_ptr<const SPIRVLine> &getCurrentLine() const override;
+ void setCurrentLine(const std::shared_ptr<const SPIRVLine> &Line) override;
+ void addCapability(SPIRVCapabilityKind) override;
+ void addCapabilityInternal(SPIRVCapabilityKind) override;
+ const SPIRVDecorateGeneric *addDecorate(SPIRVDecorateGeneric *) override;
+ SPIRVDecorationGroup *addDecorationGroup() override;
+ SPIRVDecorationGroup *
+ addDecorationGroup(SPIRVDecorationGroup *Group) override;
+ SPIRVGroupDecorate *
addGroupDecorate(SPIRVDecorationGroup *Group,
- const std::vector<SPIRVEntry *> &Targets);
- virtual SPIRVGroupDecorateGeneric *
- addGroupDecorateGeneric(SPIRVGroupDecorateGeneric *GDec);
- virtual SPIRVGroupMemberDecorate *
+ const std::vector<SPIRVEntry *> &Targets) override;
+ SPIRVGroupDecorateGeneric *
+ addGroupDecorateGeneric(SPIRVGroupDecorateGeneric *GDec) override;
+ SPIRVGroupMemberDecorate *
addGroupMemberDecorate(SPIRVDecorationGroup *Group,
- const std::vector<SPIRVEntry *> &Targets);
- virtual void addEntryPoint(SPIRVExecutionModelKind ExecModel,
- SPIRVId EntryPoint);
- virtual SPIRVForward *addForward(SPIRVType *Ty);
- virtual SPIRVForward *addForward(SPIRVId, SPIRVType *Ty);
- virtual SPIRVFunction *addFunction(SPIRVFunction *);
- virtual SPIRVFunction *addFunction(SPIRVTypeFunction *, SPIRVId);
- virtual SPIRVEntry *replaceForward(SPIRVForward *, SPIRVEntry *);
- virtual void eraseInstruction(SPIRVInstruction *, SPIRVBasicBlock *);
+ const std::vector<SPIRVEntry *> &Targets) override;
+ void addEntryPoint(SPIRVExecutionModelKind ExecModel,
+ SPIRVId EntryPoint) override;
+ SPIRVForward *addForward(SPIRVType *Ty) override;
+ SPIRVForward *addForward(SPIRVId, SPIRVType *Ty) override;
+ SPIRVFunction *addFunction(SPIRVFunction *) override;
+ SPIRVFunction *addFunction(SPIRVTypeFunction *, SPIRVId) override;
+ SPIRVEntry *replaceForward(SPIRVForward *, SPIRVEntry *) override;
+ void eraseInstruction(SPIRVInstruction *, SPIRVBasicBlock *) override;
// Type creation functions
template <class T> T *addType(T *Ty);
- virtual SPIRVTypeArray *addArrayType(SPIRVType *, SPIRVConstant *);
- virtual SPIRVTypeBool *addBoolType();
- virtual SPIRVTypeFloat *addFloatType(unsigned BitWidth);
- virtual SPIRVTypeFunction *addFunctionType(SPIRVType *,
- const std::vector<SPIRVType *> &);
- virtual SPIRVTypeInt *addIntegerType(unsigned BitWidth);
- virtual SPIRVTypeOpaque *addOpaqueType(const std::string &);
- virtual SPIRVTypePointer *addPointerType(SPIRVStorageClassKind, SPIRVType *);
- virtual SPIRVTypeImage *addImageType(SPIRVType *,
- const SPIRVTypeImageDescriptor &);
- virtual SPIRVTypeImage *addImageType(SPIRVType *,
- const SPIRVTypeImageDescriptor &,
- SPIRVAccessQualifierKind);
- virtual SPIRVTypeSampler *addSamplerType();
- virtual SPIRVTypePipeStorage *addPipeStorageType();
- virtual SPIRVTypeSampledImage *addSampledImageType(SPIRVTypeImage *T);
- virtual SPIRVTypeStruct *openStructType(unsigned, const std::string &);
- virtual void closeStructType(SPIRVTypeStruct *T, bool);
- virtual SPIRVTypeVector *addVectorType(SPIRVType *, SPIRVWord);
- virtual SPIRVType *addOpaqueGenericType(Op);
- virtual SPIRVTypeDeviceEvent *addDeviceEventType();
- virtual SPIRVTypeQueue *addQueueType();
- virtual SPIRVTypePipe *addPipeType();
- virtual SPIRVTypeVoid *addVoidType();
- virtual void createForwardPointers();
+ SPIRVTypeArray *addArrayType(SPIRVType *, SPIRVConstant *) override;
+ SPIRVTypeBool *addBoolType() override;
+ SPIRVTypeFloat *addFloatType(unsigned BitWidth) override;
+ SPIRVTypeFunction *addFunctionType(SPIRVType *,
+ const std::vector<SPIRVType *> &) override;
+ SPIRVTypeInt *addIntegerType(unsigned BitWidth) override;
+ SPIRVTypeOpaque *addOpaqueType(const std::string &) override;
+ SPIRVTypePointer *addPointerType(SPIRVStorageClassKind, SPIRVType *) override;
+ SPIRVTypeImage *addImageType(SPIRVType *,
+ const SPIRVTypeImageDescriptor &) override;
+ SPIRVTypeImage *addImageType(SPIRVType *, const SPIRVTypeImageDescriptor &,
+ SPIRVAccessQualifierKind) override;
+ SPIRVTypeSampler *addSamplerType() override;
+ SPIRVTypePipeStorage *addPipeStorageType() override;
+ SPIRVTypeSampledImage *addSampledImageType(SPIRVTypeImage *T) override;
+ SPIRVTypeStruct *openStructType(unsigned, const std::string &) override;
+ void closeStructType(SPIRVTypeStruct *T, bool) override;
+ SPIRVTypeVector *addVectorType(SPIRVType *, SPIRVWord) override;
+ SPIRVType *addOpaqueGenericType(Op) override;
+ SPIRVTypeDeviceEvent *addDeviceEventType() override;
+ SPIRVTypeQueue *addQueueType() override;
+ SPIRVTypePipe *addPipeType() override;
+ SPIRVTypeVoid *addVoidType() override;
+ void createForwardPointers() override;
// Constant creation functions
- virtual SPIRVInstruction *addBranchInst(SPIRVLabel *, SPIRVBasicBlock *);
- virtual SPIRVInstruction *addBranchConditionalInst(SPIRVValue *, SPIRVLabel *,
- SPIRVLabel *,
- SPIRVBasicBlock *);
- virtual SPIRVValue *addCompositeConstant(SPIRVType *,
- const std::vector<SPIRVValue *> &);
- virtual SPIRVValue *addConstant(SPIRVValue *);
- virtual SPIRVValue *addConstant(SPIRVType *, uint64_t);
- virtual SPIRVValue *addDoubleConstant(SPIRVTypeFloat *, double);
- virtual SPIRVValue *addFloatConstant(SPIRVTypeFloat *, float);
- virtual SPIRVValue *addIntegerConstant(SPIRVTypeInt *, uint64_t);
- virtual SPIRVValue *addNullConstant(SPIRVType *);
- virtual SPIRVValue *addUndef(SPIRVType *TheType);
- virtual SPIRVValue *addSamplerConstant(SPIRVType *TheType, SPIRVWord AddrMode,
- SPIRVWord ParametricMode,
- SPIRVWord FilterMode);
- virtual SPIRVValue *addPipeStorageConstant(SPIRVType *TheType,
- SPIRVWord PacketSize,
- SPIRVWord PacketAlign,
- SPIRVWord Capacity);
+ SPIRVInstruction *addBranchInst(SPIRVLabel *, SPIRVBasicBlock *) override;
+ SPIRVInstruction *addBranchConditionalInst(SPIRVValue *, SPIRVLabel *,
+ SPIRVLabel *,
+ SPIRVBasicBlock *) override;
+ SPIRVValue *addCompositeConstant(SPIRVType *,
+ const std::vector<SPIRVValue *> &) override;
+ SPIRVValue *addConstant(SPIRVValue *) override;
+ SPIRVValue *addConstant(SPIRVType *, uint64_t) override;
+ SPIRVValue *addDoubleConstant(SPIRVTypeFloat *, double) override;
+ SPIRVValue *addFloatConstant(SPIRVTypeFloat *, float) override;
+ SPIRVValue *addIntegerConstant(SPIRVTypeInt *, uint64_t) override;
+ SPIRVValue *addNullConstant(SPIRVType *) override;
+ SPIRVValue *addUndef(SPIRVType *TheType) override;
+ SPIRVValue *addSamplerConstant(SPIRVType *TheType, SPIRVWord AddrMode,
+ SPIRVWord ParametricMode,
+ SPIRVWord FilterMode) override;
+ SPIRVValue *addPipeStorageConstant(SPIRVType *TheType, SPIRVWord PacketSize,
+ SPIRVWord PacketAlign,
+ SPIRVWord Capacity) override;
// Instruction creation functions
- virtual SPIRVInstruction *addPtrAccessChainInst(SPIRVType *, SPIRVValue *,
- std::vector<SPIRVValue *>,
- SPIRVBasicBlock *, bool);
- virtual SPIRVInstruction *
- addAsyncGroupCopy(SPIRVValue *Scope, SPIRVValue *Dest, SPIRVValue *Src,
- SPIRVValue *NumElems, SPIRVValue *Stride, SPIRVValue *Event,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addExtInst(SPIRVType *, SPIRVWord, SPIRVWord,
- const std::vector<SPIRVWord> &,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *addExtInst(SPIRVType *, SPIRVWord, SPIRVWord,
- const std::vector<SPIRVValue *> &,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *addBinaryInst(Op, SPIRVType *, SPIRVValue *,
- SPIRVValue *, SPIRVBasicBlock *);
- virtual SPIRVInstruction *addCallInst(SPIRVFunction *,
- const std::vector<SPIRVWord> &,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *addCmpInst(Op, SPIRVType *, SPIRVValue *,
- SPIRVValue *, SPIRVBasicBlock *);
- virtual SPIRVInstruction *
- addLoadInst(SPIRVValue *, const std::vector<SPIRVWord> &, SPIRVBasicBlock *);
- virtual SPIRVInstruction *addPhiInst(SPIRVType *, std::vector<SPIRVValue *>,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *
- addCompositeConstructInst(SPIRVType *, const std::vector<SPIRVId> &,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *
- addCompositeExtractInst(SPIRVType *, SPIRVValue *,
- const std::vector<SPIRVWord> &, SPIRVBasicBlock *);
- virtual SPIRVInstruction *
+ SPIRVInstruction *addPtrAccessChainInst(SPIRVType *, SPIRVValue *,
+ std::vector<SPIRVValue *>,
+ SPIRVBasicBlock *, bool) override;
+ SPIRVInstruction *addAsyncGroupCopy(SPIRVValue *Scope, SPIRVValue *Dest,
+ SPIRVValue *Src, SPIRVValue *NumElems,
+ SPIRVValue *Stride, SPIRVValue *Event,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addExtInst(SPIRVType *, SPIRVWord, SPIRVWord,
+ const std::vector<SPIRVWord> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addExtInst(SPIRVType *, SPIRVWord, SPIRVWord,
+ const std::vector<SPIRVValue *> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addBinaryInst(Op, SPIRVType *, SPIRVValue *, SPIRVValue *,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addCallInst(SPIRVFunction *, const std::vector<SPIRVWord> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addCmpInst(Op, SPIRVType *, SPIRVValue *, SPIRVValue *,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addLoadInst(SPIRVValue *, const std::vector<SPIRVWord> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addPhiInst(SPIRVType *, std::vector<SPIRVValue *>,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addCompositeConstructInst(SPIRVType *,
+ const std::vector<SPIRVId> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addCompositeExtractInst(SPIRVType *, SPIRVValue *,
+ const std::vector<SPIRVWord> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *
addCompositeInsertInst(SPIRVValue *Object, SPIRVValue *Composite,
const std::vector<SPIRVWord> &Indices,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addCopyObjectInst(SPIRVType *TheType,
- SPIRVValue *Operand,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addCopyMemoryInst(SPIRVValue *, SPIRVValue *,
- const std::vector<SPIRVWord> &,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *
- addCopyMemorySizedInst(SPIRVValue *, SPIRVValue *, SPIRVValue *,
- const std::vector<SPIRVWord> &, SPIRVBasicBlock *);
- virtual SPIRVInstruction *addControlBarrierInst(SPIRVValue *ExecKind,
- SPIRVValue *MemKind,
- SPIRVValue *MemSema,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addGroupInst(Op OpCode, SPIRVType *Type,
- Scope Scope,
- const std::vector<SPIRVValue *> &Ops,
- SPIRVBasicBlock *BB);
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addCopyObjectInst(SPIRVType *TheType, SPIRVValue *Operand,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addCopyMemoryInst(SPIRVValue *, SPIRVValue *,
+ const std::vector<SPIRVWord> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addCopyMemorySizedInst(SPIRVValue *, SPIRVValue *,
+ SPIRVValue *,
+ const std::vector<SPIRVWord> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addControlBarrierInst(SPIRVValue *ExecKind,
+ SPIRVValue *MemKind,
+ SPIRVValue *MemSema,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addGroupInst(Op OpCode, SPIRVType *Type, Scope Scope,
+ const std::vector<SPIRVValue *> &Ops,
+ SPIRVBasicBlock *BB) override;
virtual SPIRVInstruction *addInstruction(SPIRVInstruction *Inst,
SPIRVBasicBlock *BB);
- virtual SPIRVInstTemplateBase *addInstTemplate(Op OC, SPIRVBasicBlock *BB,
- SPIRVType *Ty);
- virtual SPIRVInstTemplateBase *
- addInstTemplate(Op OC, const std::vector<SPIRVWord> &Ops, SPIRVBasicBlock *BB,
- SPIRVType *Ty);
- virtual SPIRVInstruction *addLifetimeInst(Op OC, SPIRVValue *Object,
- SPIRVWord Size,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *
- addMemoryBarrierInst(Scope ScopeKind, SPIRVWord MemFlag, SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addUnreachableInst(SPIRVBasicBlock *);
- virtual SPIRVInstruction *addReturnInst(SPIRVBasicBlock *);
- virtual SPIRVInstruction *addReturnValueInst(SPIRVValue *, SPIRVBasicBlock *);
- virtual SPIRVInstruction *addSelectInst(SPIRVValue *, SPIRVValue *,
- SPIRVValue *, SPIRVBasicBlock *);
- virtual SPIRVInstruction *addLoopMergeInst(SPIRVId MergeBlock,
- SPIRVId ContinueTarget,
- SPIRVWord LoopControl,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addSelectionMergeInst(SPIRVId MergeBlock,
- SPIRVWord SelectionControl,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addStoreInst(SPIRVValue *, SPIRVValue *,
- const std::vector<SPIRVWord> &,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *addSwitchInst(
+ SPIRVInstTemplateBase *addInstTemplate(Op OC, SPIRVBasicBlock *BB,
+ SPIRVType *Ty) override;
+ SPIRVInstTemplateBase *addInstTemplate(Op OC,
+ const std::vector<SPIRVWord> &Ops,
+ SPIRVBasicBlock *BB,
+ SPIRVType *Ty) override;
+ SPIRVInstruction *addLifetimeInst(Op OC, SPIRVValue *Object, SPIRVWord Size,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addMemoryBarrierInst(Scope ScopeKind, SPIRVWord MemFlag,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addUnreachableInst(SPIRVBasicBlock *) override;
+ SPIRVInstruction *addReturnInst(SPIRVBasicBlock *) override;
+ SPIRVInstruction *addReturnValueInst(SPIRVValue *,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addSelectInst(SPIRVValue *, SPIRVValue *, SPIRVValue *,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addLoopMergeInst(SPIRVId MergeBlock, SPIRVId ContinueTarget,
+ SPIRVWord LoopControl,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addSelectionMergeInst(SPIRVId MergeBlock,
+ SPIRVWord SelectionControl,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addStoreInst(SPIRVValue *, SPIRVValue *,
+ const std::vector<SPIRVWord> &,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addSwitchInst(
SPIRVValue *, SPIRVBasicBlock *,
const std::vector<std::pair<std::vector<SPIRVWord>, SPIRVBasicBlock *>> &,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *addFModInst(SPIRVType *TheType, SPIRVId TheDividend,
- SPIRVId TheDivisor,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addVectorTimesScalarInst(SPIRVType *TheType,
- SPIRVId TheVector,
- SPIRVId TheScalar,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *addUnaryInst(Op, SPIRVType *, SPIRVValue *,
- SPIRVBasicBlock *);
- virtual SPIRVInstruction *addVariable(SPIRVType *, bool, SPIRVLinkageTypeKind,
- SPIRVValue *, const std::string &,
- SPIRVStorageClassKind,
- SPIRVBasicBlock *);
- virtual SPIRVValue *
- addVectorShuffleInst(SPIRVType *Type, SPIRVValue *Vec1, SPIRVValue *Vec2,
- const std::vector<SPIRVWord> &Components,
- SPIRVBasicBlock *BB);
- virtual SPIRVInstruction *
- addVectorExtractDynamicInst(SPIRVValue *, SPIRVValue *, SPIRVBasicBlock *);
- virtual SPIRVInstruction *addVectorInsertDynamicInst(SPIRVValue *,
- SPIRVValue *,
- SPIRVValue *,
- SPIRVBasicBlock *);
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addFModInst(SPIRVType *TheType, SPIRVId TheDividend,
+ SPIRVId TheDivisor,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addVectorTimesScalarInst(SPIRVType *TheType,
+ SPIRVId TheVector,
+ SPIRVId TheScalar,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addUnaryInst(Op, SPIRVType *, SPIRVValue *,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addVariable(SPIRVType *, bool, SPIRVLinkageTypeKind,
+ SPIRVValue *, const std::string &,
+ SPIRVStorageClassKind,
+ SPIRVBasicBlock *) override;
+ SPIRVValue *addVectorShuffleInst(SPIRVType *Type, SPIRVValue *Vec1,
+ SPIRVValue *Vec2,
+ const std::vector<SPIRVWord> &Components,
+ SPIRVBasicBlock *BB) override;
+ SPIRVInstruction *addVectorExtractDynamicInst(SPIRVValue *, SPIRVValue *,
+ SPIRVBasicBlock *) override;
+ SPIRVInstruction *addVectorInsertDynamicInst(SPIRVValue *, SPIRVValue *,
+ SPIRVValue *,
+ SPIRVBasicBlock *) override;
// I/O functions
friend spv_ostream &operator<<(spv_ostream &O, SPIRVModule &M);