Files
clang-p2996/llvm/test/Analysis/BranchProbabilityInfo/hoist.ll
Wei Wang 3279347da0 [BPI] Look through bitcasts in calcZeroHeuristic
Constant hoisting may hide the constant value behind bitcast for And's
operand. Track down the constant to make the BFI result consistent
regardless of hoisting.

Differential Revision: https://reviews.llvm.org/D91450
2020-11-17 09:33:05 -08:00

64 lines
2.4 KiB
LLVM

; RUN: opt < %s -analyze -branch-prob -enable-new-pm=0 | FileCheck %s
; RUN: opt < %s -passes='print<branch-prob>' -disable-output 2>&1 | FileCheck %s
; CHECK-LABEL: no_hoist
; CHECK: edge entry -> if.end probability is 0x40000000 / 0x80000000 = 50.00%
; CHECK: edge entry -> if.then probability is 0x40000000 / 0x80000000 = 50.00%
; CHECK: edge if.end -> if.end4 probability is 0x40000000 / 0x80000000 = 50.00%
; CHECK: edge if.end -> if.then3 probability is 0x40000000 / 0x80000000 = 50.00%
define dso_local void @no_hoist(i64 %arg1, i64 %arg2) local_unnamed_addr #0 {
entry:
%and = and i64 %arg1, 1152921504606846976
%tobool.not = icmp eq i64 %and, 0
br i1 %tobool.not, label %if.end, label %if.then
if.then: ; preds = %entry
tail call void @bar()
br label %if.end
if.end: ; preds = %if.then, %entry
%and1 = and i64 %arg2, 1152921504606846976
%tobool2.not = icmp eq i64 %and1, 0
br i1 %tobool2.not, label %if.end4, label %if.then3
if.then3: ; preds = %if.end
tail call void @baz()
br label %if.end4
if.end4: ; preds = %if.then3, %if.end
ret void
}
; CHECK-LABEL: hoist
; CHECK: edge entry -> if.end probability is 0x40000000 / 0x80000000 = 50.00%
; CHECK: edge entry -> if.then probability is 0x40000000 / 0x80000000 = 50.00%
; CHECK: edge if.end -> if.end4 probability is 0x40000000 / 0x80000000 = 50.00%
; CHECK: edge if.end -> if.then3 probability is 0x40000000 / 0x80000000 = 50.00%
define dso_local void @hoist(i64 %arg1, i64 %arg2) local_unnamed_addr #0 {
entry:
%const = bitcast i64 1152921504606846976 to i64
%and = and i64 %arg1, %const
%tobool.not = icmp eq i64 %and, 0
br i1 %tobool.not, label %if.end, label %if.then
if.then: ; preds = %entry
tail call void @bar()
br label %if.end
if.end: ; preds = %if.then, %entry
%and1 = and i64 %arg2, %const
%tobool2.not = icmp eq i64 %and1, 0
br i1 %tobool2.not, label %if.end4, label %if.then3
if.then3: ; preds = %if.end
tail call void @baz()
br label %if.end4
if.end4: ; preds = %if.then3, %if.end
ret void
}
declare dso_local void @bar() local_unnamed_addr #1
declare dso_local void @baz() local_unnamed_addr #1