mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-21 16:24:47 +00:00
Include forms of SplitCriticalEdge which work correctly with pred/succ iterators
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9856 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
33e0a7575d
commit
aeef8c70f0
@ -18,6 +18,7 @@
|
|||||||
// FIXME: Move to this file: BasicBlock::removePredecessor, BB::splitBasicBlock
|
// FIXME: Move to this file: BasicBlock::removePredecessor, BB::splitBasicBlock
|
||||||
|
|
||||||
#include "llvm/BasicBlock.h"
|
#include "llvm/BasicBlock.h"
|
||||||
|
#include "llvm/Support/CFG.h"
|
||||||
class Instruction;
|
class Instruction;
|
||||||
class Pass;
|
class Pass;
|
||||||
|
|
||||||
@ -64,4 +65,22 @@ bool isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum);
|
|||||||
///
|
///
|
||||||
bool SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P = 0);
|
bool SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P = 0);
|
||||||
|
|
||||||
|
inline bool SplitCriticalEdge(BasicBlock *BB, succ_iterator SI, Pass *P = 0) {
|
||||||
|
return SplitCriticalEdge(BB->getTerminator(), SI.getSuccessorIndex(), P);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// SplitCriticalEdge - If the edge from *PI to BB is not critical, return
|
||||||
|
/// false. Otherwise, split all edges between the two blocks and return true.
|
||||||
|
/// This updates all of the same analyses as the other SplitCriticalEdge
|
||||||
|
/// function.
|
||||||
|
inline bool SplitCriticalEdge(BasicBlock *Succ, pred_iterator PI, Pass *P = 0) {
|
||||||
|
BasicBlock *Pred = *PI;
|
||||||
|
bool MadeChange = false;
|
||||||
|
for (succ_iterator SI = succ_begin(Pred), E = succ_end(Pred); SI != E; ++SI)
|
||||||
|
if (*SI == Succ)
|
||||||
|
MadeChange |= SplitCriticalEdge(Pred, SI, P);
|
||||||
|
return MadeChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user