diff --git a/llvm/utils/TableGen/FastISelEmitter.cpp b/llvm/utils/TableGen/FastISelEmitter.cpp --- a/llvm/utils/TableGen/FastISelEmitter.cpp +++ b/llvm/utils/TableGen/FastISelEmitter.cpp @@ -381,14 +381,9 @@ OperandsOpcodeTypeRetPredMap SimplePatterns; // This is used to check that there are no duplicate predicates - typedef std::multimap PredCheckMap; - typedef std::map RetPredCheckMap; - typedef std::map TypeRetPredCheckMap; - typedef std::map OpcodeTypeRetPredCheckMap; - typedef std::map - OperandsOpcodeTypeRetPredCheckMap; - - OperandsOpcodeTypeRetPredCheckMap SimplePatternsCheck; + std::set> + SimplePatternsCheck; std::map > SignaturesWithConstantForms; @@ -587,16 +582,15 @@ int complexity = Pattern.getPatternComplexity(CGP); - if (SimplePatternsCheck[Operands][OpcodeName][VT] - [RetVT].count(PredicateCheck)) { + auto inserted_simple_pattern = SimplePatternsCheck.insert( + std::make_tuple(Operands, OpcodeName, VT, RetVT, PredicateCheck)); + if (!inserted_simple_pattern.second) { PrintFatalError(Pattern.getSrcRecord()->getLoc(), "Duplicate predicate in FastISel table!"); } - SimplePatternsCheck[Operands][OpcodeName][VT][RetVT].insert( - std::make_pair(PredicateCheck, true)); - // Note: Instructions with the same complexity will appear in the order - // that they are encountered. + // Note: Instructions with the same complexity will appear in the order + // that they are encountered. SimplePatterns[Operands][OpcodeName][VT][RetVT].emplace(complexity, std::move(Memo));