[llvm] [DAG][ARM] computeKnownBitsForTargetNode - add handling for ARMISD VORRIMM\VBICIMM nodes (PR #149494)

David Green via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 26 00:20:08 PDT 2025


================
@@ -20073,6 +20073,23 @@ void ARMTargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
     Known = KnownOp0.intersectWith(KnownOp1);
     break;
   }
+  case ARMISD::VORRIMM:
+  case ARMISD::VBICIMM: {
+    KnownBits KnownLHS = DAG.computeKnownBits(Op.getOperand(0), Depth + 1);
+    unsigned Encoded = Op.getConstantOperandVal(1);
+    unsigned DecEltBits = 0;
+    uint64_t DecodedVal = ARM_AM::decodeVMOVModImm(Encoded, DecEltBits);
+
+    if (Op.getScalarValueSizeInBits() == DecEltBits) {
+      bool IsVORR = Op.getOpcode() == ARMISD::VORRIMM;
+      APInt Imm(DecEltBits, DecodedVal);
+      Known.One = IsVORR ? (KnownLHS.One | Imm) : (KnownLHS.One & ~Imm);
+      Known.Zero = IsVORR ? (KnownLHS.Zero & ~Imm) : (KnownLHS.Zero | Imm);
+    } else {
+      Known = KnownLHS;
----------------
davemgreen wrote:

Can you explain the `Known = KnownLHS;`?

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


More information about the llvm-commits mailing list