From bd72988c3a583840bdc93cc796757a5a0a2e56fc Mon Sep 17 00:00:00 2001 From: Jessica Paquette Date: Mon, 17 Sep 2018 18:40:21 +0000 Subject: [PATCH] [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 --- llvm/lib/CodeGen/MachineOutliner.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp index cc95c49022ac..d1343cbc54cf 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; } }