[llvm] [X86] computeKnownBitsForTargetNode - add X86ISD::FAND coverage (PR #182204)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 19 01:32:07 PST 2026


https://github.com/RKSimon updated https://github.com/llvm/llvm-project/pull/182204

>From c968a2f72abcda8a3ac5958250fd4d985a40053d Mon Sep 17 00:00:00 2001
From: xinlongchen <xinlongchen at tencent.com>
Date: Thu, 19 Feb 2026 09:14:02 +0800
Subject: [PATCH] [X86] computeKnownBitsForTargetNode - add X86ISD::FAND
 coverage

---
 llvm/lib/Target/X86/X86ISelLowering.cpp       |  1 +
 .../Target/X86/X86SelectionDAGTest.cpp        | 24 +++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 3678327627b97..c8154b51e4687 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -39312,6 +39312,7 @@ void X86TargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
     }
     break;
   }
+  case X86ISD::FAND:
   case X86ISD::AND: {
     if (Op.getResNo() == 0) {
       KnownBits Known2;
diff --git a/llvm/unittests/Target/X86/X86SelectionDAGTest.cpp b/llvm/unittests/Target/X86/X86SelectionDAGTest.cpp
index b546908a48931..1099e00ca6ef7 100644
--- a/llvm/unittests/Target/X86/X86SelectionDAGTest.cpp
+++ b/llvm/unittests/Target/X86/X86SelectionDAGTest.cpp
@@ -76,6 +76,30 @@ class X86SelectionDAGTest : public testing::Test {
   std::unique_ptr<SelectionDAG> DAG;
 };
 
+TEST_F(X86SelectionDAGTest, computeKnownBits_FAND) {
+  SDLoc Loc;
+
+  auto SrcF32 = DAG->getCopyFromReg(DAG->getEntryNode(), Loc, 1, MVT::f32);
+  auto ZeroF32 = DAG->getConstantFP(+0.0, Loc, MVT::f32);
+  auto OpF32 = DAG->getNode(X86ISD::FAND, Loc, MVT::f32, ZeroF32, SrcF32);
+  KnownBits KnownF32 = DAG->computeKnownBits(OpF32);
+  EXPECT_TRUE(KnownF32.isZero());
+
+  auto Src2xF64 = DAG->getCopyFromReg(DAG->getEntryNode(), Loc, 1, MVT::v2f64);
+  auto ZeroF64 = DAG->getConstantFP(+0.0, Loc, MVT::f64);
+  auto SignBitF64 = DAG->getConstantFP(-0.0, Loc, MVT::f64);
+  auto LoZeroHiSign2xF64 =
+      DAG->getBuildVector(MVT::v2f64, Loc, {ZeroF64, SignBitF64});
+  auto Op2xF64 =
+      DAG->getNode(X86ISD::FAND, Loc, MVT::v2f64, LoZeroHiSign2xF64, Src2xF64);
+  KnownBits KnownAll2xF64 = DAG->computeKnownBits(Op2xF64);
+  KnownBits KnownLo2xF64 = DAG->computeKnownBits(Op2xF64, APInt(2, 1));
+  KnownBits KnownHi2xF64 = DAG->computeKnownBits(Op2xF64, APInt(2, 2));
+  EXPECT_FALSE(KnownAll2xF64.isZero());
+  EXPECT_TRUE(KnownLo2xF64.isZero());
+  EXPECT_FALSE(KnownHi2xF64.isZero());
+}
+
 TEST_F(X86SelectionDAGTest, computeKnownBits_FANDN) {
   SDLoc Loc;
 



More information about the llvm-commits mailing list