[llvm] [AArch64] canCreateUndefOrPoisonForTargetNode - AArch64ISD::MOVI opcodes can't create undef/poison (PR #149323)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 17 07:52:50 PDT 2025


================
@@ -30398,6 +30398,23 @@ bool AArch64TargetLowering::SimplifyDemandedBitsForTargetNode(
       Op, OriginalDemandedBits, OriginalDemandedElts, Known, TLO, Depth);
 }
 
+bool AArch64TargetLowering::canCreateUndefOrPoisonForTargetNode(
+    SDValue Op, const APInt &DemandedElts, const SelectionDAG &DAG,
+    bool PoisonOnly, bool ConsiderFlags, unsigned Depth) const {
+
+  // TODO: Add more target nodes.
+  switch (Op.getOpcode()) {
+  case AArch64ISD::MOVI:
+  case AArch64ISD::MOVIedit:
+  case AArch64ISD::MOVImsl:
+  case AArch64ISD::MOVIshift:
+  case AArch64ISD::MVNIshift:
----------------
RKSimon wrote:

In fact I think these can be put into a AArch64TargetLowering::isGuaranteedNotToBeUndefOrPoisonForTargetNode implementation, but this should have the same effect

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


More information about the llvm-commits mailing list