[llvm] r361698 - [CVP] Remove unnecessary checks for empty GNWR; NFC
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Sat May 25 07:11:56 PDT 2019
Author: nikic
Date: Sat May 25 07:11:55 2019
New Revision: 361698
URL: http://llvm.org/viewvc/llvm-project?rev=361698&view=rev
Log:
[CVP] Remove unnecessary checks for empty GNWR; NFC
The guaranteed no-wrap region is never empty, it always contains at
least zero, so these optimizations don't ever apply.
To make this more obviously true, replace the conversative return
in makeGNWR with an assertion.
Modified:
llvm/trunk/lib/IR/ConstantRange.cpp
llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
Modified: llvm/trunk/lib/IR/ConstantRange.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/ConstantRange.cpp?rev=361698&r1=361697&r2=361698&view=diff
==============================================================================
--- llvm/trunk/lib/IR/ConstantRange.cpp (original)
+++ llvm/trunk/lib/IR/ConstantRange.cpp Sat May 25 07:11:55 2019
@@ -238,8 +238,7 @@ ConstantRange::makeGuaranteedNoWrapRegio
switch (BinOp) {
default:
- // Conservative answer: empty set
- return getEmpty(BitWidth);
+ llvm_unreachable("Unsupported binary op");
case Instruction::Add: {
if (Unsigned)
Modified: llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp?rev=361698&r1=361697&r2=361698&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp Sat May 25 07:11:55 2019
@@ -400,15 +400,12 @@ static bool processSwitch(SwitchInst *SI
// See if we can prove that the given overflow intrinsic will not overflow.
static bool willNotOverflow(WithOverflowInst *WO, LazyValueInfo *LVI) {
- Value *RHS = WO->getRHS();
- ConstantRange RRange = LVI->getConstantRange(RHS, WO->getParent(), WO);
+ ConstantRange LRange = LVI->getConstantRange(
+ WO->getLHS(), WO->getParent(), WO);
+ ConstantRange RRange = LVI->getConstantRange(
+ WO->getRHS(), WO->getParent(), WO);
ConstantRange NWRegion = ConstantRange::makeGuaranteedNoWrapRegion(
WO->getBinaryOp(), RRange, WO->getNoWrapKind());
- // As an optimization, do not compute LRange if we do not need it.
- if (NWRegion.isEmptySet())
- return false;
- Value *LHS = WO->getLHS();
- ConstantRange LRange = LVI->getConstantRange(LHS, WO->getParent(), WO);
return NWRegion.contains(LRange);
}
@@ -626,36 +623,23 @@ static bool processBinOp(BinaryOperator
Value *LHS = BinOp->getOperand(0);
Value *RHS = BinOp->getOperand(1);
+ ConstantRange LRange = LVI->getConstantRange(LHS, BB, BinOp);
ConstantRange RRange = LVI->getConstantRange(RHS, BB, BinOp);
- // Initialize LRange only if we need it. If we know that guaranteed no wrap
- // range for the given RHS range is empty don't spend time calculating the
- // range for the LHS.
- Optional<ConstantRange> LRange;
- auto LazyLRange = [&] () {
- if (!LRange)
- LRange = LVI->getConstantRange(LHS, BB, BinOp);
- return LRange.getValue();
- };
-
bool Changed = false;
if (!NUW) {
ConstantRange NUWRange = ConstantRange::makeGuaranteedNoWrapRegion(
BinOp->getOpcode(), RRange, OBO::NoUnsignedWrap);
- if (!NUWRange.isEmptySet()) {
- bool NewNUW = NUWRange.contains(LazyLRange());
- BinOp->setHasNoUnsignedWrap(NewNUW);
- Changed |= NewNUW;
- }
+ bool NewNUW = NUWRange.contains(LRange);
+ BinOp->setHasNoUnsignedWrap(NewNUW);
+ Changed |= NewNUW;
}
if (!NSW) {
ConstantRange NSWRange = ConstantRange::makeGuaranteedNoWrapRegion(
BinOp->getOpcode(), RRange, OBO::NoSignedWrap);
- if (!NSWRange.isEmptySet()) {
- bool NewNSW = NSWRange.contains(LazyLRange());
- BinOp->setHasNoSignedWrap(NewNSW);
- Changed |= NewNSW;
- }
+ bool NewNSW = NSWRange.contains(LRange);
+ BinOp->setHasNoSignedWrap(NewNSW);
+ Changed |= NewNSW;
}
return Changed;
More information about the llvm-commits
mailing list