forked from OSchip/llvm-project
[MachineOutliner][NFC] Don't map more illegal instrs than you have to
We were mapping an instruction every time we saw something we couldn't map before this. Since each illegal mapping is unique, we only have to do this once. This makes it so that we don't map illegal instructions when the previous mapped instruction was illegal. In CTMark (AArch64), this results in 240 fewer instruction mappings on average over 619 files in total. The largest improvement is 12576 fewer mappings in one file, and the smallest is 0. The median improvement is 101 fewer mappings. llvm-svn: 342405
This commit is contained in:
parent
d405d2792d
commit
bd72988c3a
|
@ -625,27 +625,38 @@ struct InstructionMapper {
|
|||
const TargetInstrInfo &TII) {
|
||||
unsigned Flags = TII.getMachineOutlinerMBBFlags(MBB);
|
||||
|
||||
// Set to true whenever we map an illegal number.
|
||||
bool AddedIllegalLastTime = false;
|
||||
for (MachineBasicBlock::iterator It = MBB.begin(), Et = MBB.end(); It != Et;
|
||||
It++) {
|
||||
|
||||
// Keep track of where this instruction is in the module.
|
||||
switch (TII.getOutliningType(It, Flags)) {
|
||||
case InstrType::Illegal:
|
||||
// If we added an illegal number last time, then don't add more of them.
|
||||
// One number is all that is necessary to prevent matches on illegal
|
||||
// instructions.
|
||||
if (AddedIllegalLastTime)
|
||||
break;
|
||||
AddedIllegalLastTime = true;
|
||||
mapToIllegalUnsigned(It);
|
||||
break;
|
||||
|
||||
case InstrType::Legal:
|
||||
AddedIllegalLastTime = false;
|
||||
mapToLegalUnsigned(It);
|
||||
break;
|
||||
|
||||
case InstrType::LegalTerminator:
|
||||
mapToLegalUnsigned(It);
|
||||
InstrList.push_back(It);
|
||||
AddedIllegalLastTime = true;
|
||||
UnsignedVec.push_back(IllegalInstrNumber);
|
||||
IllegalInstrNumber--;
|
||||
break;
|
||||
|
||||
case InstrType::Invisible:
|
||||
AddedIllegalLastTime = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue