diff options
author | Pierre Moreau <dev@pmoreau.org> | 2018-04-17 17:58:36 +0200 |
---|---|---|
committer | Alexey Sotkin <alexey.sotkin@intel.com> | 2018-04-24 12:21:49 +0300 |
commit | 24ff9c0f0129c86339d273ba14ba3d9045d4b518 (patch) | |
tree | eddc73178e83aa1ba6fd522c32b0b26de1a1e286 | |
parent | aaa052985c2f0b2e44fe20ab7ff6b7e295b61907 (diff) |
Use clang-tidy to add missing “override” keywords
Command used:
/usr/share/clang/run-clang-tidy.py -fix -format -header-filter "(./include/SPIRV.h|./lib/SPIRV/Mangler/FunctionDescriptor.h|./lib/SPIRV/Mangler/ManglingUtils.h|./lib/SPIRV/Mangler/NameMangleAPI.h|./lib/SPIRV/Mangler/ParameterType.h|./lib/SPIRV/Mangler/Refcount.h|./lib/SPIRV/libSPIRV/libSPIRV.h|./lib/SPIRV/libSPIRV/SPIRVBasicBlock.h|./lib/SPIRV/libSPIRV/SPIRVDebug.h|./lib/SPIRV/libSPIRV/SPIRVDecorate.h|./lib/SPIRV/libSPIRV/SPIRVEntry.h|./lib/SPIRV/libSPIRV/SPIRVEnum.h|./lib/SPIRV/libSPIRV/SPIRVError.h|./lib/SPIRV/libSPIRV/SPIRVErrorEnum.h|./lib/SPIRV/libSPIRV/SPIRVExtInst.h|./lib/SPIRV/libSPIRV/SPIRVFunction.h|./lib/SPIRV/libSPIRV/SPIRVInstruction.h|./lib/SPIRV/libSPIRV/SPIRVIsValidEnum.h|./lib/SPIRV/libSPIRV/SPIRVModule.h|./lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h|./lib/SPIRV/libSPIRV/SPIRVOpCode.h|./lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h|./lib/SPIRV/libSPIRV/SPIRVStream.h|./lib/SPIRV/libSPIRV/SPIRVType.h|./lib/SPIRV/libSPIRV/SPIRVUtil.h|./lib/SPIRV/libSPIRV/SPIRVValue.h|./lib/SPIRV/runtime/OpenCL/inc/spirv.h|./lib/SPIRV/runtime/OpenCL/inc/spirv_convert.h|./lib/SPIRV/OCLUtil.h|./lib/SPIRV/OCLTypeToSPIRV.h|./lib/SPIRV/SPIRVInternal.h|./lib/SPIRV/SPIRVMDBuilder.h|./lib/SPIRV/SPIRVMDWalker.h|./lib/SPIRV/SPIRVWriterPass.h)" -checks="-*,modernize-use-override" `find . -iname "*.cpp"`
-rw-r--r-- | lib/SPIRV/Mangler/Mangler.cpp | 12 | ||||
-rw-r--r-- | lib/SPIRV/Mangler/ParameterType.h | 36 | ||||
-rw-r--r-- | lib/SPIRV/OCL20To12.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/OCL20ToSPIRV.cpp | 4 | ||||
-rw-r--r-- | lib/SPIRV/OCL21ToSPIRV.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/OCLTypeToSPIRV.h | 4 | ||||
-rw-r--r-- | lib/SPIRV/OCLUtil.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/SPIRVLowerBool.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/SPIRVLowerConstExpr.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/SPIRVLowerMemmove.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/SPIRVLowerOCLBlocks.cpp | 4 | ||||
-rw-r--r-- | lib/SPIRV/SPIRVRegularizeLLVM.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/SPIRVToOCL20.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/SPIRVWriter.cpp | 4 | ||||
-rw-r--r-- | lib/SPIRV/TransOCLMD.cpp | 2 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVBasicBlock.h | 8 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVDecorate.h | 22 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVEntry.h | 16 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVFunction.h | 10 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVInstruction.h | 148 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVModule.cpp | 440 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVType.h | 70 | ||||
-rw-r--r-- | lib/SPIRV/libSPIRV/SPIRVValue.h | 36 |
23 files changed, 419 insertions, 413 deletions
diff --git a/lib/SPIRV/Mangler/Mangler.cpp b/lib/SPIRV/Mangler/Mangler.cpp index 9fa9856..b080477 100644 --- a/lib/SPIRV/Mangler/Mangler.cpp +++ b/lib/SPIRV/Mangler/Mangler.cpp @@ -85,7 +85,7 @@ public: // // Visit methods // - MangleError visit(const PrimitiveType *t) { + MangleError visit(const PrimitiveType *t) override { MangleError me = MANGLE_SUCCESS; #if defined(SPIRV_SPIR20_MANGLING_REQUIREMENTS) m_stream << mangledPrimitiveString(t->getPrimitive()); @@ -109,7 +109,7 @@ public: return me; } - MangleError visit(const PointerType *p) { + MangleError visit(const PointerType *p) override { size_t fpos = m_stream.str().size(); std::string qualStr; MangleError me = MANGLE_SUCCESS; @@ -137,7 +137,7 @@ public: return me; } - MangleError visit(const VectorType *v) { + MangleError visit(const VectorType *v) override { size_t index = m_stream.str().size(); std::stringstream typeStr; typeStr << "Dv" << v->getLength() << "_"; @@ -153,7 +153,7 @@ public: return me; } - MangleError visit(const AtomicType *p) { + MangleError visit(const AtomicType *p) override { MangleError me = MANGLE_SUCCESS; size_t index = m_stream.str().size(); const char *typeStr = "U7_Atomic"; @@ -165,7 +165,7 @@ public: return me; } - MangleError visit(const BlockType *p) { + MangleError visit(const BlockType *p) override { m_stream << "U" << "13block_pointerFv"; if (p->getNumOfParams() == 0) @@ -181,7 +181,7 @@ public: return MANGLE_SUCCESS; } - MangleError visit(const UserDefinedType *pTy) { + MangleError visit(const UserDefinedType *pTy) override { std::string name = pTy->toString(); m_stream << name.size() << name; return MANGLE_SUCCESS; diff --git a/lib/SPIRV/Mangler/ParameterType.h b/lib/SPIRV/Mangler/ParameterType.h index f81422f..0c33f8b 100644 --- a/lib/SPIRV/Mangler/ParameterType.h +++ b/lib/SPIRV/Mangler/ParameterType.h @@ -166,17 +166,17 @@ struct PrimitiveType : public ParamType { /// When overridden in subclasses, preform a 'double dispatch' to the /// appropriate visit method in the given visitor. /// @param TypeVisitor type visitor. - MangleError accept(TypeVisitor *) const; + MangleError accept(TypeVisitor *) const override; /// @brief Returns a string representation of the underlying type. /// @return type as string. - std::string toString() const; + std::string toString() const override; /// @brief Returns true if given param type is equal to this type. /// @param ParamType given param type. /// @return true if given param type is equal to this type and false /// otherwise. - bool equals(const ParamType *) const; + bool equals(const ParamType *) const override; /// Non-Common Methods /// @@ -203,17 +203,17 @@ struct PointerType : public ParamType { /// When overridden in subclasses, preform a 'double dispatch' to the /// appropriate visit method in the given visitor. /// @param TypeVisitor type visitor - MangleError accept(TypeVisitor *) const; + MangleError accept(TypeVisitor *) const override; /// @brief Returns a string representation of the underlying type. /// @return type as string. - std::string toString() const; + std::string toString() const override; /// @brief Returns true if given param type is equal to this type. /// @param ParamType given param type. /// @return true if given param type is equal to this type and false /// otherwise. - bool equals(const ParamType *) const; + bool equals(const ParamType *) const override; /// Non-Common Methods /// @@ -264,17 +264,17 @@ struct VectorType : public ParamType { /// When overridden in subclasses, preform a 'double dispatch' to the /// appropriate visit method in the given visitor. /// @param TypeVisitor type visitor. - MangleError accept(TypeVisitor *) const; + MangleError accept(TypeVisitor *) const override; /// @brief Returns a string representation of the underlying type. /// @return type as string. - std::string toString() const; + std::string toString() const override; /// @brief Returns true if given param type is equal to this type. /// @param ParamType given param type. /// @return true if given param type is equal to this type and false /// otherwise. - bool equals(const ParamType *) const; + bool equals(const ParamType *) const override; /// Non-Common Methods /// @@ -307,16 +307,16 @@ struct AtomicType : public ParamType { /// When overridden in subclasses, preform a 'double dispatch' to the /// appropriate visit method in the given visitor. /// @param TypeVisitor type visitor - MangleError accept(TypeVisitor *) const; + MangleError accept(TypeVisitor *) const override; /// @brief returns a string representation of the underlying type. /// @return type as string - std::string toString() const; + std::string toString() const override; /// @brief returns true if given param type is equal to this type. /// @param ParamType given param type /// @return true if given param type is equal to this type and false otherwise - bool equals(const ParamType *) const; + bool equals(const ParamType *) const override; /// Non-Common Methods /// @@ -342,16 +342,16 @@ struct BlockType : public ParamType { /// When overridden in subclasses, preform a 'double dispatch' to the /// appropriate visit method in the given visitor. /// @param TypeVisitor type visitor - MangleError accept(TypeVisitor *) const; + MangleError accept(TypeVisitor *) const override; /// @brief returns a string representation of the underlying type. /// @return type as string - std::string toString() const; + std::string toString() const override; /// @brief returns true if given param type is equal to this type. /// @param ParamType given param type /// @return true if given param type is equal to this type and false otherwise - bool equals(const ParamType *) const; + bool equals(const ParamType *) const override; /// Non-Common Methods /// @@ -398,17 +398,17 @@ struct UserDefinedType : public ParamType { /// When overridden in subclasses, preform a 'double dispatch' to the /// appropriate visit method in the given visitor. /// @param TypeVisitor type visitor. - MangleError accept(TypeVisitor *) const; + MangleError accept(TypeVisitor *) const override; /// @brief Returns a string representation of the underlying type. /// @return type as string. - std::string toString() const; + std::string toString() const override; /// @brief Returns true if given param type is equal to this type. /// @param ParamType given param type. /// @return true if given param type is equal to this type and false /// otherwise. - bool equals(const ParamType *) const; + bool equals(const ParamType *) const override; protected: /// The name of the user defined type. diff --git a/lib/SPIRV/OCL20To12.cpp b/lib/SPIRV/OCL20To12.cpp index e1a92e0..3ad60d9 100644 --- a/lib/SPIRV/OCL20To12.cpp +++ b/lib/SPIRV/OCL20To12.cpp @@ -60,7 +60,7 @@ public: OCL20To12() : ModulePass(ID), M(nullptr), Ctx(nullptr) { initializeOCL20To12Pass(*PassRegistry::getPassRegistry()); } - virtual bool runOnModule(Module &M); + bool runOnModule(Module &M) override; virtual void visitCallInst(CallInst &CI); /// Transform atomic_work_item_fence to mem_fence. diff --git a/lib/SPIRV/OCL20ToSPIRV.cpp b/lib/SPIRV/OCL20ToSPIRV.cpp index dcbff75..469ef3b 100644 --- a/lib/SPIRV/OCL20ToSPIRV.cpp +++ b/lib/SPIRV/OCL20ToSPIRV.cpp @@ -73,9 +73,9 @@ public: OCL20ToSPIRV() : ModulePass(ID), M(nullptr), Ctx(nullptr), CLVer(0) { initializeOCL20ToSPIRVPass(*PassRegistry::getPassRegistry()); } - virtual bool runOnModule(Module &M); + bool runOnModule(Module &M) override; - void getAnalysisUsage(AnalysisUsage &AU) const { + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<OCLTypeToSPIRV>(); } diff --git a/lib/SPIRV/OCL21ToSPIRV.cpp b/lib/SPIRV/OCL21ToSPIRV.cpp index 03dcdce..3306c1f 100644 --- a/lib/SPIRV/OCL21ToSPIRV.cpp +++ b/lib/SPIRV/OCL21ToSPIRV.cpp @@ -62,7 +62,7 @@ public: OCL21ToSPIRV() : ModulePass(ID), M(nullptr), Ctx(nullptr), CLVer(0) { initializeOCL21ToSPIRVPass(*PassRegistry::getPassRegistry()); } - virtual bool runOnModule(Module &M); + bool runOnModule(Module &M) override; virtual void visitCallInst(CallInst &CI); /// Transform SPIR-V convert function diff --git a/lib/SPIRV/OCLTypeToSPIRV.h b/lib/SPIRV/OCLTypeToSPIRV.h index 20d5e92..fa4eb10 100644 --- a/lib/SPIRV/OCLTypeToSPIRV.h +++ b/lib/SPIRV/OCLTypeToSPIRV.h @@ -53,8 +53,8 @@ namespace SPIRV { class OCLTypeToSPIRV : public ModulePass { public: OCLTypeToSPIRV(); - virtual void getAnalysisUsage(AnalysisUsage &AU) const; - virtual bool runOnModule(Module &M); + void getAnalysisUsage(AnalysisUsage &AU) const override; + bool runOnModule(Module &M) override; /// \return Adapted type based on kernel argument metadata. If \p V is /// a function, returns function type. diff --git a/lib/SPIRV/OCLUtil.cpp b/lib/SPIRV/OCLUtil.cpp index 571beea..f2dd4e3 100644 --- a/lib/SPIRV/OCLUtil.cpp +++ b/lib/SPIRV/OCLUtil.cpp @@ -361,7 +361,7 @@ static FunctionType *getBlockInvokeTy(Function *F, unsigned blockIdx) { class OCLBuiltinFuncMangleInfo : public SPIRV::BuiltinFuncMangleInfo { public: OCLBuiltinFuncMangleInfo(Function *f) : F(f) {} - void init(const std::string &UniqName) { + void init(const std::string &UniqName) override { UnmangledName = UniqName; size_t Pos = std::string::npos; diff --git a/lib/SPIRV/SPIRVLowerBool.cpp b/lib/SPIRV/SPIRVLowerBool.cpp index 5259bcd..14a7f05 100644 --- a/lib/SPIRV/SPIRVLowerBool.cpp +++ b/lib/SPIRV/SPIRVLowerBool.cpp @@ -102,7 +102,7 @@ public: replace(&I, Sel); } } - virtual bool runOnModule(Module &M) { + bool runOnModule(Module &M) override { Context = &M.getContext(); visit(M); diff --git a/lib/SPIRV/SPIRVLowerConstExpr.cpp b/lib/SPIRV/SPIRVLowerConstExpr.cpp index 9a57442..fc6d39c 100644 --- a/lib/SPIRV/SPIRVLowerConstExpr.cpp +++ b/lib/SPIRV/SPIRVLowerConstExpr.cpp @@ -73,7 +73,7 @@ public: initializeSPIRVLowerConstExprPass(*PassRegistry::getPassRegistry()); } - virtual bool runOnModule(Module &M); + bool runOnModule(Module &M) override; void visit(Module *M); static char ID; diff --git a/lib/SPIRV/SPIRVLowerMemmove.cpp b/lib/SPIRV/SPIRVLowerMemmove.cpp index 8436544..5a6170d 100644 --- a/lib/SPIRV/SPIRVLowerMemmove.cpp +++ b/lib/SPIRV/SPIRVLowerMemmove.cpp @@ -108,7 +108,7 @@ public: I.dropAllReferences(); I.eraseFromParent(); } - virtual bool runOnModule(Module &M) { + bool runOnModule(Module &M) override { Context = &M.getContext(); Mod = &M; visit(M); diff --git a/lib/SPIRV/SPIRVLowerOCLBlocks.cpp b/lib/SPIRV/SPIRVLowerOCLBlocks.cpp index 20514e2..f33dff3 100644 --- a/lib/SPIRV/SPIRVLowerOCLBlocks.cpp +++ b/lib/SPIRV/SPIRVLowerOCLBlocks.cpp @@ -101,13 +101,13 @@ public: initializeSPIRVLowerOCLBlocksPass(*PassRegistry::getPassRegistry()); } - virtual void getAnalysisUsage(AnalysisUsage &AU) const { + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<CallGraphWrapperPass>(); AU.addRequired<AAResultsWrapperPass>(); AU.addRequired<AssumptionCacheTracker>(); } - virtual bool runOnModule(Module &Module) { + bool runOnModule(Module &Module) override { M = &Module; lowerBlockBind(); lowerGetBlockInvoke(); diff --git a/lib/SPIRV/SPIRVRegularizeLLVM.cpp b/lib/SPIRV/SPIRVRegularizeLLVM.cpp index 692c665..17d71fa 100644 --- a/lib/SPIRV/SPIRVRegularizeLLVM.cpp +++ b/lib/SPIRV/SPIRVRegularizeLLVM.cpp @@ -71,7 +71,7 @@ public: initializeSPIRVRegularizeLLVMPass(*PassRegistry::getPassRegistry()); } - virtual bool runOnModule(Module &M); + bool runOnModule(Module &M) override; // Lower functions bool regularize(); diff --git a/lib/SPIRV/SPIRVToOCL20.cpp b/lib/SPIRV/SPIRVToOCL20.cpp index b27eae6..f61b88f 100644 --- a/lib/SPIRV/SPIRVToOCL20.cpp +++ b/lib/SPIRV/SPIRVToOCL20.cpp @@ -68,7 +68,7 @@ public: SPIRVToOCL20() : ModulePass(ID), M(nullptr), Ctx(nullptr) { initializeSPIRVToOCL20Pass(*PassRegistry::getPassRegistry()); } - virtual bool runOnModule(Module &M); + bool runOnModule(Module &M) override; void visitCallInst(CallInst &CI); diff --git a/lib/SPIRV/SPIRVWriter.cpp b/lib/SPIRV/SPIRVWriter.cpp index baac31e..d52a017 100644 --- a/lib/SPIRV/SPIRVWriter.cpp +++ b/lib/SPIRV/SPIRVWriter.cpp @@ -157,7 +157,7 @@ public: ExtSetId(SPIRVID_INVALID), SrcLang(0), SrcLangVer(0), DbgTran(nullptr, SMod) {} - virtual StringRef getPassName() const { return "LLVMToSPIRV"; } + StringRef getPassName() const override { return "LLVMToSPIRV"; } bool runOnModule(Module &Mod) override { M = &Mod; @@ -168,7 +168,7 @@ public: return true; } - void getAnalysisUsage(AnalysisUsage &AU) const { + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<OCLTypeToSPIRV>(); } diff --git a/lib/SPIRV/TransOCLMD.cpp b/lib/SPIRV/TransOCLMD.cpp index 51112d4..bc85999 100644 --- a/lib/SPIRV/TransOCLMD.cpp +++ b/lib/SPIRV/TransOCLMD.cpp @@ -71,7 +71,7 @@ public: initializeTransOCLMDPass(*PassRegistry::getPassRegistry()); } - virtual bool runOnModule(Module &M); + bool runOnModule(Module &M) override; void visit(Module *M); static char ID; diff --git a/lib/SPIRV/libSPIRV/SPIRVBasicBlock.h b/lib/SPIRV/libSPIRV/SPIRVBasicBlock.h index 4d9bdc3..8b31fd9 100644 --- a/lib/SPIRV/libSPIRV/SPIRVBasicBlock.h +++ b/lib/SPIRV/libSPIRV/SPIRVBasicBlock.h @@ -54,7 +54,7 @@ public: SPIRVBasicBlock() : SPIRVValue(OpLabel), ParentF(NULL) { setAttr(); } - SPIRVDecoder getDecoder(std::istream &IS); + SPIRVDecoder getDecoder(std::istream &IS) override; SPIRVFunction *getParent() const { return ParentF; } size_t getNumInst() const { return InstVec.size(); } SPIRVInstruction *getInst(size_t I) const { return InstVec[I]; } @@ -74,7 +74,7 @@ public: return *Loc; } - void setScope(SPIRVEntry *Scope); + void setScope(SPIRVEntry *Scope) override; void setParent(SPIRVFunction *F) { ParentF = F; } SPIRVInstruction *addInstruction(SPIRVInstruction *I); void eraseInstruction(const SPIRVInstruction *I) { @@ -85,8 +85,8 @@ public: void setAttr() { setHasNoType(); } _SPIRV_DCL_ENCDEC - void encodeChildren(spv_ostream &) const; - void validate() const { + void encodeChildren(spv_ostream &) const override; + void validate() const override { SPIRVValue::validate(); assert(ParentF && "Invalid parent function"); } diff --git a/lib/SPIRV/libSPIRV/SPIRVDecorate.h b/lib/SPIRV/libSPIRV/SPIRVDecorate.h index 12eabba..d956299 100644 --- a/lib/SPIRV/libSPIRV/SPIRVDecorate.h +++ b/lib/SPIRV/libSPIRV/SPIRVDecorate.h @@ -76,7 +76,9 @@ public: void setOwner(SPIRVDecorationGroup *owner) { Owner = owner; } - SPIRVCapVec getRequiredCapability() const { return getCapability(Dec); } + SPIRVCapVec getRequiredCapability() const override { + return getCapability(Dec); + } SPIRVWord getRequiredSPIRVVersion() const override { switch (Dec) { @@ -135,8 +137,8 @@ public: SPIRVDecorate() : SPIRVDecorateGeneric(OC) {} _SPIRV_DCL_ENCDEC - void setWordCount(SPIRVWord); - void validate() const { + void setWordCount(SPIRVWord) override; + void validate() const override { SPIRVDecorateGeneric::validate(); assert(WordCount == Literals.size() + FixedWC); } @@ -216,9 +218,9 @@ public: } _SPIRV_DCL_ENCDEC - void setWordCount(SPIRVWord); + void setWordCount(SPIRVWord) override; - void validate() const { + void validate() const override { SPIRVDecorateGeneric::validate(); assert(WordCount == Literals.size() + FixedWC); } @@ -238,7 +240,7 @@ public: }; // Incomplete constructor SPIRVDecorationGroup() : SPIRVEntry(OC) {} - void encodeAll(spv_ostream &O) const; + void encodeAll(spv_ostream &O) const override; _SPIRV_DCL_ENCDEC // Move the given decorates to the decoration group void takeDecorates(SPIRVDecorateSet &Decs) { @@ -252,7 +254,7 @@ public: protected: SPIRVDecorateSet Decorations; - void validate() const { + void validate() const override { assert(OpCode == OC); assert(WordCount == WC); } @@ -271,7 +273,7 @@ public: SPIRVGroupDecorateGeneric(Op OC) : SPIRVEntryNoIdGeneric(OC), DecorationGroup(nullptr) {} - void setWordCount(SPIRVWord WC) { + void setWordCount(SPIRVWord WC) override { SPIRVEntryNoIdGeneric::setWordCount(WC); Targets.resize(WC - FixedWC); } @@ -292,7 +294,7 @@ public: // Incomplete constructor SPIRVGroupDecorate() : SPIRVGroupDecorateGeneric(OC) {} - virtual void decorateTargets(); + void decorateTargets() override; }; class SPIRVGroupMemberDecorate : public SPIRVGroupDecorateGeneric { @@ -305,7 +307,7 @@ public: // Incomplete constructor SPIRVGroupMemberDecorate() : SPIRVGroupDecorateGeneric(OC) {} - virtual void decorateTargets(); + void decorateTargets() override; }; } // namespace SPIRV diff --git a/lib/SPIRV/libSPIRV/SPIRVEntry.h b/lib/SPIRV/libSPIRV/SPIRVEntry.h index 502a839..e7da704 100644 --- a/lib/SPIRV/libSPIRV/SPIRVEntry.h +++ b/lib/SPIRV/libSPIRV/SPIRVEntry.h @@ -413,7 +413,7 @@ public: protected: _SPIRV_DEF_ENCDEC0 - void validate() const { assert(isValidId(SPIRVEntry::OpCode)); } + void validate() const override { assert(isValidId(SPIRVEntry::OpCode)); } }; class SPIRVAnnotationGeneric : public SPIRVEntryNoIdGeneric { @@ -464,7 +464,7 @@ public: protected: _SPIRV_DCL_ENCDEC - void validate() const; + void validate() const override; std::string Str; }; @@ -484,7 +484,7 @@ public: protected: _SPIRV_DCL_ENCDEC - void validate() const; + void validate() const override; SPIRVWord MemberNumber; std::string Str; }; @@ -550,7 +550,7 @@ public: protected: _SPIRV_DCL_ENCDEC - void validate() const; + void validate() const override; SPIRVId FileName; SPIRVWord Line; SPIRVWord Column; @@ -583,7 +583,9 @@ public: SPIRVExecutionMode() : ExecMode(ExecutionModeInvocations) {} SPIRVExecutionModeKind getExecutionMode() const { return ExecMode; } const std::vector<SPIRVWord> &getLiterals() const { return WordLiterals; } - SPIRVCapVec getRequiredCapability() const { return getCapability(ExecMode); } + SPIRVCapVec getRequiredCapability() const override { + return getCapability(ExecMode); + } SPIRVWord getRequiredSPIRVVersion() const override { switch (ExecMode) { @@ -634,7 +636,7 @@ public: protected: _SPIRV_DCL_ENCDEC - void validate() const; + void validate() const override; std::string Str; }; @@ -644,7 +646,7 @@ public: SPIRVMemoryModel(SPIRVModule *M) : SPIRVEntryNoId(M, 3) {} SPIRVMemoryModel() {} _SPIRV_DCL_ENCDEC - void validate() const; + void validate() const override; }; class SPIRVSource : public SPIRVEntryNoId<OpSource> { diff --git a/lib/SPIRV/libSPIRV/SPIRVFunction.h b/lib/SPIRV/libSPIRV/SPIRVFunction.h index 19afeaa..d5506d4 100644 --- a/lib/SPIRV/libSPIRV/SPIRVFunction.h +++ b/lib/SPIRV/libSPIRV/SPIRVFunction.h @@ -64,14 +64,14 @@ public: } bool isByVal() const { return hasAttr(FunctionParameterAttributeByVal); } bool isZext() const { return hasAttr(FunctionParameterAttributeZext); } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { if (hasLinkageType() && getLinkageType() == LinkageTypeImport) return getVec(CapabilityLinkage); return SPIRVCapVec(); } protected: - void validate() const { + void validate() const override { SPIRVValue::validate(); assert(ParentFunc && "Invalid parent function"); } @@ -96,7 +96,7 @@ public: : SPIRVValue(OpFunction), FuncType(NULL), FCtrlMask(FunctionControlMaskNone) {} - SPIRVDecoder getDecoder(std::istream &IS); + SPIRVDecoder getDecoder(std::istream &IS) override; SPIRVTypeFunction *getFunctionType() const { return FuncType; } SPIRVWord getFuncCtlMask() const { return FCtrlMask; } size_t getNumBasicBlock() const { return BBVec.size(); } @@ -127,10 +127,10 @@ public: return BB; } - void encodeChildren(spv_ostream &) const; + void encodeChildren(spv_ostream &) const override; void encodeExecutionModes(spv_ostream &) const; _SPIRV_DCL_ENCDEC - void validate() const { + void validate() const override { SPIRVValue::validate(); assert(FuncType && "Invalid func type"); } diff --git a/lib/SPIRV/libSPIRV/SPIRVInstruction.h b/lib/SPIRV/libSPIRV/SPIRVInstruction.h index 51cde45..c183f44 100644 --- a/lib/SPIRV/libSPIRV/SPIRVInstruction.h +++ b/lib/SPIRV/libSPIRV/SPIRVInstruction.h @@ -118,7 +118,7 @@ public: // Incomplete constructor SPIRVInstruction(Op TheOC = OpNop) : SPIRVValue(TheOC), BB(NULL) {} - virtual bool isInst() const { return true; } + bool isInst() const override { return true; } SPIRVBasicBlock *getParent() const { return BB; } SPIRVInstruction *getPrevious() const { return BB->getPrevious(this); } SPIRVInstruction *getNext() const { return BB->getNext(this); } @@ -128,7 +128,7 @@ public: getOperandTypes(const std::vector<SPIRVValue *> &Ops); void setParent(SPIRVBasicBlock *); - void setScope(SPIRVEntry *); + void setScope(SPIRVEntry *) override; void addFPRoundingMode(SPIRVFPRoundingModeKind Kind) { addDecorate(DecorationFPRoundingMode, Kind); } @@ -160,7 +160,7 @@ public: } protected: - void validate() const { SPIRVValue::validate(); } + void validate() const override { SPIRVValue::validate(); } private: SPIRVBasicBlock *BB; @@ -200,7 +200,7 @@ public: : SPIRVInstruction(OC), HasVariWC(false) { init(); } - virtual ~SPIRVInstTemplateBase() {} + ~SPIRVInstTemplateBase() override {} SPIRVInstTemplateBase *init(SPIRVType *TheType, SPIRVId TheId, SPIRVBasicBlock *TheBB, SPIRVModule *TheModule) { assert((TheBB || TheModule) && "Invalid BB or Module"); @@ -229,7 +229,7 @@ public: addLit(Lit2); addLit(Lit3); } - virtual bool isOperandLiteral(unsigned I) const { return Lit.count(I); } + bool isOperandLiteral(unsigned I) const override { return Lit.count(I); } void addLit(unsigned L) { if (L != ~0U) Lit.insert(L); @@ -266,7 +266,7 @@ public: SPIRVEntry::setWordCount(WC); Ops = TheOps; } - virtual void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); auto NumOps = WordCount - 1; if (hasId()) @@ -300,7 +300,7 @@ public: // Get operands which are values. // Drop execution scope and group operation literals. // Return other literals as uint32 constants. - virtual std::vector<SPIRVValue *> getOperands() { + std::vector<SPIRVValue *> getOperands() override { std::vector<SPIRVValue *> VOps; auto Offset = getOperandOffset(); for (size_t I = 0, E = Ops.size() - Offset; I != E; ++I) @@ -308,7 +308,7 @@ public: return VOps; } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { std::vector<SPIRVEntry *> Operands; for (size_t I = getOperandOffset(), E = Ops.size(); I < E; ++I) if (!isOperandLiteral(I)) @@ -343,7 +343,7 @@ public: void setHasVariableWordCount(bool VariWC) { HasVariWC = VariWC; } protected: - virtual void encode(spv_ostream &O) const { + void encode(spv_ostream &O) const override { auto E = getEncoder(O); if (hasType()) E << Type; @@ -351,7 +351,7 @@ protected: E << Id; E << Ops; } - virtual void decode(std::istream &I) { + void decode(std::istream &I) override { auto D = getDecoder(I); if (hasType()) D >> Type; @@ -371,8 +371,8 @@ class SPIRVInstTemplate : public BT { public: typedef BT BaseTy; SPIRVInstTemplate() { init(); } - virtual ~SPIRVInstTemplate() {} - virtual void init() { + ~SPIRVInstTemplate() override {} + void init() override { this->initImpl(OC, HasId, WC, HasVariableWC, Literal1, Literal2, Literal3); } }; @@ -457,20 +457,20 @@ public: else eraseDecorate(DecorationConstant); } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { if (SPIRVValue *V = getInitializer()) return std::vector<SPIRVEntry *>(1, V); return std::vector<SPIRVEntry *>(); } protected: - void validate() const { + void validate() const override { SPIRVValue::validate(); assert(isValid(StorageClass)); assert(Initializer.size() == 1 || Initializer.empty()); assert(getType()->isTypePointer()); } - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Initializer.resize(WordCount - 4); } @@ -510,20 +510,20 @@ protected: setHasNoId(); } - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); MemoryAccess.resize(TheWordCount - FixedWords); } - void encode(spv_ostream &O) const { + void encode(spv_ostream &O) const override { getEncoder(O) << PtrId << ValId << MemoryAccess; } - void decode(std::istream &I) { + void decode(std::istream &I) override { getDecoder(I) >> PtrId >> ValId >> MemoryAccess; MemoryAccessUpdate(MemoryAccess); } - void validate() const { + void validate() const override { SPIRVInstruction::validate(); if (getSrc()->isForward() || getDst()->isForward()) return; @@ -561,21 +561,21 @@ public: SPIRVValue *getSrc() const { return Module->get<SPIRVValue>(PtrId); } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); MemoryAccess.resize(TheWordCount - FixedWords); } - void encode(spv_ostream &O) const { + void encode(spv_ostream &O) const override { getEncoder(O) << Type << Id << PtrId << MemoryAccess; } - void decode(std::istream &I) { + void decode(std::istream &I) override { getDecoder(I) >> Type >> Id >> PtrId >> MemoryAccess; MemoryAccessUpdate(MemoryAccess); } - void validate() const { + void validate() const override { SPIRVInstruction::validate(); assert((getValue(PtrId)->isForward() || Type == getValueType(PtrId)->getPointerElementType()) && @@ -589,7 +589,7 @@ private: class SPIRVBinary : public SPIRVInstTemplateBase { protected: - void validate() const { + void validate() const override { SPIRVId Op1 = Ops[0]; SPIRVId Op2 = Ops[1]; SPIRVType *op1Ty, *op2Ty; @@ -709,7 +709,7 @@ protected: setHasNoType(); } _SPIRV_DEF_ENCDEC1(ReturnValueId) - void validate() const { SPIRVInstruction::validate(); } + void validate() const override { SPIRVInstruction::validate(); } SPIRVId ReturnValueId; }; @@ -731,7 +731,7 @@ public: protected: _SPIRV_DEF_ENCDEC1(TargetLabelId) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); assert(WordCount == 2); assert(OpCode == OC); @@ -774,12 +774,12 @@ public: SPIRVLabel *getFalseLabel() const { return get<SPIRVLabel>(FalseLabelId); } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); BranchWeights.resize(TheWordCount - 4); } _SPIRV_DEF_ENCDEC4(ConditionId, TrueLabelId, FalseLabelId, BranchWeights) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); assert(WordCount == 4 || WordCount == 6); assert(WordCount == BranchWeights.size() + 4); @@ -842,12 +842,12 @@ public: static_cast<SPIRVBasicBlock *>(BB)); } } - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Pairs.resize(TheWordCount - FixedWordCount); } _SPIRV_DEF_ENCDEC3(Type, Id, Pairs) - void validate() const { + void validate() const override { assert(WordCount == Pairs.size() + FixedWordCount); assert(OpCode == OC); assert(Pairs.size() % 2 == 0); @@ -864,7 +864,7 @@ protected: class SPIRVCompare : public SPIRVInstTemplateBase { protected: - void validate() const { + void validate() const override { auto Op1 = Ops[0]; auto Op2 = Ops[1]; SPIRVType *op1Ty, *op2Ty, *resTy; @@ -947,7 +947,7 @@ public: protected: _SPIRV_DEF_ENCDEC5(Type, Id, Condition, Op1, Op2) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); if (getValue(Condition)->isForward() || getValue(Op1)->isForward() || getValue(Op2)->isForward()) @@ -1079,12 +1079,12 @@ public: Func(Literals, static_cast<SPIRVBasicBlock *>(BB)); } } - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Pairs.resize(TheWordCount - FixedWordCount); } _SPIRV_DEF_ENCDEC3(Select, Default, Pairs) - void validate() const { + void validate() const override { assert(WordCount == Pairs.size() + FixedWordCount); assert(OpCode == OC); assert(Pairs.size() % getPairSize() == 0); @@ -1119,18 +1119,18 @@ public: SPIRVValue *getDividend() const { return getValue(Dividend); } SPIRVValue *getDivisor() const { return getValue(Divisor); } - std::vector<SPIRVValue *> getOperands() { + std::vector<SPIRVValue *> getOperands() override { std::vector<SPIRVId> Operands; Operands.push_back(Dividend); Operands.push_back(Divisor); return getValues(Operands); } - void setWordCount(SPIRVWord FixedWordCount) { + void setWordCount(SPIRVWord FixedWordCount) override { SPIRVEntry::setWordCount(FixedWordCount); } _SPIRV_DEF_ENCDEC4(Type, Id, Dividend, Divisor) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); if (getValue(Dividend)->isForward() || getValue(Divisor)->isForward()) return; @@ -1161,18 +1161,18 @@ public: SPIRVValue *getVector() const { return getValue(Vector); } SPIRVValue *getScalar() const { return getValue(Scalar); } - std::vector<SPIRVValue *> getOperands() { + std::vector<SPIRVValue *> getOperands() override { std::vector<SPIRVId> Operands; Operands.push_back(Vector); Operands.push_back(Scalar); return getValues(Operands); } - void setWordCount(SPIRVWord FixedWordCount) { + void setWordCount(SPIRVWord FixedWordCount) override { SPIRVEntry::setWordCount(FixedWordCount); } _SPIRV_DEF_ENCDEC4(Type, Id, Vector, Scalar) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); if (getValue(Vector)->isForward() || getValue(Scalar)->isForward()) return; @@ -1197,7 +1197,7 @@ protected: class SPIRVUnary : public SPIRVInstTemplateBase { protected: - void validate() const { + void validate() const override { auto Op = Ops[0]; SPIRVInstruction::validate(); if (getValue(Op)->isForward()) @@ -1315,11 +1315,11 @@ public: ArgTypes.push_back(getValue(I)->getType()); return ArgTypes; } - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Args.resize(TheWordCount - FixedWordCount); } - void validate() const { SPIRVInstruction::validate(); } + void validate() const override { SPIRVInstruction::validate(); } protected: std::vector<SPIRVWord> Args; @@ -1332,8 +1332,8 @@ public: SPIRVFunctionCall() : FunctionId(SPIRVID_INVALID) {} SPIRVFunction *getFunction() const { return get<SPIRVFunction>(FunctionId); } _SPIRV_DEF_ENCDEC4(Type, Id, FunctionId, Args) - void validate() const; - bool isOperandLiteral(unsigned Index) const { return false; } + void validate() const override; + bool isOperandLiteral(unsigned Index) const override { return false; } protected: SPIRVId FunctionId; @@ -1369,7 +1369,7 @@ public: ExtSetKind = Module->getBuiltinSet(ExtSetId); assert(ExtSetKind == SPIRVEIS_OpenCL && "not supported"); } - void encode(spv_ostream &O) const { + void encode(spv_ostream &O) const override { getEncoder(O) << Type << Id << ExtSetId; switch (ExtSetKind) { case SPIRVEIS_OpenCL: @@ -1381,7 +1381,7 @@ public: } getEncoder(O) << Args; } - void decode(std::istream &I) { + void decode(std::istream &I) override { getDecoder(I) >> Type >> Id >> ExtSetId; setExtSetKindById(); switch (ExtSetKind) { @@ -1394,11 +1394,11 @@ public: } getDecoder(I) >> Args; } - void validate() const { + void validate() const override { SPIRVFunctionCallGeneric::validate(); validateBuiltin(ExtSetId, ExtOp); } - bool isOperandLiteral(unsigned Index) const { + bool isOperandLiteral(unsigned Index) const override { assert(ExtSetKind == SPIRVEIS_OpenCL && "Unsupported extended instruction set"); auto EOC = static_cast<OCLExtOpKind>(ExtOp); @@ -1447,12 +1447,12 @@ public: } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Constituents.resize(TheWordCount - FixedWordCount); } _SPIRV_DEF_ENCDEC3(Type, Id, Constituents) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); switch (getValueType(this->getId())->getOpCode()) { case OpTypeVector: @@ -1488,14 +1488,14 @@ public: const std::vector<SPIRVWord> &getIndices() const { return Indices; } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Indices.resize(TheWordCount - 4); } _SPIRV_DEF_ENCDEC4(Type, Id, Composite, Indices) // ToDo: validate the result type is consistent with the base type and indices // need to trace through the base type for struct types - void validate() const { + void validate() const override { SPIRVInstruction::validate(); assert(getValueType(Composite)->isTypeArray() || getValueType(Composite)->isTypeStruct() || @@ -1531,14 +1531,14 @@ public: const std::vector<SPIRVWord> &getIndices() const { return Indices; } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Indices.resize(TheWordCount - FixedWordCount); } _SPIRV_DEF_ENCDEC5(Type, Id, Object, Composite, Indices) // ToDo: validate the object type is consistent with the base type and indices // need to trace through the base type for struct types - void validate() const { + void validate() const override { SPIRVInstruction::validate(); assert(OpCode == OC); assert(WordCount == Indices.size() + FixedWordCount); @@ -1572,7 +1572,7 @@ public: protected: _SPIRV_DEF_ENCDEC3(Type, Id, Operand) - void validate() const { SPIRVInstruction::validate(); } + void validate() const override { SPIRVInstruction::validate(); } SPIRVId Operand; }; @@ -1603,21 +1603,21 @@ public: SPIRVValue *getTarget() { return getValue(Target); } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); MemoryAccess.resize(TheWordCount - FixedWords); } - void encode(spv_ostream &O) const { + void encode(spv_ostream &O) const override { getEncoder(O) << Target << Source << MemoryAccess; } - void decode(std::istream &I) { + void decode(std::istream &I) override { getDecoder(I) >> Target >> Source >> MemoryAccess; MemoryAccessUpdate(MemoryAccess); } - void validate() const { + void validate() const override { assert((getValueType(Id) == getValueType(Source)) && "Inconsistent type"); assert(getValueType(Id)->isTypePointer() && "Invalid type"); assert(!(getValueType(Id)->getPointerElementType()->isTypeVoid()) && @@ -1659,21 +1659,21 @@ public: SPIRVValue *getSize() { return getValue(Size); } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); MemoryAccess.resize(TheWordCount - FixedWords); } - void encode(spv_ostream &O) const { + void encode(spv_ostream &O) const override { getEncoder(O) << Target << Source << Size << MemoryAccess; } - void decode(std::istream &I) { + void decode(std::istream &I) override { getDecoder(I) >> Target >> Source >> Size >> MemoryAccess; MemoryAccessUpdate(MemoryAccess); } - void validate() const { SPIRVInstruction::validate(); } + void validate() const override { SPIRVInstruction::validate(); } std::vector<SPIRVWord> MemoryAccess; SPIRVId Target; @@ -1703,7 +1703,7 @@ public: protected: _SPIRV_DEF_ENCDEC4(Type, Id, VectorId, IndexId) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); if (getValue(VectorId)->isForward()) return; @@ -1738,7 +1738,7 @@ public: protected: _SPIRV_DEF_ENCDEC5(Type, Id, VectorId, ComponentId, IndexId) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); if (getValue(VectorId)->isForward()) return; @@ -1775,12 +1775,12 @@ public: const std::vector<SPIRVWord> &getComponents() const { return Components; } protected: - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); Components.resize(TheWordCount - FixedWordCount); } _SPIRV_DEF_ENCDEC5(Type, Id, Vector1, Vector2, Components) - void validate() const { + void validate() const override { SPIRVInstruction::validate(); assert(OpCode == OC); assert(WordCount == Components.size() + FixedWordCount); @@ -1814,13 +1814,13 @@ public: setHasNoId(); setHasNoType(); } - void setWordCount(SPIRVWord TheWordCount) { + void setWordCount(SPIRVWord TheWordCount) override { SPIRVEntry::setWordCount(TheWordCount); } SPIRVValue *getExecScope() const { return getValue(ExecScope); } SPIRVValue *getMemScope() const { return getValue(MemScope); } SPIRVValue *getMemSemantic() const { return getValue(MemSema); } - std::vector<SPIRVValue *> getOperands() { + std::vector<SPIRVValue *> getOperands() override { std::vector<SPIRVId> Operands; Operands.push_back(ExecScope); Operands.push_back(MemScope); @@ -1830,7 +1830,7 @@ public: protected: _SPIRV_DEF_ENCDEC3(ExecScope, MemScope, MemSema) - void validate() const { + void validate() const override { assert(OpCode == OC); assert(WordCount == 4); SPIRVInstruction::validate(); @@ -1861,7 +1861,7 @@ public: SPIRVWord getSize() { return Size; }; protected: - void validate() const { + void validate() const override { auto Obj = static_cast<SPIRVVariable *>(getValue(Object)); assert(Obj->getStorageClass() == StorageClassFunction && "Invalid storage class"); @@ -1906,7 +1906,7 @@ public: SPIRVValue *getNumElements() const { return getValue(NumElements); } SPIRVValue *getStride() const { return getValue(Stride); } SPIRVValue *getEvent() const { return getValue(Event); } - std::vector<SPIRVValue *> getOperands() { + std::vector<SPIRVValue *> getOperands() override { std::vector<SPIRVId> Operands; Operands.push_back(Destination); Operands.push_back(Source); @@ -1919,7 +1919,7 @@ public: protected: _SPIRV_DEF_ENCDEC8(Type, Id, ExecScope, Destination, Source, NumElements, Stride, Event) - void validate() const { + void validate() const override { assert(OpCode == OC); assert(WordCount == WC); SPIRVInstruction::validate(); 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); diff --git a/lib/SPIRV/libSPIRV/SPIRVType.h b/lib/SPIRV/libSPIRV/SPIRVType.h index 3dd6ac7..1b99c9e 100644 --- a/lib/SPIRV/libSPIRV/SPIRVType.h +++ b/lib/SPIRV/libSPIRV/SPIRVType.h @@ -141,7 +141,7 @@ public: unsigned getBitWidth() const { return BitWidth; } bool isSigned() const { return IsSigned; } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { SPIRVCapVec CV; switch (BitWidth) { case 8: @@ -161,7 +161,7 @@ public: protected: _SPIRV_DEF_ENCDEC3(Id, BitWidth, IsSigned) - void validate() const { + void validate() const override { SPIRVEntry::validate(); assert(BitWidth > 1 && BitWidth <= 64 && "Invalid bit width"); } @@ -182,7 +182,7 @@ public: unsigned getBitWidth() const { return BitWidth; } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { SPIRVCapVec CV; if (isTypeFloat(16)) { CV.push_back(CapabilityFloat16Buffer); @@ -197,7 +197,7 @@ public: protected: _SPIRV_DEF_ENCDEC2(Id, BitWidth) - void validate() const { + void validate() const override { SPIRVEntry::validate(); assert(BitWidth >= 16 && BitWidth <= 64 && "Invalid bit width"); } @@ -225,7 +225,7 @@ public: return static_cast<SPIRVType *>(getEntry(ElemTypeId)); } SPIRVStorageClassKind getStorageClass() const { return ElemStorageClass; } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { auto Cap = getVec(CapabilityAddresses); if (getElementType()->isTypeFloat(16)) Cap.push_back(CapabilityFloat16Buffer); @@ -233,13 +233,13 @@ public: Cap.insert(Cap.end(), C.begin(), C.end()); return Cap; } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { return std::vector<SPIRVEntry *>(1, getEntry(ElemTypeId)); } protected: _SPIRV_DEF_ENCDEC3(Id, ElemStorageClass, ElemTypeId) - void validate() const { + void validate() const override { SPIRVEntry::validate(); assert(isValid(ElemStorageClass)); } @@ -281,7 +281,7 @@ public: SPIRVType *getComponentType() const { return CompType; } SPIRVWord getComponentCount() const { return CompCount; } bool isValidIndex(SPIRVWord Index) const { return Index < CompCount; } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { SPIRVCapVec V(getComponentType()->getRequiredCapability()); // Even though the capability name is "Vector16", it describes // usage of 8-component or 16-component vectors. @@ -290,13 +290,13 @@ public: return std::move(V); } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { return std::vector<SPIRVEntry *>(1, CompType); } protected: _SPIRV_DEF_ENCDEC3(Id, CompType, CompCount) - void validate() const { + void validate() const override { SPIRVEntry::validate(); CompType->validate(); assert(CompCount == 2 || CompCount == 3 || CompCount == 4 || @@ -320,10 +320,10 @@ public: SPIRVType *getElementType() const { return ElemType; } SPIRVConstant *getLength() const; - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { return std::move(getElementType()->getRequiredCapability()); } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { std::vector<SPIRVEntry *> Operands(2, ElemType); Operands[1] = (SPIRVEntry *)getLength(); return Operands; @@ -331,7 +331,7 @@ public: protected: _SPIRV_DCL_ENCDEC - void validate() const; + void validate() const override; private: SPIRVType *ElemType; // Element Type @@ -351,7 +351,7 @@ public: protected: _SPIRV_DEF_ENCDEC2(Id, Name) - void validate() const { SPIRVEntry::validate(); } + void validate() const override { SPIRVEntry::validate(); } }; struct SPIRVTypeImageDescriptor { @@ -433,7 +433,7 @@ public: assert(hasAccessQualifier()); return Acc[0]; } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { SPIRVCapVec CV; CV.push_back(CapabilityImageBasic); if (Desc.Dim == SPIRVImageDimKind::Dim1D) @@ -448,7 +448,7 @@ public: } SPIRVType *getSampledType() const { return get<SPIRVType>(SampledType); } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { return std::vector<SPIRVEntry *>(1, get<SPIRVType>(SampledType)); } @@ -456,7 +456,7 @@ protected: _SPIRV_DEF_ENCDEC9(Id, SampledType, Desc.Dim, Desc.Depth, Desc.Arrayed, Desc.MS, Desc.Sampled, Desc.Format, Acc) // The validation assumes OpenCL image or sampler type. - void validate() const { + void validate() const override { assert(OpCode == OC); assert(WordCount == FixedWC + Acc.size()); assert(SampledType != SPIRVID_INVALID && "Invalid sampled type"); @@ -468,7 +468,7 @@ protected: assert(Desc.Format == 0); // For OCL only assert(Acc.size() <= 1); } - void setWordCount(SPIRVWord TheWC) { + void setWordCount(SPIRVWord TheWC) override { WordCount = TheWC; Acc.resize(WordCount - FixedWC); } @@ -491,7 +491,7 @@ public: protected: _SPIRV_DEF_ENCDEC1(Id) - void validate() const { + void validate() const override { assert(OpCode == OC); assert(WordCount == FixedWC); } @@ -511,14 +511,14 @@ public: void setImageType(SPIRVTypeImage *TheImgTy) { ImgTy = TheImgTy; } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { return std::vector<SPIRVEntry *>(1, ImgTy); } protected: SPIRVTypeImage *ImgTy; _SPIRV_DEF_ENCDEC2(Id, ImgTy) - void validate() const { + void validate() const override { assert(OpCode == OC); assert(WordCount == FixedWC); assert(ImgTy && ImgTy->isTypeImage()); @@ -537,7 +537,7 @@ public: protected: _SPIRV_DEF_ENCDEC1(Id) - void validate() const { + void validate() const override { assert(OpCode == OC); assert(WordCount == FixedWC); } @@ -577,12 +577,12 @@ public: bool isPacked() const; void setPacked(bool Packed); - void setWordCount(SPIRVWord WordCount) { + void setWordCount(SPIRVWord WordCount) override { SPIRVType::setWordCount(WordCount); MemberTypeIdVec.resize(WordCount - 2); } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { std::vector<SPIRVEntry *> Operands(MemberTypeIdVec.size()); for (size_t I = 0, E = MemberTypeIdVec.size(); I < E; ++I) Operands[I] = getEntry(MemberTypeIdVec[I]); @@ -592,7 +592,7 @@ public: protected: _SPIRV_DEF_ENCDEC2(Id, MemberTypeIdVec) - void validate() const { SPIRVEntry::validate(); } + void validate() const override { SPIRVEntry::validate(); } private: std::vector<SPIRVId> MemberTypeIdVec; // Member Type Ids @@ -613,7 +613,7 @@ public: SPIRVType *getReturnType() const { return ReturnType; } SPIRVWord getNumParameters() const { return ParamTypeVec.size(); } SPIRVType *getParameterType(unsigned I) const { return ParamTypeVec[I]; } - virtual std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { std::vector<SPIRVEntry *> Operands(1 + ParamTypeVec.size(), ReturnType); std::copy(ParamTypeVec.begin(), ParamTypeVec.end(), ++Operands.begin()); return Operands; @@ -621,11 +621,11 @@ public: protected: _SPIRV_DEF_ENCDEC3(Id, ReturnType, ParamTypeVec) - void setWordCount(SPIRVWord WordCount) { + void setWordCount(SPIRVWord WordCount) override { SPIRVType::setWordCount(WordCount); ParamTypeVec.resize(WordCount - 3); } - void validate() const { + void validate() const override { SPIRVEntry::validate(); ReturnType->validate(); for (auto T : ParamTypeVec) @@ -653,7 +653,7 @@ public: protected: _SPIRV_DEF_ENCDEC1(Id) - void validate() const { SPIRVEntry::validate(); } + void validate() const override { SPIRVEntry::validate(); } SPIRVId Opn; }; @@ -683,13 +683,13 @@ public: // Incomplete constructor SPIRVTypeDeviceEvent() : SPIRVType(OpTypeDeviceEvent) {} - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { return getVec(CapabilityDeviceEnqueue); } protected: _SPIRV_DEF_ENCDEC1(Id) - void validate() const { SPIRVEntry::validate(); } + void validate() const override { SPIRVEntry::validate(); } }; class SPIRVTypeQueue : public SPIRVType { @@ -703,7 +703,7 @@ public: // Incomplete constructor SPIRVTypeQueue() : SPIRVType(OpTypeQueue) {} - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { return getVec(CapabilityDeviceEnqueue); } @@ -731,11 +731,13 @@ public: AccessQualifier = AccessQual; assert(isValid(AccessQualifier)); } - SPIRVCapVec getRequiredCapability() const { return getVec(CapabilityPipes); } + SPIRVCapVec getRequiredCapability() const override { + return getVec(CapabilityPipes); + } protected: _SPIRV_DEF_ENCDEC2(Id, AccessQualifier) - void validate() const { SPIRVEntry::validate(); } + void validate() const override { SPIRVEntry::validate(); } private: SPIRVAccessQualifierKind AccessQualifier; // Access Qualifier diff --git a/lib/SPIRV/libSPIRV/SPIRVValue.h b/lib/SPIRV/libSPIRV/SPIRVValue.h index 924bada..2ee386c 100644 --- a/lib/SPIRV/libSPIRV/SPIRVValue.h +++ b/lib/SPIRV/libSPIRV/SPIRVValue.h @@ -95,7 +95,7 @@ public: void setAlignment(SPIRVWord); void setVolatile(bool IsVolatile); - void validate() const { + void validate() const override { SPIRVEntry::validate(); assert((!hasType() || Type) && "Invalid type"); } @@ -109,7 +109,7 @@ public: setHasNoType(); } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { SPIRVCapVec CV; if (!hasType()) return std::move(CV); @@ -162,20 +162,20 @@ protected: NumWords = 1; WordCount = 3 + NumWords; } - void validate() const { + void validate() const override { SPIRVValue::validate(); assert(NumWords >= 1 && NumWords <= 2 && "Invalid constant size"); } - void encode(spv_ostream &O) const { + void encode(spv_ostream &O) const override { getEncoder(O) << Type << Id; for (unsigned i = 0; i < NumWords; ++i) getEncoder(O) << Union.Words[i]; } - void setWordCount(SPIRVWord WordCount) { + void setWordCount(SPIRVWord WordCount) override { SPIRVValue::setWordCount(WordCount); NumWords = WordCount - 3; } - void decode(std::istream &I) { + void decode(std::istream &I) override { getDecoder(I) >> Type >> Id; for (unsigned i = 0; i < NumWords; ++i) getDecoder(I) >> Union.Words[i]; @@ -202,7 +202,7 @@ public: SPIRVConstantEmpty() : SPIRVValue(OC) {} protected: - void validate() const { SPIRVValue::validate(); } + void validate() const override { SPIRVValue::validate(); } _SPIRV_DEF_ENCDEC2(Type, Id) }; @@ -215,7 +215,7 @@ public: SPIRVConstantBool() {} protected: - void validate() const { + void validate() const override { SPIRVConstantEmpty<OC>::validate(); assert(this->Type->isTypeBool() && "Invalid type"); } @@ -235,7 +235,7 @@ public: SPIRVConstantNull() {} protected: - void validate() const { + void validate() const override { SPIRVConstantEmpty::validate(); assert((Type->isTypeComposite() || Type->isTypeOpaque() || Type->isTypeEvent() || Type->isTypePointer() || @@ -255,7 +255,7 @@ public: SPIRVUndef() {} protected: - void validate() const { SPIRVConstantEmpty::validate(); } + void validate() const override { SPIRVConstantEmpty::validate(); } }; class SPIRVConstantComposite : public SPIRVValue { @@ -271,18 +271,18 @@ public: // Incomplete constructor SPIRVConstantComposite() : SPIRVValue(OpConstantComposite) {} std::vector<SPIRVValue *> getElements() const { return getValues(Elements); } - std::vector<SPIRVEntry *> getNonLiteralOperands() const { + std::vector<SPIRVEntry *> getNonLiteralOperands() const override { std::vector<SPIRVValue *> Elements = getElements(); return std::vector<SPIRVEntry *>(Elements.begin(), Elements.end()); } protected: - void validate() const { + void validate() const override { SPIRVValue::validate(); for (auto &I : Elements) getValue(I)->validate(); } - void setWordCount(SPIRVWord WordCount) { + void setWordCount(SPIRVWord WordCount) override { SPIRVEntry::setWordCount(WordCount); Elements.resize(WordCount - 3); } @@ -313,7 +313,7 @@ public: SPIRVWord getFilterMode() const { return FilterMode; } SPIRVWord getNormalized() const { return Normalized; } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { return getVec(CapabilityLiteralSampler); } @@ -321,7 +321,7 @@ protected: SPIRVWord AddrMode; SPIRVWord Normalized; SPIRVWord FilterMode; - void validate() const { + void validate() const override { SPIRVValue::validate(); assert(OpCode == OC); assert(WordCount == WC); @@ -351,7 +351,7 @@ public: SPIRVWord getPacketAlign() const { return PacketAlign; } SPIRVWord getCapacity() const { return Capacity; } - SPIRVCapVec getRequiredCapability() const { + SPIRVCapVec getRequiredCapability() const override { return getVec(CapabilityPipes, CapabilityPipeStorage); } @@ -359,7 +359,7 @@ protected: SPIRVWord PacketSize; SPIRVWord PacketAlign; SPIRVWord Capacity; - void validate() const { + void validate() const override { SPIRVValue::validate(); assert(OpCode == OC); assert(WordCount == WC); @@ -382,7 +382,7 @@ public: friend class SPIRVFunction; protected: - void validate() const {} + void validate() const override {} }; } // namespace SPIRV |