From 0af20d847ac89f797d613a8a4fc3e7127ccb0b36 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Sat, 13 Mar 2010 02:20:29 +0000 Subject: [PATCH] Fix a typo in ValueTracking that's causing instcombine to delete needed shift instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98416 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/ValueTracking.cpp | 2 +- test/Transforms/InstCombine/shift-sra.ll | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp index 92cbb7c95c0..5ae72f7aba9 100644 --- a/lib/Analysis/ValueTracking.cpp +++ b/lib/Analysis/ValueTracking.cpp @@ -779,7 +779,7 @@ unsigned llvm::ComputeNumSignBits(Value *V, const TargetData *TD, for (unsigned i = 1, e = PN->getNumIncomingValues(); i != e; ++i) { if (Tmp == 1) return Tmp; Tmp = std::min(Tmp, - ComputeNumSignBits(PN->getIncomingValue(1), TD, Depth+1)); + ComputeNumSignBits(PN->getIncomingValue(i), TD, Depth+1)); } return Tmp; } diff --git a/test/Transforms/InstCombine/shift-sra.ll b/test/Transforms/InstCombine/shift-sra.ll index 58f322635c2..a578bbe4d4f 100644 --- a/test/Transforms/InstCombine/shift-sra.ll +++ b/test/Transforms/InstCombine/shift-sra.ll @@ -56,3 +56,23 @@ C: ; CHECK: %P = phi i64 ; CHECK-NEXT: ret i64 %P } + +; rdar://7732987 +define i32 @test5(i32 %Y) { + br i1 undef, label %A, label %C +A: + br i1 undef, label %B, label %D +B: + br label %D +C: + br i1 undef, label %D, label %E +D: + %P = phi i32 [0, %A], [0, %B], [%Y, %C] + %S = ashr i32 %P, 16 + ret i32 %S +; CHECK: @test5 +; CHECK: %P = phi i32 +; CHECK-NEXT: ashr i32 %P, 16 +E: + ret i32 0 +}