[llvm] [DAG] ISD::matchUnaryPredicate / matchUnaryFpPredicate / matchBinaryPredicate - add DemandedElts variant (PR #183013)

via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 2 00:14:48 PST 2026


================
@@ -6173,7 +6166,8 @@ bool SelectionDAG::isKnownNeverZero(SDValue Op, const APInt &DemandedElts,
     return !V.isZero();
   };
 
-  if (ISD::matchUnaryPredicate(Op, IsNeverZero))
+  if (ISD::matchUnaryPredicate(Op, DemandedElts, IsNeverZero,
+                               /*AllowUndefs=*/false, /*AllowTruncation=*/true))
----------------
VachanVY wrote:

But the below tests were failing with the default values, so I added `/*AllowTruncation=*/true`.

<details>
  <summary>Failing Tests</summary

Script:
--
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/unittests/Target/AArch64/./AArch64Tests --gtest_filter=AArch64SelectionDAGTest.KnownNeverZero_Constants
--
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:1463
Value of: DAG->isKnownNeverZero(Vec04, DemandHi)
  Actual: false
Expected: true


LLVM-Unit.Target/AArch64/_/AArch64Tests/AArch64SelectionDAGTest/KnownNeverZero_Select
Script:
--
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/unittests/Target/AArch64/./AArch64Tests --gtest_filter=AArch64SelectionDAGTest.KnownNeverZero_Select
--
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:1510
Value of: DAG->isKnownNeverZero(VSelect444Big, DemandLo)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:1514
Value of: DAG->isKnownNeverZero(VSelect0444, DemandHi)
  Actual: false
Expected: true


LLVM-Unit.Target/AArch64/_/AArch64Tests/AArch64SelectionDAGTest/KnownToBeAPowerOfTwo_Constants
Script:
--
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/unittests/Target/AArch64/./AArch64Tests --gtest_filter=AArch64SelectionDAGTest.KnownToBeAPowerOfTwo_Constants
--
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:889
Value of: DAG->isKnownToBeAPowerOfTwo(Vec04, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:890
Value of: DAG->isKnownToBeAPowerOfTwo(Vec44)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:891
Value of: DAG->isKnownToBeAPowerOfTwo(Vec44, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:893
Value of: DAG->isKnownToBeAPowerOfTwo(Vec4Big, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:895
Value of: DAG->isKnownToBeAPowerOfTwo(Vec0Big, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:899
Value of: DAG->isKnownToBeAPowerOfTwo(Vec04, DemandLo, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:902
Value of: DAG->isKnownToBeAPowerOfTwo(Vec04, DemandHi)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:903
Value of: DAG->isKnownToBeAPowerOfTwo(Vec04, DemandHi, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:910
Value of: DAG->isKnownToBeAPowerOfTwo(Splat4, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:911
Value of: DAG->isKnownToBeAPowerOfTwo(Splat4)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:912
Value of: DAG->isKnownToBeAPowerOfTwo(Splat4, true)
  Actual: false
Expected: true

/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp:914
Value of: DAG->isKnownToBeAPowerOfTwo(SplatBig, true)
  Actual: false
Expected: true

<details>

https://github.com/llvm/llvm-project/pull/183013


More information about the llvm-commits mailing list