diff options
Diffstat (limited to 'llvm/lib/CodeGen/BranchFolding.cpp')
-rw-r--r-- | llvm/lib/CodeGen/BranchFolding.cpp | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp index ec736a04bbd..71074513c89 100644 --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -145,59 +145,6 @@ void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) { MLI->removeBlock(MBB); } -/// OptimizeImpDefsBlock - If a basic block is just a bunch of implicit_def -/// followed by terminators, and if the implicitly defined registers are not -/// used by the terminators, remove those implicit_def's. e.g. -/// BB1: -/// r0 = implicit_def -/// r1 = implicit_def -/// br -/// This block can be optimized away later if the implicit instructions are -/// removed. -bool BranchFolder::OptimizeImpDefsBlock(MachineBasicBlock *MBB) { - SmallSet<unsigned, 4> ImpDefRegs; - MachineBasicBlock::iterator I = MBB->begin(); - while (I != MBB->end()) { - if (!I->isImplicitDef()) - break; - unsigned Reg = I->getOperand(0).getReg(); - if (TargetRegisterInfo::isPhysicalRegister(Reg)) { - for (MCSubRegIterator SubRegs(Reg, TRI, /*IncludeSelf=*/true); - SubRegs.isValid(); ++SubRegs) - ImpDefRegs.insert(*SubRegs); - } else { - ImpDefRegs.insert(Reg); - } - ++I; - } - if (ImpDefRegs.empty()) - return false; - - MachineBasicBlock::iterator FirstTerm = I; - while (I != MBB->end()) { - if (!TII->isUnpredicatedTerminator(*I)) - return false; - // See if it uses any of the implicitly defined registers. - for (const MachineOperand &MO : I->operands()) { - if (!MO.isReg() || !MO.isUse()) - continue; - unsigned Reg = MO.getReg(); - if (ImpDefRegs.count(Reg)) - return false; - } - ++I; - } - - I = MBB->begin(); - while (I != FirstTerm) { - MachineInstr *ImpDefMI = &*I; - ++I; - MBB->erase(ImpDefMI); - } - - return true; -} - /// OptimizeFunction - Perhaps branch folding, tail merging and other /// CFG optimizations on the given function. Block placement changes the layout /// and may create new tail merging opportunities. @@ -228,7 +175,6 @@ bool BranchFolder::OptimizeFunction(MachineFunction &MF, SmallVector<MachineOperand, 4> Cond; if (!TII->analyzeBranch(MBB, TBB, FBB, Cond, true)) MadeChange |= MBB.CorrectExtraCFGEdges(TBB, FBB, !Cond.empty()); - MadeChange |= OptimizeImpDefsBlock(&MBB); } // Recalculate funclet membership. |