[PATCH] D130163: [AArch64] Combine setcc (iN (bitcast (vNi1 X))) with vecreduce_or

Paul Walker via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 20 08:04:48 PDT 2022


paulwalker-arm added inline comments.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:18199-18200
+      LHS->getOpcode() == ISD::BITCAST &&
+      LHS->getSimpleValueType(0) == MVT::i16 &&
+      LHS->getOperand(0)->getSimpleValueType(0) == MVT::v16i1) {
+    MVT OrigVT = LHS->getOperand(0).getSimpleValueType();
----------------
Do you need to be restrictive here? Would the result for larger vectors (e.g. v64i1) still be better than what we get today?

You might need to be careful about creating illegal operations.  Given the context of this combine, can it be restricted to before type legalisation?


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:18204
+                          DAG.getConstant(0, DL, OrigVT), N->getOperand(2));
+    return DAG.getNode(ISD::VECREDUCE_OR, DL, MVT::i1, SetCC);
+  }
----------------
The result type of `SETCC` doesn't have to be `i1` so you either need to extend the result based on `getBooleanContents()` or restrict the combine to cases where `VT==i1`. My preference is the former.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130163/new/

https://reviews.llvm.org/D130163



More information about the llvm-commits mailing list