From 1956a48d273dca31d379b3b032bf772040d3c93d Mon Sep 17 00:00:00 2001 From: Serguei Katkov Date: Fri, 27 Apr 2018 08:02:50 +0000 Subject: [PATCH] [SCEV] Add trivial case handling for umin utilities. NFC. Reviewers: sanjoy, mkazantsev Reviewed By: mkazantsev Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D46175 llvm-svn: 331022 --- llvm/lib/Analysis/ScalarEvolution.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index f1ea3a8c546f..ab21cd150f81 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -3567,6 +3567,11 @@ const SCEV *ScalarEvolution::getUMinExpr(const SCEV *LHS, } const SCEV *ScalarEvolution::getUMinExpr(SmallVectorImpl &Ops) { + assert(!Ops.empty() && "At least one operand must be!"); + // Trivial case. + if (Ops.size() == 1) + return Ops[0]; + // ~umax(~x, ~y, ~z) == umin(x, y, z). SmallVector NotOps; for (auto *S : Ops) @@ -3965,6 +3970,11 @@ const SCEV *ScalarEvolution::getUMinFromMismatchedTypes(const SCEV *LHS, const SCEV *ScalarEvolution::getUMinFromMismatchedTypes( SmallVectorImpl &Ops) { + assert(!Ops.empty() && "At least one operand must be!"); + // Trivial case. + if (Ops.size() == 1) + return Ops[0]; + // Find the max type first. Type *MaxType = nullptr; for (auto *S : Ops) @@ -6718,8 +6728,7 @@ ScalarEvolution::BackedgeTakenInfo::getExact(const Loop *L, ScalarEvolution *SE, "Predicate should be always true!"); } - assert(!Ops.empty() && "Loop without exits"); - return Ops.size() == 1 ? Ops[0] : SE->getUMinFromMismatchedTypes(Ops); + return SE->getUMinFromMismatchedTypes(Ops); } /// Get the exact not taken count for this loop exit.