Index: llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp =================================================================== --- llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp +++ llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -2260,10 +2260,9 @@ // 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(BI.getCondition())) { - BI.setCondition(UndefValue::get(BI.getCondition()->getType())); + if (BI.isConditional() && !isa(BI.getCondition()) && + BI.getSuccessor(0) == BI.getSuccessor(1)) { + BI.setCondition(ConstantInt::getFalse(BI.getCondition()->getType())); return &BI; } Index: llvm/trunk/test/Transforms/InstCombine/branch.ll =================================================================== --- llvm/trunk/test/Transforms/InstCombine/branch.ll +++ llvm/trunk/test/Transforms/InstCombine/branch.ll @@ -1,10 +1,12 @@ +; Check that we fold the condition of branches of the +; form: br 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 @@ ret i32 %x } +@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 +} Index: llvm/trunk/test/Transforms/InstCombine/pr33765.ll =================================================================== --- llvm/trunk/test/Transforms/InstCombine/pr33765.ll +++ llvm/trunk/test/Transforms/InstCombine/pr33765.ll @@ -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 Index: llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll =================================================================== --- llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll +++ llvm/trunk/test/Transforms/InstCombine/select-cmp-br.ll @@ -248,7 +248,7 @@ 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]]