Hi, finally, after many distractions, v2 of this series.
Main changes from v1: - Restrict to types/modes with padding thanks to Richi's suggestion. - Return an array of supported else values and let the vectorizer choose. - Undefined else value for GCN. Bootstrapped and regtested on Power10, x86 and aarch64. Regtested on rv64gcv. Testing on GCN would be much appreciated. Robin Dapp (8): docs: Document maskload else operand and behavior. ifn: Add else-operand handling. tree-ifcvt: Enforce zero else value after maskload. vect: Add maskload else value support. aarch64: Add masked-load else operands. gcn: Add else operand to masked loads. i386: Add else operand to masked loads. RISC-V: Add else operand to masked loads [PR115336]. .../aarch64/aarch64-sve-builtins-base.cc | 58 +++- gcc/config/aarch64/aarch64-sve-builtins.cc | 5 + gcc/config/aarch64/aarch64-sve-builtins.h | 1 + gcc/config/aarch64/aarch64-sve.md | 47 +++- gcc/config/aarch64/aarch64-sve2.md | 3 +- gcc/config/aarch64/predicates.md | 4 + gcc/config/gcn/gcn-valu.md | 12 +- gcc/config/gcn/predicates.md | 2 + gcc/config/i386/i386-expand.cc | 26 +- gcc/config/i386/predicates.md | 4 + gcc/config/i386/sse.md | 124 +++++---- gcc/config/riscv/autovec.md | 45 +-- gcc/config/riscv/predicates.md | 3 + gcc/config/riscv/riscv-v.cc | 26 +- gcc/doc/md.texi | 63 +++-- gcc/internal-fn.cc | 131 +++++++-- gcc/internal-fn.h | 15 +- gcc/optabs-query.cc | 59 ++-- gcc/optabs-query.h | 3 +- gcc/optabs-tree.cc | 62 +++-- gcc/optabs-tree.h | 8 +- .../gcc.target/riscv/rvv/autovec/pr115336.c | 20 ++ .../gcc.target/riscv/rvv/autovec/pr116059.c | 13 + gcc/tree-if-conv.cc | 112 ++++++-- gcc/tree-vect-data-refs.cc | 77 ++++-- gcc/tree-vect-patterns.cc | 18 +- gcc/tree-vect-slp.cc | 22 +- gcc/tree-vect-stmts.cc | 257 ++++++++++++++---- gcc/tree-vectorizer.h | 11 +- 29 files changed, 943 insertions(+), 288 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr115336.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr116059.c -- 2.46.2