mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
aa46024ea3
Summary: This addresses PR 22718. When branch weights are too large, they were being clamped to the range [1, MaxWeightForBB]. But this clamping is only applied to edges that go outside the range, so it distorts the relative branch probabilities. This patch changes the weight calculation to scale every branch so the relative probabilities are preserved. The scaling is done differently now. First, all the branch weights are added up, and if the sum exceeds 32 bits, it computes an integer scale to bring all the weights within the range. The patch fixes an existing test that had slightly wrong branch probabilities due to the previous clamping. It now gets branch weights scaled accordingly. Reviewers: dexonsmith Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9442 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236750 91177308-0d34-0410-b5e6-96231b3b80d8
35 lines
1.3 KiB
LLVM
35 lines
1.3 KiB
LLVM
; RUN: llc < %s -mtriple=x86_64-apple-darwin -print-machineinstrs=expand-isel-pseudos -o /dev/null 2>&1 | FileCheck %s
|
|
|
|
;; Make sure a transformation in SelectionDAGBuilder that converts "or + br" to
|
|
;; two branches correctly updates the branch probability.
|
|
|
|
@max_regno = common global i32 0, align 4
|
|
|
|
define void @test(i32* %old, i32 %final) {
|
|
for.cond:
|
|
br label %for.cond2
|
|
|
|
for.cond2: ; preds = %for.inc, %for.cond
|
|
%i.1 = phi i32 [ %inc19, %for.inc ], [ 0, %for.cond ]
|
|
%bit.0 = phi i32 [ %shl, %for.inc ], [ 1, %for.cond ]
|
|
%tobool = icmp eq i32 %bit.0, 0
|
|
%v3 = load i32, i32* @max_regno, align 4
|
|
%cmp4 = icmp eq i32 %i.1, %v3
|
|
%or.cond = or i1 %tobool, %cmp4
|
|
br i1 %or.cond, label %for.inc20, label %for.inc, !prof !0
|
|
; CHECK: BB#1: derived from LLVM BB %for.cond2
|
|
; CHECK: Successors according to CFG: BB#3(56008718) BB#4(3615818718)
|
|
; CHECK: BB#4: derived from LLVM BB %for.cond2
|
|
; CHECK: Successors according to CFG: BB#3(56008718) BB#2(3559810000)
|
|
|
|
for.inc: ; preds = %for.cond2
|
|
%shl = shl i32 %bit.0, 1
|
|
%inc19 = add nsw i32 %i.1, 1
|
|
br label %for.cond2
|
|
|
|
for.inc20: ; preds = %for.cond2
|
|
ret void
|
|
}
|
|
|
|
!0 = !{!"branch_weights", i32 112017436, i32 -735157296}
|