[PATCH] D148185: Add more efficient bitwise vector reductions on AArch64
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 17 09:29:30 PDT 2023
efriedma added inline comments.
================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:13252
+ SDValue Extended =
+ DAG.getAnyExtOrTrunc(Vec, DL, VecVT.changeVectorElementType(MVT::i8));
+ switch (ScalarOpcode) {
----------------
Sp00ph wrote:
> Using either zext or sext here adds a few extra instructions in the generated code. Is it guaranteed that any-extending an i1 vector results in a vector whose elements are all either 0 or -1? It seems reasonable because afaik mask vector elements on AArch64 are always either 0 or -1, but it could also introduce some subtle incorrectness if there is some case where any-extending an i1 vector does not result in such a mask vector.
No, no guarantee here. I mean, there are restrictions related to boolean operands certain specific operations (like the condition of a VSELECT), but there isn't any restriction that applies to arithmetic operations. An easy way to get a vector with arbitrary data in the high bits is truncating from nxi8 to nxi1.
You could generate a different sequence if the operand is known to be sign-extended (ComputeNumSignBits).
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148185/new/
https://reviews.llvm.org/D148185
More information about the llvm-commits
mailing list