mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-26 14:15:53 +00:00
Don't try to split weird critical edges that really aren't:
BB#1: derived from LLVM BB %bb.nph28 Live Ins: %AL Predecessors according to CFG: BB#0 TEST8rr %reg16384<kill>, %reg16384, %EFLAGS<imp-def>; GR8:%reg16384 JNE_4 <BB#2>, %EFLAGS<imp-use,kill> JMP_4 <BB#2> Successors according to CFG: BB#2 BB#2 These double CFG edges only ever occur in bugpoint-generated code, so there is no need to attempt something clever. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117992 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e85bd773e6
commit
371e82bf51
@ -450,14 +450,24 @@ MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) {
|
|||||||
MachineFunction *MF = getParent();
|
MachineFunction *MF = getParent();
|
||||||
DebugLoc dl; // FIXME: this is nowhere
|
DebugLoc dl; // FIXME: this is nowhere
|
||||||
|
|
||||||
// We may need to update this's terminator, but we can't do that if AnalyzeBranch
|
// We may need to update this's terminator, but we can't do that if
|
||||||
// fails. If this uses a jump table, we won't touch it.
|
// AnalyzeBranch fails. If this uses a jump table, we won't touch it.
|
||||||
const TargetInstrInfo *TII = MF->getTarget().getInstrInfo();
|
const TargetInstrInfo *TII = MF->getTarget().getInstrInfo();
|
||||||
MachineBasicBlock *TBB = 0, *FBB = 0;
|
MachineBasicBlock *TBB = 0, *FBB = 0;
|
||||||
SmallVector<MachineOperand, 4> Cond;
|
SmallVector<MachineOperand, 4> Cond;
|
||||||
if (TII->AnalyzeBranch(*this, TBB, FBB, Cond))
|
if (TII->AnalyzeBranch(*this, TBB, FBB, Cond))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
// Avoid bugpoint weirdness: A block may end with a conditional branch but
|
||||||
|
// jumps to the same MBB is either case. We have duplicate CFG edges in that
|
||||||
|
// case that we can't handle. Since this never happens in properly optimized
|
||||||
|
// code, just skip those edges.
|
||||||
|
if (TBB && TBB == FBB) {
|
||||||
|
DEBUG(dbgs() << "Won't split critical edge after degenerate BB#"
|
||||||
|
<< getNumber() << '\n');
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
MachineBasicBlock *NMBB = MF->CreateMachineBasicBlock();
|
MachineBasicBlock *NMBB = MF->CreateMachineBasicBlock();
|
||||||
MF->insert(llvm::next(MachineFunction::iterator(this)), NMBB);
|
MF->insert(llvm::next(MachineFunction::iterator(this)), NMBB);
|
||||||
DEBUG(dbgs() << "Splitting critical edge:"
|
DEBUG(dbgs() << "Splitting critical edge:"
|
||||||
|
Loading…
Reference in New Issue
Block a user