[PATCH] D142546: [ConstraintElimination] Decompose or instruction if the constant operand < 2^known_zero_bits of the first operand.
Nikita Popov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 26 03:31:20 PST 2023
nikic added inline comments.
================
Comment at: llvm/lib/Transforms/Scalar/ConstraintElimination.cpp:351
+ if (match(V, m_Or(m_Value(Op0), m_ConstantInt(CI)))) {
+ auto KnownBits = computeKnownBits(Op0, DL, MaxAnalysisRecursionDepth - 1);
+ if (CI->getZExtValue() < pow(2, KnownBits.Zero.getZExtValue()))
----------------
zjaffal wrote:
> nikic wrote:
> > You're looking for haveNoCommonBitsSet().
> I tried the following snippet
> ```
> if (match(V, m_Or(m_Value(Op0), m_ConstantInt(CI)))) {
> if (haveNoCommonBitsSet(Op0, CI, DL))
> return MergeResults(Op0, CI, IsSigned);
> }
> ```
> it works for most of the cases but for the following test `define void @test.not.uge.ule`
> ```
> %start.4 = or i8 %start, 4
> %t.4 = icmp ule i8 %start.4, %high
> call void @use(i1 %t.4)
> ```
> `%t.4` is not replaced with true
Isn't that the expected behavior? It's the same with your current patch.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D142546/new/
https://reviews.llvm.org/D142546
More information about the llvm-commits
mailing list