Revert "Teach CorrelatedValuePropagation to mark adds as no wrap"

This reverts commit r277592, trying to fix the AArch64 42VMA buildbot.

llvm-svn: 277607
This commit is contained in:
Renato Golin 2016-08-03 16:20:48 +00:00
parent 0e4b7646c1
commit f583097434
2 changed files with 0 additions and 148 deletions

View File

@ -18,7 +18,6 @@
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/LazyValueInfo.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/ConstantRange.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
@ -382,59 +381,6 @@ static bool processSDiv(BinaryOperator *SDI, LazyValueInfo *LVI) {
return true;
}
static bool processAdd(BinaryOperator *AddOp, LazyValueInfo *LVI) {
typedef OverflowingBinaryOperator OBO;
if (AddOp->getType()->isVectorTy() || hasLocalDefs(AddOp))
return false;
bool NSW = AddOp->hasNoSignedWrap();
bool NUW = AddOp->hasNoUnsignedWrap();
if (NSW && NUW)
return false;
BasicBlock *BB = AddOp->getParent();
Value *LHS = AddOp->getOperand(0);
Value *RHS = AddOp->getOperand(1);
ConstantRange LRange = LVI->getConstantRange(LHS, BB, AddOp);
// Initialize RRange only if we need it. If we know that guaranteed no wrap
// range for the given LHS range is empty don't spend time calculating the
// range for the RHS.
Optional<ConstantRange> RRange;
auto LazyRRange = [&] () {
if (!RRange)
RRange = LVI->getConstantRange(RHS, BB, AddOp);
return RRange.getValue();
};
bool Changed = false;
if (!NUW) {
ConstantRange NUWRange =
LRange.makeGuaranteedNoWrapRegion(BinaryOperator::Add, LRange,
OBO::NoUnsignedWrap);
if (!NUWRange.isEmptySet()) {
bool NewNUW = NUWRange.contains(LazyRRange());
AddOp->setHasNoUnsignedWrap(NewNUW);
Changed |= NewNUW;
}
}
if (!NSW) {
ConstantRange NSWRange =
LRange.makeGuaranteedNoWrapRegion(BinaryOperator::Add, LRange,
OBO::NoSignedWrap);
if (!NSWRange.isEmptySet()) {
bool NewNSW = NSWRange.contains(LazyRRange());
AddOp->setHasNoSignedWrap(NewNSW);
Changed |= NewNSW;
}
}
return Changed;
}
static Constant *getConstantAt(Value *V, Instruction *At, LazyValueInfo *LVI) {
if (Constant *C = LVI->getConstant(V, At->getParent(), At))
return C;
@ -490,9 +436,6 @@ static bool runImpl(Function &F, LazyValueInfo *LVI) {
case Instruction::SDiv:
BBChanged |= processSDiv(cast<BinaryOperator>(II), LVI);
break;
case Instruction::Add:
BBChanged |= processAdd(cast<BinaryOperator>(II), LVI);
break;
}
}

View File

@ -1,91 +0,0 @@
; RUN: opt < %s -correlated-propagation -S | FileCheck %s
; CHECK-LABEL: @test0(
define void @test0(i32 %a) {
entry:
%cmp = icmp slt i32 %a, 100
br i1 %cmp, label %bb, label %exit
bb:
; CHECK: %add = add nsw i32 %a, 1
%add = add i32 %a, 1
br label %exit
exit:
ret void
}
; CHECK-LABEL: @test1(
define void @test1(i32 %a) {
entry:
%cmp = icmp ult i32 %a, 100
br i1 %cmp, label %bb, label %exit
bb:
; CHECK: %add = add nuw nsw i32 %a, 1
%add = add i32 %a, 1
br label %exit
exit:
ret void
}
; CHECK-LABEL: @test2(
define void @test2(i32 %a) {
entry:
%cmp = icmp ult i32 %a, -1
br i1 %cmp, label %bb, label %exit
bb:
; CHECK: %add = add nuw i32 %a, 1
%add = add i32 %a, 1
br label %exit
exit:
ret void
}
; CHECK-LABEL: @test3(
define void @test3(i32 %a) {
entry:
%cmp = icmp ule i32 %a, -1
br i1 %cmp, label %bb, label %exit
bb:
; CHECK: %add = add i32 %a, 1
%add = add i32 %a, 1
br label %exit
exit:
ret void
}
; CHECK-LABEL: @test4(
define void @test4(i32 %a) {
entry:
%cmp = icmp slt i32 %a, 2147483647
br i1 %cmp, label %bb, label %exit
bb:
; CHECK: %add = add nsw i32 %a, 1
%add = add i32 %a, 1
br label %exit
exit:
ret void
}
; CHECK-LABEL: @test5(
define void @test5(i32 %a) {
entry:
%cmp = icmp sle i32 %a, 2147483647
br i1 %cmp, label %bb, label %exit
bb:
; CHECK: %add = add i32 %a, 1
%add = add i32 %a, 1
br label %exit
exit:
ret void
}