mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-08 03:30:22 +00:00
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) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31100 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9cd6875917
commit
a2d799531a
@ -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
Block a user