1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02: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

llvm-svn: 307788
This commit is contained in:
John Brawn 2017-07-12 13:23:10 +00:00
parent c0bcedd785
commit b8e8932e7b
2 changed files with 16 additions and 9 deletions

View File

@ -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);

View File

@ -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: