X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FCodeGen%2FGeneric%2FMachineBranchProb.ll;h=b11d3697887c48338b57ed4307079fc4ea100b54;hb=454a57ccb6a7b85c960074109d2e8c18b0a7f0ab;hp=f10bd395abe226f5d799a8b404ab065569ba3561;hpb=defaf830f9a803fcc44e85c90b26542e38546a03;p=oota-llvm.git diff --git a/test/CodeGen/Generic/MachineBranchProb.ll b/test/CodeGen/Generic/MachineBranchProb.ll index f10bd395abe..b11d3697887 100644 --- a/test/CodeGen/Generic/MachineBranchProb.ll +++ b/test/CodeGen/Generic/MachineBranchProb.ll @@ -1,11 +1,12 @@ ; RUN: llc < %s -print-machineinstrs=expand-isel-pseudos -o /dev/null 2>&1 | FileCheck %s ; ARM & AArch64 run an extra SimplifyCFG which disrupts this test. -; XFAIL: arm,aarch64 +; Hexagon crashes (PR23377) +; XFAIL: arm,aarch64,hexagon ; Make sure we have the correct weight attached to each successor. define i32 @test2(i32 %x) nounwind uwtable readnone ssp { -; CHECK: Machine code for function test2: +; CHECK-LABEL: Machine code for function test2: entry: %conv = sext i32 %x to i64 switch i64 %conv, label %return [ @@ -15,11 +16,11 @@ entry: i64 5, label %sw.bb1 ], !prof !0 ; CHECK: BB#0: derived from LLVM BB %entry -; CHECK: Successors according to CFG: BB#2(64) BB#4(14) +; CHECK: Successors according to CFG: BB#2(64) BB#4(21) ; CHECK: BB#4: derived from LLVM BB %entry -; CHECK: Successors according to CFG: BB#1(4) BB#5(10) +; CHECK: Successors according to CFG: BB#1(10) BB#5(11) ; CHECK: BB#5: derived from LLVM BB %entry -; CHECK: Successors according to CFG: BB#1(10) BB#3(7) +; CHECK: Successors according to CFG: BB#1(4) BB#3(7) sw.bb: br label %return @@ -33,3 +34,41 @@ return: } !0 = !{!"branch_weights", i32 7, i32 6, i32 4, i32 4, i32 64} + + +declare void @g(i32) +define void @left_leaning_weight_balanced_tree(i32 %x) { +entry: + switch i32 %x, label %return [ + i32 0, label %bb0 + i32 10, label %bb1 + i32 20, label %bb2 + i32 30, label %bb3 + i32 40, label %bb4 + i32 50, label %bb5 + ], !prof !1 +bb0: tail call void @g(i32 0) br label %return +bb1: tail call void @g(i32 1) br label %return +bb2: tail call void @g(i32 2) br label %return +bb3: tail call void @g(i32 3) br label %return +bb4: tail call void @g(i32 4) br label %return +bb5: tail call void @g(i32 5) br label %return +return: ret void + +; Check that we set branch weights on the pivot cmp instruction correctly. +; Cases {0,10,20,30} go on the left with weight 13; cases {40,50} go on the +; right with weight 20. +; +; CHECK-LABEL: Machine code for function left_leaning_weight_balanced_tree: +; CHECK: BB#0: derived from LLVM BB %entry +; CHECK-NOT: Successors +; CHECK: Successors according to CFG: BB#8(13) BB#9(20) +} + +!1 = !{!"branch_weights", + ; Default: + i32 1, + ; Case 0, 10, 20: + i32 10, i32 1, i32 1, + ; Case 30, 40, 50: + i32 1, i32 10, i32 10}