mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-10 14:12:11 +00:00
[ARM] Adjust ifcvt heuristic for the diamond ifcvt case
When we have a diamond ifcvt the fallthough block will have a branch at the end of it that disappears when predicated, so discount it from the predication cost. Differential Revision: https://reviews.llvm.org/D34952 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307788 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1ca52a5bb6
commit
ec26641b79
@ -1880,6 +1880,9 @@ isProfitableToIfCvt(MachineBasicBlock &TBB,
|
||||
// Diamond: TBB is the block that is branched to, FBB is the fallthrough
|
||||
TUnpredCycles = TCycles + TakenBranchCost;
|
||||
FUnpredCycles = FCycles + NotTakenBranchCost;
|
||||
// The branch at the end of FBB will disappear when it's predicated, so
|
||||
// discount it from PredCost.
|
||||
PredCost -= 1 * ScalingUpFactor;
|
||||
}
|
||||
// The total cost is the cost of each path scaled by their probabilites
|
||||
unsigned TUnpredCost = Probability.scale(TUnpredCycles * ScalingUpFactor);
|
||||
|
@ -95,15 +95,17 @@ if.end:
|
||||
}
|
||||
|
||||
; CHECK-LABEL: diamond2:
|
||||
; CHECK-BP: itte
|
||||
; CHECK-BP: streq
|
||||
; CHECK-BP: ldreq
|
||||
; CHECK-BP: strne
|
||||
; CHECK-NOBP: cbz
|
||||
; CHECK-NOBP: str
|
||||
; CHECK-NOBP: b
|
||||
; CHECK-NOBP: str
|
||||
; CHECK-NOBP: ldr
|
||||
; CHECK-BP: cbz
|
||||
; CHECK-BP: str
|
||||
; CHECK-BP: str
|
||||
; CHECK-BP: b
|
||||
; CHECK-BP: str
|
||||
; CHECK-BP: ldr
|
||||
; CHECK-NOBP: ittee
|
||||
; CHECK-NOBP: streq
|
||||
; CHECK-NOBP: ldreq
|
||||
; CHECK-NOBP: strne
|
||||
; CHECK-NOBP: strne
|
||||
define i32 @diamond2(i32 %n, i32 %m, i32* %p, i32* %q) {
|
||||
entry:
|
||||
%tobool = icmp eq i32 %n, 0
|
||||
@ -111,6 +113,8 @@ entry:
|
||||
|
||||
if.then:
|
||||
store i32 %n, i32* %p, align 4
|
||||
%arrayidx = getelementptr inbounds i32, i32* %p, i32 2
|
||||
store i32 %n, i32* %arrayidx, align 4
|
||||
br label %if.end
|
||||
|
||||
if.else:
|
||||
|
Loading…
x
Reference in New Issue
Block a user