@@ -128,20 +128,6 @@ class SPIRVModuleImpl : public SPIRVModule {
128128 getValueTypes (const std::vector<SPIRVId> &) const override ;
129129 SPIRVMemoryModelKind getMemoryModel () const override { return MemoryModel; }
130130 SPIRVConstant *getLiteralAsConstant (unsigned Literal) override ;
131- unsigned getNumEntryPoints (SPIRVExecutionModelKind EM) const override {
132- auto Loc = EntryPointVec.find (EM);
133- if (Loc == EntryPointVec.end ())
134- return 0 ;
135- return Loc->second .size ();
136- }
137- SPIRVFunction *getEntryPoint (SPIRVExecutionModelKind EM,
138- unsigned I) const override {
139- auto Loc = EntryPointVec.find (EM);
140- if (Loc == EntryPointVec.end ())
141- return nullptr ;
142- assert (I < Loc->second .size ());
143- return get<SPIRVFunction>(Loc->second [I]);
144- }
145131 unsigned getNumFunctions () const override { return FuncVec.size (); }
146132 unsigned getNumVariables () const override { return VariableVec.size (); }
147133 SourceLanguage getSourceLanguage (SPIRVWord *Ver = nullptr ) const override {
@@ -215,8 +201,9 @@ class SPIRVModuleImpl : public SPIRVModule {
215201 SPIRVGroupMemberDecorate *
216202 addGroupMemberDecorate (SPIRVDecorationGroup *Group,
217203 const std::vector<SPIRVEntry *> &Targets) override ;
218- void addEntryPoint (SPIRVExecutionModelKind ExecModel,
219- SPIRVId EntryPoint) override ;
204+ void addEntryPoint (SPIRVExecutionModelKind ExecModel, SPIRVId EntryPoint,
205+ const std::string &Name,
206+ const std::vector<SPIRVId> &Variables) override ;
220207 SPIRVForward *addForward (SPIRVType *Ty) override ;
221208 SPIRVForward *addForward (SPIRVId, SPIRVType *Ty) override ;
222209 SPIRVFunction *addFunction (SPIRVFunction *) override ;
@@ -495,11 +482,11 @@ class SPIRVModuleImpl : public SPIRVModule {
495482 typedef std::vector<SPIRVGroupDecorateGeneric *> SPIRVGroupDecVec;
496483 typedef std::vector<SPIRVAsmTargetINTEL *> SPIRVAsmTargetVector;
497484 typedef std::vector<SPIRVAsmINTEL *> SPIRVAsmVector;
485+ typedef std::vector<SPIRVEntryPoint *> SPIRVEntryPointVec;
498486 typedef std::map<SPIRVId, SPIRVExtInstSetKind> SPIRVIdToInstructionSetMap;
499487 std::map<SPIRVExtInstSetKind, SPIRVId> ExtInstSetIds;
500488 typedef std::map<SPIRVId, SPIRVExtInstSetKind> SPIRVIdToBuiltinSetMap;
501489 typedef std::map<SPIRVExecutionModelKind, SPIRVIdSet> SPIRVExecModelIdSetMap;
502- typedef std::map<SPIRVExecutionModelKind, SPIRVIdVec> SPIRVExecModelIdVecMap;
503490 typedef std::unordered_map<std::string, SPIRVString *> SPIRVStringMap;
504491 typedef std::map<SPIRVTypeStruct *, std::vector<std::pair<unsigned , SPIRVId>>>
505492 SPIRVUnknownStructFieldMap;
@@ -525,7 +512,7 @@ class SPIRVModuleImpl : public SPIRVModule {
525512 SPIRVAsmTargetVector AsmTargetVec;
526513 SPIRVAsmVector AsmVec;
527514 SPIRVExecModelIdSetMap EntryPointSet;
528- SPIRVExecModelIdVecMap EntryPointVec;
515+ SPIRVEntryPointVec EntryPointVec;
529516 SPIRVStringMap StrMap;
530517 SPIRVCapMap CapMap;
531518 SPIRVUnknownStructFieldMap UnknownStructFieldMap;
@@ -1000,11 +987,14 @@ SPIRVModuleImpl::addDecorate(SPIRVDecorateGeneric *Dec) {
1000987}
1001988
1002989void SPIRVModuleImpl::addEntryPoint (SPIRVExecutionModelKind ExecModel,
1003- SPIRVId EntryPoint) {
990+ SPIRVId EntryPoint, const std::string &Name,
991+ const std::vector<SPIRVId> &Variables) {
1004992 assert (isValid (ExecModel) && " Invalid execution model" );
1005993 assert (EntryPoint != SPIRVID_INVALID && " Invalid entry point" );
994+ auto *EP =
995+ add (new SPIRVEntryPoint (this , ExecModel, EntryPoint, Name, Variables));
996+ EntryPointVec.push_back (EP);
1006997 EntryPointSet[ExecModel].insert (EntryPoint);
1007- EntryPointVec[ExecModel].push_back (EntryPoint);
1008998 addCapabilities (SPIRV::getCapability (ExecModel));
1009999}
10101000
@@ -1833,14 +1823,10 @@ spv_ostream &operator<<(spv_ostream &O, SPIRVModule &M) {
18331823
18341824 O << SPIRVMemoryModel (&M);
18351825
1836- for (auto &I : MI.EntryPointVec )
1837- for (auto &II : I.second )
1838- O << SPIRVEntryPoint (&M, I.first , II, M.get <SPIRVFunction>(II)->getName (),
1839- M.get <SPIRVFunction>(II)->getVariables ());
1826+ O << MI.EntryPointVec ;
18401827
18411828 for (auto &I : MI.EntryPointVec )
1842- for (auto &II : I.second )
1843- MI.get <SPIRVFunction>(II)->encodeExecutionModes (O);
1829+ MI.get <SPIRVFunction>(I->getTargetId ())->encodeExecutionModes (O);
18441830
18451831 O << MI.StringVec ;
18461832
0 commit comments