@@ -253,7 +253,8 @@ class SPIRVModuleImpl : public SPIRVModule {
253253 template <class T > T *addType (T *Ty);
254254 SPIRVTypeArray *addArrayType (SPIRVType *, SPIRVValue *) override ;
255255 SPIRVTypeBool *addBoolType () override ;
256- SPIRVTypeFloat *addFloatType (unsigned BitWidth) override ;
256+ SPIRVTypeFloat *addFloatType (unsigned BitWidth,
257+ unsigned FloatingPointEncoding) override ;
257258 SPIRVTypeFunction *addFunctionType (SPIRVType *,
258259 const std::vector<SPIRVType *> &) override ;
259260 SPIRVTypeInt *addIntegerType (unsigned BitWidth) override ;
@@ -577,7 +578,8 @@ class SPIRVModuleImpl : public SPIRVModule {
577578 SmallDenseMap<SPIRVStorageClassKind, SPIRVTypeUntypedPointerKHR *>
578579 UntypedPtrTyMap;
579580 SmallDenseMap<unsigned , SPIRVTypeInt *, 4 > IntTypeMap;
580- SmallDenseMap<unsigned , SPIRVTypeFloat *, 4 > FloatTypeMap;
581+ SmallDenseMap<std::pair<unsigned , unsigned >, SPIRVTypeFloat *, 4 >
582+ FloatTypeMap;
581583 SmallDenseMap<std::pair<unsigned , SPIRVType *>, SPIRVTypePointer *, 4 >
582584 PointerTypeMap;
583585 std::unordered_map<unsigned , SPIRVConstant *> LiteralMap;
@@ -1007,12 +1009,14 @@ SPIRVTypeInt *SPIRVModuleImpl::addIntegerType(unsigned BitWidth) {
10071009 return addType (Ty);
10081010}
10091011
1010- SPIRVTypeFloat *SPIRVModuleImpl::addFloatType (unsigned BitWidth) {
1011- auto Loc = FloatTypeMap.find (BitWidth);
1012+ SPIRVTypeFloat *SPIRVModuleImpl::addFloatType (unsigned BitWidth,
1013+ unsigned FloatingPointEncoding) {
1014+ auto Desc = std::make_pair (BitWidth, FloatingPointEncoding);
1015+ auto Loc = FloatTypeMap.find (Desc);
10121016 if (Loc != FloatTypeMap.end ())
10131017 return Loc->second ;
1014- auto *Ty = new SPIRVTypeFloat (this , getId (), BitWidth);
1015- FloatTypeMap[BitWidth ] = Ty;
1018+ auto *Ty = new SPIRVTypeFloat (this , getId (), BitWidth, FloatingPointEncoding );
1019+ FloatTypeMap[Desc ] = Ty;
10161020 return addType (Ty);
10171021}
10181022
0 commit comments