mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-18 10:24:45 +00:00
AnalyzeBranch modifies the bb, but we don't want to modify a bb with
eh edges. Swap the order of the checks to avoid it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132806 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -541,13 +541,13 @@ TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
|
|||||||
|
|
||||||
MachineBasicBlock *PredTBB, *PredFBB;
|
MachineBasicBlock *PredTBB, *PredFBB;
|
||||||
SmallVector<MachineOperand, 4> PredCond;
|
SmallVector<MachineOperand, 4> PredCond;
|
||||||
|
// EH edges are ignored by AnalyzeBranch.
|
||||||
|
if (PredBB->succ_size() != 1)
|
||||||
|
continue;
|
||||||
if (TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true))
|
if (TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true))
|
||||||
continue;
|
continue;
|
||||||
if (!PredCond.empty())
|
if (!PredCond.empty())
|
||||||
continue;
|
continue;
|
||||||
// EH edges are ignored by AnalyzeBranch.
|
|
||||||
if (PredBB->succ_size() != 1)
|
|
||||||
continue;
|
|
||||||
// Don't duplicate into a fall-through predecessor (at least for now).
|
// Don't duplicate into a fall-through predecessor (at least for now).
|
||||||
if (PredBB->isLayoutSuccessor(TailBB) && PredBB->canFallThrough())
|
if (PredBB->isLayoutSuccessor(TailBB) && PredBB->canFallThrough())
|
||||||
continue;
|
continue;
|
||||||
@@ -603,12 +603,11 @@ TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
|
|||||||
MachineBasicBlock *PrevBB = prior(MachineFunction::iterator(TailBB));
|
MachineBasicBlock *PrevBB = prior(MachineFunction::iterator(TailBB));
|
||||||
MachineBasicBlock *PriorTBB = 0, *PriorFBB = 0;
|
MachineBasicBlock *PriorTBB = 0, *PriorFBB = 0;
|
||||||
SmallVector<MachineOperand, 4> PriorCond;
|
SmallVector<MachineOperand, 4> PriorCond;
|
||||||
bool PriorUnAnalyzable =
|
|
||||||
TII->AnalyzeBranch(*PrevBB, PriorTBB, PriorFBB, PriorCond, true);
|
|
||||||
// This has to check PrevBB->succ_size() because EH edges are ignored by
|
// This has to check PrevBB->succ_size() because EH edges are ignored by
|
||||||
// AnalyzeBranch.
|
// AnalyzeBranch.
|
||||||
if (!PriorUnAnalyzable && PriorCond.empty() && !PriorTBB &&
|
if (PrevBB->succ_size() == 1 &&
|
||||||
TailBB->pred_size() == 1 && PrevBB->succ_size() == 1 &&
|
!TII->AnalyzeBranch(*PrevBB, PriorTBB, PriorFBB, PriorCond, true) &&
|
||||||
|
PriorCond.empty() && !PriorTBB && TailBB->pred_size() == 1 &&
|
||||||
!TailBB->hasAddressTaken()) {
|
!TailBB->hasAddressTaken()) {
|
||||||
DEBUG(dbgs() << "\nMerging into block: " << *PrevBB
|
DEBUG(dbgs() << "\nMerging into block: " << *PrevBB
|
||||||
<< "From MBB: " << *TailBB);
|
<< "From MBB: " << *TailBB);
|
||||||
|
Reference in New Issue
Block a user