From: Sanjay Patel Date: Sun, 3 Mar 2019 18:59:33 +0000 (+0000) Subject: [ValueTracking] do not try to peek through bitcasts in computeKnownBitsFromAssume() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8a5864cec5beb9cf1cf722adaa00fcf471529b1;p=llvm [ValueTracking] do not try to peek through bitcasts in computeKnownBitsFromAssume() There are no tests for this case, and I'm not sure how it could ever work, so I'm just removing this option from the matcher. This should fix PR40940: https://bugs.llvm.org/show_bug.cgi?id=40940 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355292 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp index b4473f857e2..64250f6360e 100644 --- a/lib/Analysis/ValueTracking.cpp +++ b/lib/Analysis/ValueTracking.cpp @@ -617,9 +617,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known, continue; Value *A, *B; - auto m_V = m_CombineOr(m_Specific(V), - m_CombineOr(m_PtrToInt(m_Specific(V)), - m_BitCast(m_Specific(V)))); + auto m_V = m_CombineOr(m_Specific(V), m_PtrToInt(m_Specific(V))); CmpInst::Predicate Pred; uint64_t C; diff --git a/test/Transforms/InstCombine/assume.ll b/test/Transforms/InstCombine/assume.ll index f861741db26..ec345b253fb 100644 --- a/test/Transforms/InstCombine/assume.ll +++ b/test/Transforms/InstCombine/assume.ll @@ -320,6 +320,24 @@ define void @debug_interference(i8 %x) { ret void } +; This would crash. +; Does it ever make sense to peek through a bitcast of the icmp operand? + +define i32 @PR40940(<4 x i8> %x) { +; CHECK-LABEL: @PR40940( +; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X:%.*]], <4 x i8> undef, <4 x i32> +; CHECK-NEXT: [[T2:%.*]] = bitcast <4 x i8> [[SHUF]] to i32 +; CHECK-NEXT: [[T3:%.*]] = icmp ult i32 [[T2]], 65536 +; CHECK-NEXT: call void @llvm.assume(i1 [[T3]]) +; CHECK-NEXT: ret i32 [[T2]] +; + %shuf = shufflevector <4 x i8> %x, <4 x i8> undef, <4 x i32> + %t2 = bitcast <4 x i8> %shuf to i32 + %t3 = icmp ult i32 %t2, 65536 + call void @llvm.assume(i1 %t3) + ret i32 %t2 +} + declare void @llvm.dbg.value(metadata, metadata, metadata) !llvm.dbg.cu = !{!0}