Revert "Use unique_ptr to manager FilterChooser ownership."
authorCraig Topper <craig.topper@gmail.com>
Wed, 3 Sep 2014 05:59:23 +0000 (05:59 +0000)
committerCraig Topper <craig.topper@gmail.com>
Wed, 3 Sep 2014 05:59:23 +0000 (05:59 +0000)
std::map::emplace isn't working on some of the bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217015 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/FixedLenDecoderEmitter.cpp

index c93cbb20af4f16f957a8c8207ce4dfb2d6aa24d9..27114cba5e5460d562c846b47bff532000782423 100644 (file)
@@ -230,7 +230,7 @@ protected:
   std::vector<unsigned> VariableInstructions;
 
   // Map of well-known segment value to its delegate.
-  std::map<unsigned, std::unique_ptr<const FilterChooser>> FilterChooserMap;
+  std::map<unsigned, const FilterChooser*> FilterChooserMap;
 
   // Number of instructions which fall under FilteredInstructions category.
   unsigned NumFiltered;
@@ -530,6 +530,12 @@ Filter::Filter(FilterChooser &owner, unsigned startBit, unsigned numBits,
 }
 
 Filter::~Filter() {
+  std::map<unsigned, const FilterChooser*>::iterator filterIterator;
+  for (filterIterator = FilterChooserMap.begin();
+       filterIterator != FilterChooserMap.end();
+       filterIterator++) {
+    delete filterIterator->second;
+  }
 }
 
 // Divides the decoding task into sub tasks and delegates them to the
@@ -551,12 +557,14 @@ void Filter::recurse() {
 
     // Delegates to an inferior filter chooser for further processing on this
     // group of instructions whose segment values are variable.
-    FilterChooserMap.emplace((unsigned)-1,
-                             make_unique<FilterChooser>(Owner->AllInstructions,
-                                                        VariableInstructions,
-                                                        Owner->Operands,
-                                                        BitValueArray,
-                                                        *Owner));
+    FilterChooserMap.insert(std::pair<unsigned, const FilterChooser*>(
+                              (unsigned)-1,
+                              new FilterChooser(Owner->AllInstructions,
+                                                VariableInstructions,
+                                                Owner->Operands,
+                                                BitValueArray,
+                                                *Owner)
+                              ));
   }
 
   // No need to recurse for a singleton filtered instruction.
@@ -582,12 +590,14 @@ void Filter::recurse() {
 
     // Delegates to an inferior filter chooser for further processing on this
     // category of instructions.
-    FilterChooserMap.emplace(mapIterator->first,
-                             make_unique<FilterChooser>(Owner->AllInstructions,
-                                                        mapIterator->second,
-                                                        Owner->Operands,
-                                                        BitValueArray,
-                                                        *Owner));
+    FilterChooserMap.insert(std::pair<unsigned, const FilterChooser*>(
+                              mapIterator->first,
+                              new FilterChooser(Owner->AllInstructions,
+                                                mapIterator->second,
+                                                Owner->Operands,
+                                                BitValueArray,
+                                                *Owner)
+                              ));
   }
 }
 
@@ -622,8 +632,7 @@ void Filter::emitTableEntry(DecoderTableInfo &TableInfo) const {
   // A new filter entry begins a new scope for fixup resolution.
   TableInfo.FixupStack.push_back(FixupList());
 
-  std::map<unsigned,
-           std::unique_ptr<const FilterChooser>>::const_iterator filterIterator;
+  std::map<unsigned, const FilterChooser*>::const_iterator filterIterator;
 
   DecoderTable &Table = TableInfo.Table;