diff options
Diffstat (limited to 'contrib/llvm-project/llvm/utils/TableGen/X86FoldTablesEmitter.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/utils/TableGen/X86FoldTablesEmitter.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/contrib/llvm-project/llvm/utils/TableGen/X86FoldTablesEmitter.cpp b/contrib/llvm-project/llvm/utils/TableGen/X86FoldTablesEmitter.cpp index 8026c324cd40..85d926215113 100644 --- a/contrib/llvm-project/llvm/utils/TableGen/X86FoldTablesEmitter.cpp +++ b/contrib/llvm-project/llvm/utils/TableGen/X86FoldTablesEmitter.cpp @@ -127,6 +127,15 @@ class X86FoldTablesEmitter { OS << "0 },\n"; } + + bool operator<(const X86FoldTableEntry &RHS) const { + bool LHSpseudo = RegInst->TheDef->getValueAsBit("isPseudo"); + bool RHSpseudo = RHS.RegInst->TheDef->getValueAsBit("isPseudo"); + if (LHSpseudo != RHSpseudo) + return LHSpseudo; + + return RegInst->TheDef->getName() < RHS.RegInst->TheDef->getName(); + } }; typedef std::vector<X86FoldTableEntry> FoldTable; @@ -225,14 +234,8 @@ static inline unsigned int getRegOperandSize(const Record *RegRec) { } // Return the size of the memory operand -static inline unsigned int -getMemOperandSize(const Record *MemRec, const bool IntrinsicSensitive = false) { +static inline unsigned getMemOperandSize(const Record *MemRec) { if (MemRec->isSubClassOf("Operand")) { - // Intrinsic memory instructions use ssmem/sdmem. - if (IntrinsicSensitive && - (MemRec->getName() == "sdmem" || MemRec->getName() == "ssmem")) - return 128; - StringRef Name = MemRec->getValueAsDef("ParserMatchClass")->getValueAsString("Name"); if (Name == "Mem8") @@ -568,8 +571,6 @@ void X86FoldTablesEmitter::updateTables(const CodeGenInstruction *RegInstr, getRegOperandSize(RegOpRec) == getMemOperandSize(MemOpRec)) addEntryWithFlags(Table0, RegInstr, MemInstr, S, 0); } - - return; } void X86FoldTablesEmitter::run(formatted_raw_ostream &OS) { @@ -653,6 +654,14 @@ void X86FoldTablesEmitter::run(formatted_raw_ostream &OS) { &(Target.getInstruction(MemInstIter)), Entry.Strategy); } + // Sort the tables before printing. + llvm::sort(Table2Addr); + llvm::sort(Table0); + llvm::sort(Table1); + llvm::sort(Table2); + llvm::sort(Table3); + llvm::sort(Table4); + // Print all tables. printTable(Table2Addr, "Table2Addr", OS); printTable(Table0, "Table0", OS); |