Replace a custom table sort check with std::is_sorted. Change a function to take ArrayRef instead of pointer and length. NFC

llvm-svn: 250615
This commit is contained in:
Craig Topper 2015-10-17 16:37:13 +00:00
parent c177d9edb3
commit 9ff9bf4959
1 changed files with 8 additions and 17 deletions

View File

@ -545,17 +545,9 @@ namespace {
}; };
} }
#ifndef NDEBUG static int Lookup(ArrayRef<TableEntry> Table, unsigned Opcode) {
static bool TableIsSorted(const TableEntry *Table, unsigned NumEntries) { const TableEntry *I = std::lower_bound(Table.begin(), Table.end(), Opcode);
for (unsigned i = 0; i != NumEntries-1; ++i) if (I != Table.end() && I->from == Opcode)
if (!(Table[i] < Table[i+1])) return false;
return true;
}
#endif
static int Lookup(const TableEntry *Table, unsigned N, unsigned Opcode) {
const TableEntry *I = std::lower_bound(Table, Table+N, Opcode);
if (I != Table+N && I->from == Opcode)
return I->to; return I->to;
return -1; return -1;
} }
@ -566,7 +558,7 @@ static int Lookup(const TableEntry *Table, unsigned N, unsigned Opcode) {
#define ASSERT_SORTED(TABLE) \ #define ASSERT_SORTED(TABLE) \
{ static bool TABLE##Checked = false; \ { static bool TABLE##Checked = false; \
if (!TABLE##Checked) { \ if (!TABLE##Checked) { \
assert(TableIsSorted(TABLE, array_lengthof(TABLE)) && \ assert(std::is_sorted(std::begin(TABLE), std::end(TABLE)) && \
"All lookup tables must be sorted for efficient access!"); \ "All lookup tables must be sorted for efficient access!"); \
TABLE##Checked = true; \ TABLE##Checked = true; \
} \ } \
@ -745,7 +737,7 @@ static const TableEntry OpcodeTable[] = {
static unsigned getConcreteOpcode(unsigned Opcode) { static unsigned getConcreteOpcode(unsigned Opcode) {
ASSERT_SORTED(OpcodeTable); ASSERT_SORTED(OpcodeTable);
int Opc = Lookup(OpcodeTable, array_lengthof(OpcodeTable), Opcode); int Opc = Lookup(OpcodeTable, Opcode);
assert(Opc != -1 && "FP Stack instruction not in OpcodeTable!"); assert(Opc != -1 && "FP Stack instruction not in OpcodeTable!");
return Opc; return Opc;
} }
@ -796,7 +788,7 @@ void FPS::popStackAfter(MachineBasicBlock::iterator &I) {
RegMap[Stack[--StackTop]] = ~0; // Update state RegMap[Stack[--StackTop]] = ~0; // Update state
// Check to see if there is a popping version of this instruction... // Check to see if there is a popping version of this instruction...
int Opcode = Lookup(PopTable, array_lengthof(PopTable), I->getOpcode()); int Opcode = Lookup(PopTable, I->getOpcode());
if (Opcode != -1) { if (Opcode != -1) {
I->setDesc(TII->get(Opcode)); I->setDesc(TII->get(Opcode));
if (Opcode == X86::UCOM_FPPr) if (Opcode == X86::UCOM_FPPr)
@ -1192,7 +1184,7 @@ void FPS::handleTwoArgFP(MachineBasicBlock::iterator &I) {
// We decide which form to use based on what is on the top of the stack, and // We decide which form to use based on what is on the top of the stack, and
// which operand is killed by this instruction. // which operand is killed by this instruction.
const TableEntry *InstTable; ArrayRef<TableEntry> InstTable;
bool isForward = TOS == Op0; bool isForward = TOS == Op0;
bool updateST0 = (TOS == Op0 && !KillsOp1) || (TOS == Op1 && !KillsOp0); bool updateST0 = (TOS == Op0 && !KillsOp1) || (TOS == Op1 && !KillsOp0);
if (updateST0) { if (updateST0) {
@ -1207,8 +1199,7 @@ void FPS::handleTwoArgFP(MachineBasicBlock::iterator &I) {
InstTable = ReverseSTiTable; InstTable = ReverseSTiTable;
} }
int Opcode = Lookup(InstTable, array_lengthof(ForwardST0Table), int Opcode = Lookup(InstTable, MI->getOpcode());
MI->getOpcode());
assert(Opcode != -1 && "Unknown TwoArgFP pseudo instruction!"); assert(Opcode != -1 && "Unknown TwoArgFP pseudo instruction!");
// NotTOS - The register which is not on the top of stack... // NotTOS - The register which is not on the top of stack...