From 94453952fc9503acaef9633c5dd47829c183bfe3 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Sun, 6 Feb 2022 19:40:08 +0000 Subject: [PATCH] [KnownBits] Add support for X*X self-multiplication (update) Rename the SelfMultiply argument to make it clearer that the argument must not be undef Differential Revision: https://reviews.llvm.org/D108992 --- llvm/include/llvm/Support/KnownBits.h | 2 +- llvm/lib/Support/KnownBits.cpp | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index 96b7753..1af7130 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -324,7 +324,7 @@ public: /// Compute known bits resulting from multiplying LHS and RHS. static KnownBits mul(const KnownBits &LHS, const KnownBits &RHS, - bool SelfMultiply = false); + bool NoUndefSelfMultiply = false); /// Compute known bits from sign-extended multiply-hi. static KnownBits mulhs(const KnownBits &LHS, const KnownBits &RHS); diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 8e15406..5ec8506 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -413,12 +413,13 @@ KnownBits KnownBits::abs(bool IntMinIsPoison) const { } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, - bool SelfMultiply) { + bool NoUndefSelfMultiply) { unsigned BitWidth = LHS.getBitWidth(); assert(BitWidth == RHS.getBitWidth() && !LHS.hasConflict() && !RHS.hasConflict() && "Operand mismatch"); - assert((!SelfMultiply || (LHS.One == RHS.One && LHS.Zero == RHS.Zero)) && - "Self multiplication knownbits mismatch"); + assert( + (!NoUndefSelfMultiply || (LHS.One == RHS.One && LHS.Zero == RHS.Zero)) && + "Self multiplication knownbits mismatch"); // Compute the high known-0 bits by multiplying the unsigned max of each side. // Conservatively, M active bits * N active bits results in M + N bits in the @@ -501,7 +502,7 @@ KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, Res.One = BottomKnown.getLoBits(ResultBitsKnown); // If we're self-multiplying then bit[1] is guaranteed to be zero. - if (SelfMultiply && BitWidth > 1) { + if (NoUndefSelfMultiply && BitWidth > 1) { assert(Res.One[1] == 0 && "Self-multiplication failed Quadratic Reciprocity!"); Res.Zero.setBit(1); -- 2.7.4