[llvm] r311540 - [InstCombine] Fold branches with irrelevant conditions to a constant.

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 23 02:14:38 PDT 2017


Author: davide
Date: Wed Aug 23 02:14:37 2017
New Revision: 311540

URL: http://llvm.org/viewvc/llvm-project?rev=311540&view=rev
Log:
[InstCombine] Fold branches with irrelevant conditions to a constant.

InstCombine folds instructions with irrelevant conditions to undef.
This, as Nuno confirmed is a bug.
(see https://bugs.llvm.org/show_bug.cgi?id=33409#c1 )

Given the original motivation for the change is that of removing an
USE, we now fold to false instead (which reaches the same goal
without undesired side effects).

Fixes PR33409.

Differential Revision:  https://reviews.llvm.org/D36975

Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp
    llvm/trunk/test/Transforms/InstCombine/branch.ll
    llvm/trunk/test/Transforms/InstCombine/pr33765.ll
    llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll

Modified: llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp?rev=311540&r1=311539&r2=311540&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp Wed Aug 23 02:14:37 2017
@@ -2260,10 +2260,9 @@ Instruction *InstCombiner::visitBranchIn
 
   // If the condition is irrelevant, remove the use so that other
   // transforms on the condition become more effective.
-  if (BI.isConditional() &&
-      BI.getSuccessor(0) == BI.getSuccessor(1) &&
-      !isa<UndefValue>(BI.getCondition())) {
-    BI.setCondition(UndefValue::get(BI.getCondition()->getType()));
+  if (BI.isConditional() && !isa<ConstantInt>(BI.getCondition()) &&
+      BI.getSuccessor(0) == BI.getSuccessor(1)) {
+    BI.setCondition(ConstantInt::getFalse(BI.getCondition()->getType()));
     return &BI;
   }
 

Modified: llvm/trunk/test/Transforms/InstCombine/branch.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/branch.ll?rev=311540&r1=311539&r2=311540&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/branch.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/branch.ll Wed Aug 23 02:14:37 2017
@@ -1,10 +1,12 @@
+; Check that we fold the condition of branches of the
+; form: br <condition> dest1, dest2, where dest1 == dest2.
 ; RUN: opt -instcombine -S < %s | FileCheck %s
 
 define i32 @test(i32 %x) {
 ; CHECK-LABEL: @test
 entry:
 ; CHECK-NOT: icmp
-; CHECK: br i1 undef, 
+; CHECK: br i1 false
   %cmp = icmp ult i32 %x, 7
   br i1 %cmp, label %merge, label %merge
 merge:
@@ -13,4 +15,13 @@ merge:
   ret i32 %x
 }
 
+ at global = global i8 0
 
+define i32 @pat(i32 %x) {
+; CHECK-NOT: icmp false
+; CHECK: br i1 false
+  %y = icmp eq i32 27, ptrtoint(i8* @global to i32)
+  br i1 %y, label %patatino, label %patatino
+patatino:
+  ret i32 %x
+}

Modified: llvm/trunk/test/Transforms/InstCombine/pr33765.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/pr33765.ll?rev=311540&r1=311539&r2=311540&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/pr33765.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/pr33765.ll Wed Aug 23 02:14:37 2017
@@ -6,7 +6,7 @@
 define void @patatino(i8 %beth) {
 ; CHECK-LABEL: @patatino(
 ; CHECK-NEXT:    [[CONV:%.*]] = zext i8 [[BETH:%.*]] to i32
-; CHECK-NEXT:    br i1 undef, label [[IF_THEN9:%.*]], label [[IF_THEN9]]
+; CHECK-NEXT:    br i1 false, label [[IF_THEN9:%.*]], label [[IF_THEN9]]
 ; CHECK:       if.then9:
 ; CHECK-NEXT:    [[MUL:%.*]] = mul nuw nsw i32 [[CONV]], [[CONV]]
 ; CHECK-NEXT:    [[TINKY:%.*]] = load i16, i16* @glob, align 2

Modified: llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll?rev=311540&r1=311539&r2=311540&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll Wed Aug 23 02:14:37 2017
@@ -248,7 +248,7 @@ bb5:
 define i32 @test6(i32 %arg, i1 %arg1) {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    br i1 undef, label [[BB:%.*]], label [[BB]]
+; CHECK-NEXT:    br i1 false, label [[BB:%.*]], label [[BB]]
 ; CHECK:       bb:
 ; CHECK-NEXT:    [[TMP:%.*]] = select i1 [[ARG1:%.*]], i32 [[ARG:%.*]], i32 0
 ; CHECK-NEXT:    ret i32 [[TMP]]




More information about the llvm-commits mailing list