From aa60d169ea62ee375910e684d20932519fe3f64f Mon Sep 17 00:00:00 2001 From: Artur Pilipenko Date: Wed, 24 Nov 2021 13:48:43 -0800 Subject: [PATCH] [CVP] Add a cl::opt for canonicalization of signed relational comparisons This canonicalization breaks the ability to discard checks in some cases. Add a command line option to disable it. This option is on by default, so the change is NFC. See for details: https://reviews.llvm.org/D112895#3149487 --- llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index d1ae35cc17ab2..6d6097c9ece10 100644 --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -52,6 +52,11 @@ using namespace llvm; #define DEBUG_TYPE "correlated-value-propagation" +static cl::opt CanonicalizeICmpPredicatesToUnsigned( + "canonicalize-icmp-predicates-to-unsigned", cl::init(true), cl::Hidden, + cl::desc("Enables canonicalization of signed relational predicates to " + "unsigned (e.g. sgt => ugt)")); + STATISTIC(NumPhis, "Number of phis propagated"); STATISTIC(NumPhiCommon, "Number of phis deleted via common incoming value"); STATISTIC(NumSelects, "Number of selects propagated"); @@ -297,6 +302,9 @@ static bool processMemAccess(Instruction *I, LazyValueInfo *LVI) { } static bool processICmp(ICmpInst *Cmp, LazyValueInfo *LVI) { + if (!CanonicalizeICmpPredicatesToUnsigned) + return false; + // Only for signed relational comparisons of scalar integers. if (Cmp->getType()->isVectorTy() || !Cmp->getOperand(0)->getType()->isIntegerTy())