From: Daniel Berlin Date: Wed, 14 Jun 2017 21:19:52 +0000 (+0000) Subject: PredicateInfo: Don't insert conditional info when a conditional branch jumps to the... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e6be55f220679a424817c6b230bc211238c2b18e;p=llvm PredicateInfo: Don't insert conditional info when a conditional branch jumps to the same target regardless of condition git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305416 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Utils/PredicateInfo.cpp b/lib/Transforms/Utils/PredicateInfo.cpp index 9e71cba4f1b..1260e35e934 100644 --- a/lib/Transforms/Utils/PredicateInfo.cpp +++ b/lib/Transforms/Utils/PredicateInfo.cpp @@ -460,6 +460,9 @@ void PredicateInfo::buildPredicateInfo() { if (auto *BI = dyn_cast(BranchBB->getTerminator())) { if (!BI->isConditional()) continue; + // Can't insert conditional information if they all go to the same place. + if (BI->getSuccessor(0) == BI->getSuccessor(1)) + continue; processBranch(BI, BranchBB, OpsToRename); } else if (auto *SI = dyn_cast(BranchBB->getTerminator())) { processSwitch(SI, BranchBB, OpsToRename); diff --git a/test/Transforms/Util/PredicateInfo/pr33456.ll b/test/Transforms/Util/PredicateInfo/pr33456.ll new file mode 100644 index 00000000000..f1cc83a071b --- /dev/null +++ b/test/Transforms/Util/PredicateInfo/pr33456.ll @@ -0,0 +1,68 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -print-predicateinfo -analyze < %s 2>&1 | FileCheck %s +; Don't insert predicate info for conditions with a single target. +@a = global i32 1, align 4 +@d = common global i32 0, align 4 +@c = common global i32 0, align 4 +@b = common global i32 0, align 4 +@e = common global i32 0, align 4 + +define i32 @main() { +; CHECK-LABEL: @main( +; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @d, align 4 +; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0 +; CHECK-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP13:%.*]] +; CHECK: [[TMP4:%.*]] = load i32, i32* @a, align 4 +; CHECK-NEXT: [[TMP5:%.*]] = load i32, i32* @c, align 4 +; CHECK-NEXT: [[TMP6:%.*]] = icmp slt i32 [[TMP5]], 1 +; CHECK-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP9:%.*]] +; CHECK: [[TMP8:%.*]] = icmp eq i32 [[TMP4]], 0 +; CHECK-NEXT: br i1 [[TMP8]], label [[TMP9]], label [[TMP9]] +; CHECK: [[DOT0:%.*]] = phi i32 [ [[TMP4]], [[TMP7]] ], [ [[TMP4]], [[TMP7]] ], [ [[DOT1:%.*]], [[TMP13]] ], [ [[TMP4]], [[TMP3]] ] +; CHECK-NEXT: [[TMP10:%.*]] = load i32, i32* @b, align 4 +; CHECK-NEXT: [[TMP11:%.*]] = sdiv i32 [[TMP10]], [[DOT0]] +; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i32 [[TMP11]], 0 +; CHECK-NEXT: br i1 [[TMP12]], label [[TMP13]], label [[TMP13]] +; CHECK: [[DOT1]] = phi i32 [ [[DOT0]], [[TMP9]] ], [ [[DOT0]], [[TMP9]] ], [ undef, [[TMP0:%.*]] ] +; CHECK-NEXT: [[TMP14:%.*]] = load i32, i32* @e, align 4 +; CHECK-NEXT: [[TMP15:%.*]] = icmp eq i32 [[TMP14]], 0 +; CHECK-NEXT: br i1 [[TMP15]], label [[TMP16:%.*]], label [[TMP9]] +; CHECK: ret i32 0 +; + %1 = load i32, i32* @d, align 4 + %2 = icmp eq i32 %1, 0 + br i1 %2, label %3, label %13 + +;