From 845435c86ac9fdc92093b7f1459589324b73d41f Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Tue, 16 Feb 2016 17:14:30 +0000 Subject: [PATCH] Revert 260705, it appears to be causing pr26628 The root issue appears to be a confusion around what makeNoWrapRegion actually does. It seems likely we need two versions of this function with slightly different semantics. llvm-svn: 260981 --- llvm/lib/Analysis/LazyValueInfo.cpp | 21 --------- .../Transforms/CorrelatedValuePropagation/basic.ll | 55 ---------------------- 2 files changed, 76 deletions(-) diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp index d21b1bd..8f12111 100644 --- a/llvm/lib/Analysis/LazyValueInfo.cpp +++ b/llvm/lib/Analysis/LazyValueInfo.cpp @@ -961,27 +961,6 @@ bool LazyValueInfoCache::solveBlockValueConstantRange(LVILatticeVal &BBLV, if (isa(BBI)) { if (ConstantInt *RHS = dyn_cast(BBI->getOperand(1))) { RHSRange = ConstantRange(RHS->getValue()); - - // Try to use information about wrap flags to refine the range LHS can - // legally have. This is a slightly weird way to implement forward - // propagation over overflowing instructions, but it seems to be the only - // clean one we have. NOTE: Because we may have speculated the - // instruction, we can't constrain other uses of LHS even if they would - // seem to be equivelent control dependent with this op. - if (auto *OBO = dyn_cast(BBI)) { - unsigned WrapKind = 0; - if (OBO->hasNoSignedWrap()) - WrapKind |= OverflowingBinaryOperator::NoSignedWrap; - if (OBO->hasNoUnsignedWrap()) - WrapKind |= OverflowingBinaryOperator::NoUnsignedWrap; - - if (WrapKind) { - auto OpCode = static_cast(BBI->getOpcode()); - auto NoWrapCR = - ConstantRange::makeNoWrapRegion(OpCode, RHS->getValue(), WrapKind); - LHSRange = LHSRange.intersectWith(NoWrapCR); - } - } } else { BBLV.markOverdefined(); return true; diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll b/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll index b0dacbf..9d1253a 100644 --- a/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll +++ b/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll @@ -199,58 +199,3 @@ out: next: ret void } - -; Can we use nsw in LVI to prove lack of overflow? -define i1 @add_nsw(i32 %s) { -; CHECK-LABEL: @add_nsw( -entry: - %cmp = icmp sgt i32 %s, 0 - br i1 %cmp, label %positive, label %out - -positive: - %add = add nsw i32 %s, 1 - %res = icmp sgt i32 %add, 0 - br label %next -next: -; CHECK: next: -; CHECK: ret i1 true - ret i1 %res -out: - ret i1 false -} - -define i1 @add_nsw2(i32 %s) { -; CHECK-LABEL: @add_nsw2( -entry: - %cmp = icmp sge i32 %s, 0 - br i1 %cmp, label %positive, label %out - -positive: - %add = add nsw i32 %s, 1 - %res = icmp ne i32 %add, 0 - br label %next -next: -; CHECK: next: -; CHECK: ret i1 true - ret i1 %res -out: - ret i1 false -} - -define i1 @add_nuw(i32 %s) { -; CHECK-LABEL: @add_nuw( -entry: - %cmp = icmp ult i32 %s, 400 - br i1 %cmp, label %positive, label %out - -positive: - %add = add nsw i32 %s, 1 - %res = icmp ne i32 %add, -100 - br label %next -next: -; CHECK: next: -; CHECK: ret i1 true - ret i1 %res -out: - ret i1 false -} -- 2.7.4