summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2014-09-03 05:59:23 +0000
committerCraig Topper <craig.topper@gmail.com>2014-09-03 05:59:23 +0000
commit6cb92c206b8db221fa73db4d6054e994b67e584b (patch)
treec621d048f0f16b3dfde8df4077c3d15186cf34af /llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
parent2b0fbe539e786cde276dbe17e679ad8f078cc097 (diff)
downloadbcm5719-llvm-6cb92c206b8db221fa73db4d6054e994b67e584b.tar.gz
bcm5719-llvm-6cb92c206b8db221fa73db4d6054e994b67e584b.zip
Revert "Use unique_ptr to manager FilterChooser ownership."
std::map::emplace isn't working on some of the bots. llvm-svn: 217015
Diffstat (limited to 'llvm/utils/TableGen/FixedLenDecoderEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/FixedLenDecoderEmitter.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp b/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
index c93cbb20af4..27114cba5e5 100644
--- a/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
+++ b/llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
@@ -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;
OpenPOWER on IntegriCloud