From 51a9d17bfc9cf9b2f457bdb6df58811f999a0c66 Mon Sep 17 00:00:00 2001 From: Cong Hou Date: Thu, 17 Dec 2015 01:29:08 +0000 Subject: [PATCH] Fix PR25838. This is a quick fix to PR25838. The issue comes from the restriction that we cannot normalize probabilities containing both known and unknown ones. A patch that removes this restriction is under the review now: http://reviews.llvm.org/D15548 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255867 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/IfConversion.cpp | 6 ++++++ test/CodeGen/ARM/pr25838.ll | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 test/CodeGen/ARM/pr25838.ll diff --git a/lib/CodeGen/IfConversion.cpp b/lib/CodeGen/IfConversion.cpp index a1835fa3297..c38c9d22266 100644 --- a/lib/CodeGen/IfConversion.cpp +++ b/lib/CodeGen/IfConversion.cpp @@ -1662,6 +1662,12 @@ void IfConverter::MergeBlocks(BBInfo &ToBBI, BBInfo &FromBBI, bool AddEdges) { ToBBI.BB->splice(ToBBI.BB->end(), FromBBI.BB, FromBBI.BB->begin(), FromBBI.BB->end()); + // Force normalizing the successors' probabilities of ToBBI.BB to convert all + // unknown probabilities into known ones. + // FIXME: This usage is too tricky and in the future we would like to + // eliminate all unknown probabilities in MBB. + ToBBI.BB->normalizeSuccProbs(); + SmallVector FromSuccs(FromBBI.BB->succ_begin(), FromBBI.BB->succ_end()); MachineBasicBlock *NBB = getNextBlock(FromBBI.BB); diff --git a/test/CodeGen/ARM/pr25838.ll b/test/CodeGen/ARM/pr25838.ll new file mode 100644 index 00000000000..0aa95fd2d72 --- /dev/null +++ b/test/CodeGen/ARM/pr25838.ll @@ -0,0 +1,34 @@ +; RUN: llc < %s +; PR25838 + +target triple = "armv7--linux-android" + +%0 = type { i32, i32 } + +define i32 @foo(%0* readonly) { + br i1 undef, label %12, label %2 + +;