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