diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Analysis/LazyValueInfo.cpp | 21 | ||||
| -rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/basic.ll | 55 |
2 files changed, 0 insertions, 76 deletions
diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp index d21b1bd8937..8f121110051 100644 --- a/llvm/lib/Analysis/LazyValueInfo.cpp +++ b/llvm/lib/Analysis/LazyValueInfo.cpp @@ -961,27 +961,6 @@ bool LazyValueInfoCache::solveBlockValueConstantRange(LVILatticeVal &BBLV, if (isa<BinaryOperator>(BBI)) { if (ConstantInt *RHS = dyn_cast<ConstantInt>(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<OverflowingBinaryOperator>(BBI)) { - unsigned WrapKind = 0; - if (OBO->hasNoSignedWrap()) - WrapKind |= OverflowingBinaryOperator::NoSignedWrap; - if (OBO->hasNoUnsignedWrap()) - WrapKind |= OverflowingBinaryOperator::NoUnsignedWrap; - - if (WrapKind) { - auto OpCode = static_cast<Instruction::BinaryOps>(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 b0dacbf3128..9d1253a1888 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 -} |

