@@ -663,12 +663,6 @@ SPIRVModuleImpl::~SPIRVModuleImpl() {
663663 for (auto I : IdEntryMap)
664664 delete I.second ;
665665
666- for (auto C : CapMap)
667- delete C.second ;
668-
669- for (auto C : ConditionalCapMap)
670- delete C.second ;
671-
672666 for (auto *M : ModuleProcessedVec)
673667 delete M;
674668}
@@ -787,10 +781,12 @@ void SPIRVModuleImpl::addCapability(SPIRVCapabilityKind Cap) {
787781 addCapabilities (SPIRV::getCapability (Cap));
788782 SPIRVDBG (spvdbgs () << " addCapability: " << SPIRVCapabilityNameMap::map (Cap)
789783 << ' \n ' );
790- if (hasCapability (Cap))
784+
785+ auto [It, Inserted] = CapMap.insert (std::make_pair (Cap, nullptr ));
786+ if (!Inserted)
791787 return ;
792788
793- auto * CapObj = new SPIRVCapability (this , Cap);
789+ auto CapObj = std::make_unique< SPIRVCapability> (this , Cap);
794790 if (AutoAddExtensions) {
795791 // While we are reading existing SPIR-V we need to read it as-is and don't
796792 // add required extensions for each entry automatically
@@ -799,7 +795,7 @@ void SPIRVModuleImpl::addCapability(SPIRVCapabilityKind Cap) {
799795 addExtension (Ext.value ());
800796 }
801797
802- CapMap. insert ( std::make_pair (Cap, CapObj) );
798+ It-> second = std::move ( CapObj);
803799}
804800
805801void SPIRVModuleImpl::addCapabilityInternal (SPIRVCapabilityKind Cap) {
@@ -816,18 +812,19 @@ void SPIRVModuleImpl::addConditionalCapability(SPIRVId Condition,
816812 SPIRVDBG (spvdbgs () << " addConditionalCapability: "
817813 << SPIRVCapabilityNameMap::map (Cap)
818814 << " , condition: " << Condition << ' \n ' );
819- if (ConditionalCapMap.find (std::make_pair (Condition, Cap)) !=
820- ConditionalCapMap.end ()) {
815+ auto Key = std::make_pair (Condition, Cap);
816+ auto [It, Inserted] = ConditionalCapMap.insert ({Key, nullptr });
817+ if (!Inserted) {
821818 return ;
822819 }
823820
824- auto *CapObj = new SPIRVConditionalCapabilityINTEL (this , Condition, Cap);
821+ auto CapObj =
822+ std::make_unique<SPIRVConditionalCapabilityINTEL>(this , Condition, Cap);
825823 if (AutoAddExtensions) {
826824 assert (false && " Auto adding conditional extensions is not supported." );
827825 }
828826
829- ConditionalCapMap.insert (
830- std::make_pair (std::make_pair (Condition, Cap), CapObj));
827+ It->second = std::move (CapObj);
831828}
832829
833830void SPIRVModuleImpl::eraseConditionalCapability (SPIRVId Condition,
0 commit comments