diff options
Diffstat (limited to 'lib/Target/Sparc/SparcV8ISelSimple.cpp')
-rw-r--r-- | lib/Target/Sparc/SparcV8ISelSimple.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/Target/Sparc/SparcV8ISelSimple.cpp b/lib/Target/Sparc/SparcV8ISelSimple.cpp index 68bc28a0f3..c93ced515e 100644 --- a/lib/Target/Sparc/SparcV8ISelSimple.cpp +++ b/lib/Target/Sparc/SparcV8ISelSimple.cpp @@ -1016,6 +1016,16 @@ static inline BasicBlock *getBlockAfter(BasicBlock *BB) { /// static SetCondInst *canFoldSetCCIntoBranch(Value *V) { return 0; // disable. + if (SetCondInst *SCI = dyn_cast<SetCondInst>(V)) + if (SCI->hasOneUse()) { + BranchInst *User = dyn_cast<BranchInst>(SCI->use_back()); + if (User + && (SCI->getNext() == User) + && (getClassB(SCI->getOperand(0)->getType()) != cLong) + && User->isConditional() && (User->getCondition() == V)) + return SCI; + } + return 0; } /// visitBranchInst - Handles conditional and unconditional branches. |