diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2021-07-29 20:15:26 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2021-07-29 20:15:26 +0000 |
commit | 344a3780b2e33f6ca763666c380202b18aab72a3 (patch) | |
tree | f0b203ee6eb71d7fdd792373e3c81eb18d6934dd /llvm/include/llvm/Support/KnownBits.h | |
parent | b60736ec1405bb0a8dd40989f67ef4c93da068ab (diff) | |
download | src-344a3780b2e33f6ca763666c380202b18aab72a3.tar.gz src-344a3780b2e33f6ca763666c380202b18aab72a3.zip |
Vendor import of llvm-project main 88e66fa60ae5, the last commit beforevendor/llvm-project/llvmorg-13-init-16847-g88e66fa60ae5vendor/llvm-project/llvmorg-12.0.1-rc2-0-ge7dac564cd0evendor/llvm-project/llvmorg-12.0.1-0-gfed41342a82f
the upstream release/13.x branch was created.
Diffstat (limited to 'llvm/include/llvm/Support/KnownBits.h')
-rw-r--r-- | llvm/include/llvm/Support/KnownBits.h | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index d854aadbd430..cfec5796493f 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -204,8 +204,13 @@ public: /// tracking. KnownBits sextInReg(unsigned SrcBitWidth) const; - /// Return a KnownBits with the extracted bits - /// [bitPosition,bitPosition+numBits). + /// Insert the bits from a smaller known bits starting at bitPosition. + void insertBits(const KnownBits &SubBits, unsigned BitPosition) { + Zero.insertBits(SubBits.Zero, BitPosition); + One.insertBits(SubBits.One, BitPosition); + } + + /// Return a subset of the known bits from [bitPosition,bitPosition+numBits). KnownBits extractBits(unsigned NumBits, unsigned BitPosition) const { return KnownBits(Zero.extractBits(NumBits, BitPosition), One.extractBits(NumBits, BitPosition)); @@ -285,6 +290,11 @@ public: return KnownBits(LHS.Zero & RHS.Zero, LHS.One & RHS.One); } + /// Return true if LHS and RHS have no common bits set. + static bool haveNoCommonBitsSet(const KnownBits &LHS, const KnownBits &RHS) { + return (LHS.Zero | RHS.Zero).isAllOnesValue(); + } + /// Compute known bits resulting from adding LHS, RHS and a 1-bit Carry. static KnownBits computeForAddCarry( const KnownBits &LHS, const KnownBits &RHS, const KnownBits &Carry); @@ -294,7 +304,13 @@ public: KnownBits RHS); /// Compute known bits resulting from multiplying LHS and RHS. - static KnownBits computeForMul(const KnownBits &LHS, const KnownBits &RHS); + static KnownBits mul(const KnownBits &LHS, const KnownBits &RHS); + + /// Compute known bits from sign-extended multiply-hi. + static KnownBits mulhs(const KnownBits &LHS, const KnownBits &RHS); + + /// Compute known bits from zero-extended multiply-hi. + static KnownBits mulhu(const KnownBits &LHS, const KnownBits &RHS); /// Compute known bits for udiv(LHS, RHS). static KnownBits udiv(const KnownBits &LHS, const KnownBits &RHS); @@ -359,18 +375,6 @@ public: /// Determine if these known bits always give the same ICMP_SLE result. static Optional<bool> sle(const KnownBits &LHS, const KnownBits &RHS); - /// Insert the bits from a smaller known bits starting at bitPosition. - void insertBits(const KnownBits &SubBits, unsigned BitPosition) { - Zero.insertBits(SubBits.Zero, BitPosition); - One.insertBits(SubBits.One, BitPosition); - } - - /// Return a subset of the known bits from [bitPosition,bitPosition+numBits). - KnownBits extractBits(unsigned NumBits, unsigned BitPosition) { - return KnownBits(Zero.extractBits(NumBits, BitPosition), - One.extractBits(NumBits, BitPosition)); - } - /// Update known bits based on ANDing with RHS. KnownBits &operator&=(const KnownBits &RHS); @@ -390,6 +394,9 @@ public: KnownBits reverseBits() { return KnownBits(Zero.reverseBits(), One.reverseBits()); } + + void print(raw_ostream &OS) const; + void dump() const; }; inline KnownBits operator&(KnownBits LHS, const KnownBits &RHS) { |