The patches to optimize cmp_vec and cmpsel_vec -- particularly
canonicalizing immediate operands -- are directed toward helping
the in flight tcg/riscv vector backend.
In order for that to happen, the tcg/i386 backend must be changed
so that it does not rely upon choices that it made during early
expansion, before optimization changes things.
While I was looking at the issues i386 was attempting to solve
during early expansion, I realized that avx512 does not have the
same issues. Expansion of vector cmp and cmpsel become trivial.
I think I've split the difference nicely, so that avx1 still works.
Also, the avx512 predication example should be a nice model for
riscv and some future aarch64 sve vectorization.
r~
Richard Henderson (11):
tcg: Export vec_gen_6
tcg/i386: Split out tcg_out_vex_modrm_type
tcg/i386: Do not expand cmp_vec early
tcg/i386: Do not expand cmpsel_vec early
tcg/optimize: Fold movcond with true and false values identical
tcg/optimize: Optimize cmp_vec and cmpsel_vec
tcg/optimize: Optimize bitsel_vec
tcg/i386: Optimize cmpsel with constant 0 arguments
tcg/i386: Implement cmp_vec with avx512 insns
tcg/i386: Add predicate parameters to tcg_out_evex_opc
tcg/i386: Implement cmpsel_vec with avx512 insns
TANG Tiancheng (1):
tcg: Fix iteration step in 32-bit gvec operation
tcg/i386/tcg-target-con-set.h | 1 +
tcg/i386/tcg-target-con-str.h | 1 +
tcg/i386/tcg-target.h | 2 +-
tcg/i386/tcg-target.opc.h | 1 -
tcg/tcg-internal.h | 2 +
tcg/optimize.c | 99 +++++++
tcg/tcg-op-gvec.c | 2 +-
tcg/tcg-op-vec.c | 4 +-
tcg/i386/tcg-target.c.inc | 469 +++++++++++++++++++++-------------
9 files changed, 400 insertions(+), 181 deletions(-)
--
2.43.0