diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2020-11-11 12:07:38 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2020-11-11 12:15:54 +0000 |
commit | 1a62ca65c1f5dfa7ce53d62dcfe261cfbc29c03f (patch) | |
tree | e1e7c293801c72d60c59efbf86e117cb938ef8d4 /llvm/lib/Analysis/ValueTracking.cpp | |
parent | c2a7d9f317df98bd4cfd4a1bf99d69505731aad7 (diff) | |
download | llvm-1a62ca65c1f5dfa7ce53d62dcfe261cfbc29c03f.zip llvm-1a62ca65c1f5dfa7ce53d62dcfe261cfbc29c03f.tar.gz llvm-1a62ca65c1f5dfa7ce53d62dcfe261cfbc29c03f.tar.bz2 |
[KnownBits] Add KnownBits::commonBits helper. NFCI.
We have a frequent pattern where we're merging two KnownBits to get the common/shared bits, and I just fell for the gotcha where I tried to use the & operator to merge them........
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 5ff4fcb..c86fa81 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -1160,8 +1160,7 @@ static void computeKnownBitsFromOperator(const Operator *I, computeKnownBits(I->getOperand(1), Known2, Depth + 1, Q); // Only known if known in both the LHS and RHS. - Known.One &= Known2.One; - Known.Zero &= Known2.Zero; + Known = KnownBits::commonBits(Known, Known2); if (SPF == SPF_ABS) { // RHS from matchSelectPattern returns the negation part of abs pattern. @@ -1515,11 +1514,10 @@ static void computeKnownBitsFromOperator(const Operator *I, // Recurse, but cap the recursion to one level, because we don't // want to waste time spinning around in loops. computeKnownBits(IncValue, Known2, MaxAnalysisRecursionDepth - 1, RecQ); - Known.Zero &= Known2.Zero; - Known.One &= Known2.One; + Known = KnownBits::commonBits(Known, Known2); // If all bits have been ruled out, there's no need to check // more operands. - if (!Known.Zero && !Known.One) + if (Known.isUnknown()) break; } } @@ -1710,8 +1708,7 @@ static void computeKnownBitsFromOperator(const Operator *I, if (!!DemandedRHS) { const Value *RHS = Shuf->getOperand(1); computeKnownBits(RHS, DemandedRHS, Known2, Depth + 1, Q); - Known.One &= Known2.One; - Known.Zero &= Known2.Zero; + Known = KnownBits::commonBits(Known, Known2); } break; } @@ -1740,8 +1737,7 @@ static void computeKnownBitsFromOperator(const Operator *I, DemandedVecElts.clearBit(EltIdx); if (!!DemandedVecElts) { computeKnownBits(Vec, DemandedVecElts, Known2, Depth + 1, Q); - Known.One &= Known2.One; - Known.Zero &= Known2.Zero; + Known = KnownBits::commonBits(Known, Known2); } break; } |