@@ -279,7 +279,8 @@ class SPIRVModuleImpl : public SPIRVModule {
279279 template <class T > T *addType (T *Ty);
280280 SPIRVTypeArray *addArrayType (SPIRVType *, SPIRVConstant *) override ;
281281 SPIRVTypeBool *addBoolType () override ;
282- SPIRVTypeFloat *addFloatType (unsigned BitWidth) override ;
282+ SPIRVTypeFloat *addFloatType (unsigned BitWidth,
283+ unsigned FloatingPointEncoding) override ;
283284 SPIRVTypeFunction *addFunctionType (SPIRVType *,
284285 const std::vector<SPIRVType *> &) override ;
285286 SPIRVTypeInt *addIntegerType (unsigned BitWidth) override ;
@@ -591,6 +592,8 @@ class SPIRVModuleImpl : public SPIRVModule {
591592 SPIRVCapMap CapMap;
592593 SPIRVUnknownStructFieldMap UnknownStructFieldMap;
593594 std::map<unsigned , SPIRVTypeInt *> IntTypeMap;
595+ SmallDenseMap<std::pair<unsigned , unsigned >, SPIRVTypeFloat *, 4 >
596+ FloatTypeMap;
594597 std::map<unsigned , SPIRVConstant *> LiteralMap;
595598 std::vector<SPIRVExtInst *> DebugInstVec;
596599 std::vector<SPIRVExtInst *> AuxDataInstVec;
@@ -1004,9 +1007,15 @@ SPIRVTypeInt *SPIRVModuleImpl::addIntegerType(unsigned BitWidth) {
10041007 return addType (Ty);
10051008}
10061009
1007- SPIRVTypeFloat *SPIRVModuleImpl::addFloatType (unsigned BitWidth) {
1008- SPIRVTypeFloat *T = addType (new SPIRVTypeFloat (this , getId (), BitWidth));
1009- return T;
1010+ SPIRVTypeFloat *SPIRVModuleImpl::addFloatType (unsigned BitWidth,
1011+ unsigned FloatingPointEncoding) {
1012+ auto Desc = std::make_pair (BitWidth, FloatingPointEncoding);
1013+ auto Loc = FloatTypeMap.find (Desc);
1014+ if (Loc != FloatTypeMap.end ())
1015+ return Loc->second ;
1016+ auto *Ty = new SPIRVTypeFloat (this , getId (), BitWidth, FloatingPointEncoding);
1017+ FloatTypeMap[Desc] = Ty;
1018+ return addType (Ty);
10101019}
10111020
10121021SPIRVTypePointer *
0 commit comments