summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorTim Shen <timshen91@gmail.com>2018-06-21 02:15:32 +0000
committerTim Shen <timshen91@gmail.com>2018-06-21 02:15:32 +0000
commit433b9761ceccc16047d1f1e889f111d245729919 (patch)
tree0e54cdc1ea8c6f918d8f493ae7daf9d1a621b68d /llvm
parent5af61e0a2829122bfba90427648d9a0aa7f00c8d (diff)
downloadbcm5719-llvm-433b9761ceccc16047d1f1e889f111d245729919.tar.gz
bcm5719-llvm-433b9761ceccc16047d1f1e889f111d245729919.zip
Revert "[SCEV] Improve zext(A /u B) and zext(A % B)"
This reverts commit r335197, as some bots are not happy. llvm-svn: 335198
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Analysis/ScalarEvolution.h4
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp54
-rw-r--r--llvm/test/Analysis/ScalarEvolution/zext-divrem.ll42
3 files changed, 0 insertions, 100 deletions
diff --git a/llvm/include/llvm/Analysis/ScalarEvolution.h b/llvm/include/llvm/Analysis/ScalarEvolution.h
index 89918e3c205..9a124c9516b 100644
--- a/llvm/include/llvm/Analysis/ScalarEvolution.h
+++ b/llvm/include/llvm/Analysis/ScalarEvolution.h
@@ -1845,10 +1845,6 @@ private:
/// accordingly.
void addToLoopUseLists(const SCEV *S);
- /// Try to match the pattern generated by getURemExpr(A, B). If successful,
- /// Assign A and B to LHS and RHS, respectively.
- bool matchURem(const SCEV *Expr, const SCEV *&LHS, const SCEV *&RHS);
-
FoldingSet<SCEV> UniqueSCEVs;
FoldingSet<SCEVPredicate> UniquePreds;
BumpPtrAllocator SCEVAllocator;
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 609d04bbd7b..705272cd73d 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -1756,20 +1756,6 @@ ScalarEvolution::getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
}
}
- // zext(A % B) --> zext(A) % zext(B)
- {
- const SCEV *LHS;
- const SCEV *RHS;
- if (matchURem(Op, LHS, RHS))
- return getURemExpr(getZeroExtendExpr(LHS, Ty, Depth + 1),
- getZeroExtendExpr(RHS, Ty, Depth + 1));
- }
-
- // zext(A / B) --> zext(A) / zext(B).
- if (auto *Div = dyn_cast<SCEVUDivExpr>(Op))
- return getUDivExpr(getZeroExtendExpr(Div->getLHS(), Ty, Depth + 1),
- getZeroExtendExpr(Div->getRHS(), Ty, Depth + 1));
-
if (auto *SA = dyn_cast<SCEVAddExpr>(Op)) {
// zext((A + B + ...)<nuw>) --> (zext(A) + zext(B) + ...)<nuw>
if (SA->hasNoUnsignedWrap()) {
@@ -12167,43 +12153,3 @@ void PredicatedScalarEvolution::print(raw_ostream &OS, unsigned Depth) const {
OS.indent(Depth + 2) << "--> " << *II->second.second << "\n";
}
}
-
-// Match the mathematical pattern A - (A / B) * B, where A and B can be
-// arbitrary expressions.
-// It's not always easy, as A and B can be folded (imagine A is X / 2, and B is
-// 4, A / B becomes X / 8).
-bool ScalarEvolution::matchURem(const SCEV *Expr, const SCEV *&LHS,
- const SCEV *&RHS) {
- const auto *Add = dyn_cast<SCEVAddExpr>(Expr);
- if (Add == nullptr || Add->getNumOperands() != 2)
- return false;
-
- const SCEV *A = Add->getOperand(1);
- const auto *Mul = dyn_cast<SCEVMulExpr>(Add->getOperand(0));
-
- if (Mul == nullptr)
- return false;
-
- const auto MatchURemWithDivisor = [&](const SCEV *B) {
- // (SomeExpr + (-(SomeExpr / B) * B)).
- if (Expr == getURemExpr(A, B)) {
- LHS = A;
- RHS = B;
- return true;
- }
- return false;
- };
-
- // (SomeExpr + (-1 * (SomeExpr / B) * B)).
- if (Mul->getNumOperands() == 3 && isa<SCEVConstant>(Mul->getOperand(0)))
- return MatchURemWithDivisor(Mul->getOperand(1)) ||
- MatchURemWithDivisor(Mul->getOperand(2));
-
- // (SomeExpr + ((-SomeExpr / B) * B)) or (SomeExpr + ((SomeExpr / B) * -B)).
- if (Mul->getNumOperands() == 2)
- return MatchURemWithDivisor(Mul->getOperand(1)) ||
- MatchURemWithDivisor(Mul->getOperand(0)) ||
- MatchURemWithDivisor(getNegativeSCEV(Mul->getOperand(1))) ||
- MatchURemWithDivisor(getNegativeSCEV(Mul->getOperand(0)));
- return false;
-};
diff --git a/llvm/test/Analysis/ScalarEvolution/zext-divrem.ll b/llvm/test/Analysis/ScalarEvolution/zext-divrem.ll
deleted file mode 100644
index 86037437f97..00000000000
--- a/llvm/test/Analysis/ScalarEvolution/zext-divrem.ll
+++ /dev/null
@@ -1,42 +0,0 @@
-; RUN: opt -analyze -scalar-evolution -S < %s | FileCheck %s
-
-define i64 @test1(i32 %a, i32 %b) {
-; CHECK-LABEL: @test1
- %div = udiv i32 %a, %b
- %zext = zext i32 %div to i64
-; CHECK: %zext
-; CHECK-NEXT: --> ((zext i32 %a to i64) /u (zext i32 %b to i64))
- ret i64 %zext
-}
-
-define i64 @test2(i32 %a, i32 %b) {
-; CHECK-LABEL: @test2
- %rem = urem i32 %a, %b
- %zext = zext i32 %rem to i64
-; CHECK: %zext
-; CHECK-NEXT: --> ((zext i32 %a to i64) + (-1 * (zext i32 %b to i64) * ((zext i32 %a to i64) /u (zext i32 %b to i64))))
- ret i64 %zext
-}
-
-define i64 @test3(i32 %a, i32 %b) {
-; CHECK-LABEL: @test3
- %div = udiv i32 %a, %b
- %mul = mul i32 %div, %b
- %sub = sub i32 %a, %mul
- %zext = zext i32 %sub to i64
-; CHECK: %zext
-; CHECK-NEXT: --> ((zext i32 %a to i64) + (-1 * (zext i32 %b to i64) * ((zext i32 %a to i64) /u (zext i32 %b to i64))))
- ret i64 %zext
-}
-
-define i64 @test4(i32 %t) {
-; CHECK-LABEL: @test4
- %a = udiv i32 %t, 2
- %div = udiv i32 %t, 112
- %mul = mul i32 %div, 56
- %sub = sub i32 %a, %mul
- %zext = zext i32 %sub to i64
-; CHECK: %zext
-; CHECK-NEXT: --> ((-56 * ((zext i32 %t to i64) /u 112)) + ((zext i32 %t to i64) /u 2))
- ret i64 %zext
-}
OpenPOWER on IntegriCloud