Add getTPred() and getFPred() functions.

They identify the PHI predecessors in both diamonds and triangles.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161689 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen 2012-08-10 20:19:17 +00:00
parent 8828c4ccd4
commit 870da6de2c

View File

@ -96,6 +96,12 @@ public:
/// equal to Tail. /// equal to Tail.
bool isTriangle() const { return TBB == Tail || FBB == Tail; } bool isTriangle() const { return TBB == Tail || FBB == Tail; }
/// Returns the Tail predecessor for the True side.
MachineBasicBlock *getTPred() const { return TBB == Tail ? Head : TBB; }
/// Returns the Tail predecessor for the False side.
MachineBasicBlock *getFPred() const { return FBB == Tail ? Head : FBB; }
/// Information about each phi in the Tail block. /// Information about each phi in the Tail block.
struct PHIInfo { struct PHIInfo {
MachineInstr *PHI; MachineInstr *PHI;
@ -391,8 +397,8 @@ bool SSAIfConv::canConvertIf(MachineBasicBlock *MBB) {
// Any phis in the tail block must be convertible to selects. // Any phis in the tail block must be convertible to selects.
PHIs.clear(); PHIs.clear();
MachineBasicBlock *TPred = TBB == Tail ? Head : TBB; MachineBasicBlock *TPred = getTPred();
MachineBasicBlock *FPred = FBB == Tail ? Head : FBB; MachineBasicBlock *FPred = getFPred();
for (MachineBasicBlock::iterator I = Tail->begin(), E = Tail->end(); for (MachineBasicBlock::iterator I = Tail->begin(), E = Tail->end();
I != E && I->isPHI(); ++I) { I != E && I->isPHI(); ++I) {
PHIs.push_back(&*I); PHIs.push_back(&*I);