forked from OSchip/llvm-project
Use branch reversal to do stuff like this:
call L_strcmp$stub
testl %eax, %eax
- jne LBB26_208 #cond_true6020
- jmp LBB26_227 #bb7119
+ je LBB26_227 #bb7119
LBB26_208: #cond_true6020
movl $l31_str14, 4(%esp)
testl %eax, %eax
- jne LBB26_704 #cond_true13042
- jmp LBB26_713 #bb13151
+ je LBB26_713 #bb13151
LBB26_704: #cond_true13042
movl $_str52, 4(%esp)
cmpl 76(%ecx), %eax
- jge LBB26_1628 #cond_false63.i.i
- jmp LBB26_1769 #_Z8makeGridP13mrSurfaceListidiidd.exit.i
+ jl LBB26_1769 #_Z8makeGridP13mrSurfaceListidiidd.exit.i
LBB26_1628: #cond_false63.i.i
movl $0, 48964(%esp)
llvm-svn: 31100
This commit is contained in:
parent
3a897f31fa
commit
28f17f45be
|
|
@ -472,6 +472,20 @@ void BranchFolder::OptimizeBlock(MachineFunction::iterator MBB) {
|
|||
++NumBranchOpts;
|
||||
return OptimizeBlock(MBB);
|
||||
}
|
||||
|
||||
// If the prior block branches here on true and somewhere else on false, and
|
||||
// if the branch condition is reversible, reverse the branch to create a
|
||||
// fall-through.
|
||||
if (PriorTBB == &*MBB) {
|
||||
std::vector<MachineOperand> NewPriorCond(PriorCond);
|
||||
if (!TII->ReverseBranchCondition(NewPriorCond)) {
|
||||
TII->RemoveBranch(PrevBB);
|
||||
TII->InsertBranch(PrevBB, PriorFBB, 0, NewPriorCond);
|
||||
MadeChange = true;
|
||||
++NumBranchOpts;
|
||||
return OptimizeBlock(MBB);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Analyze the branch in the current block.
|
||||
|
|
|
|||
Loading…
Reference in New Issue