summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJessica Paquette <jpaquette@apple.com>2018-09-17 18:40:21 +0000
committerJessica Paquette <jpaquette@apple.com>2018-09-17 18:40:21 +0000
commitbd72988c3a583840bdc93cc796757a5a0a2e56fc (patch)
tree7411b95088c0cba9e5ca6bd613d3dc4e69b2e52a
parentd405d2792d3145cf199e09fd9ce95ad09220031a (diff)
downloadbcm5719-llvm-bd72988c3a583840bdc93cc796757a5a0a2e56fc.tar.gz
bcm5719-llvm-bd72988c3a583840bdc93cc796757a5a0a2e56fc.zip
[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
-rw-r--r--llvm/lib/CodeGen/MachineOutliner.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp
index cc95c49022a..d1343cbc54c 100644
--- a/llvm/lib/CodeGen/MachineOutliner.cpp
+++ b/llvm/lib/CodeGen/MachineOutliner.cpp
@@ -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;
}
}
OpenPOWER on IntegriCloud