On 12/10/24 07:23, Richard Henderson wrote:
> The desire is to start re-using some of the fold_* functions
> while lowering or simplifying operations during tcg_optmize.
>
> Many of these fold_* functions set z_mask, s_mask, and a_mask,
> which hang around until the end of the tcg_optmize loop and
> are applied by finish_folding. This disconnect between set
> and apply is a problem -- we would no longer be applying the
> masks to the correct opcode.
>
A general question on this:
Where do the s_ (sign?) and a_ (?) names comes from?
Reading the description of those struct members, I can't really connect
to their names, except for z_mask.
> Fix this by making the masks local variables, passed down to
> be applied immediately to the opcode being processed.
>
>
> r~
>
>
> Richard Henderson (46):
> tcg/optimize: Split out finish_bb, finish_ebb
> tcg/optimize: Copy mask writeback to fold_masks
> tcg/optimize: Add fold_masks_zsa, fold_masks_zs, fold_masks_z
> tcg/optimize: Use finish_folding in fold_add, fold_add_vec
> tcg/optimize: Use finish_folding in fold_addsub2
> tcg/optimize: Use fold_masks_zsa in fold_and
> tcg/optimize: Use fold_masks_zsa in fold_andc
> tcg/optimize: Use fold_masks_zs in fold_bswap
> tcg/optimize: Use fold_masks_z in fold_count_zeros
> tcg/optimize: Use fold_masks_z in fold_ctpop
> tcg/optimize: Use fold_and and fold_masks_z in fold_deposit
> tcg/optimize: Use finish_folding in fold_divide
> tcg/optimize: Use finish_folding in fold_dup, fold_dup2
> tcg/optimize: Use fold_masks_zs in fold_eqv
> tcg/optimize: Use fold_masks_zsa in fold_extract
> tcg/optimize: Use finish_folding in fold_extract2
> tcg/optimize: Use fold_masks_zsa in fold_exts
> tcg/optimize: Use fold_masks_zsa in fold_extu
> tcg/optimize: Use fold_masks_zs in fold_movcond
> tcg/optimize: Use finish_folding in fold_mul*
> tcg/optimize: Use fold_masks_zs in fold_nand
> tcg/optimize: Use fold_masks_z in fold_neg_no_const
> tcg/optimize: Use fold_masks_zs in fold_nor
> tcg/optimize: Use fold_masks_zs in fold_not
> tcg/optimize: Use fold_masks_zs in fold_or
> tcg/optimize: Use fold_masks_zs in fold_orc
> tcg/optimize: Use fold_masks_zs in fold_qemu_ld
> tcg/optimize: Return true from fold_qemu_st, fold_tcg_st
> tcg/optimize: Use finish_folding in fold_remainder
> tcg/optimize: Distinguish simplification in fold_setcond_zmask
> tcg/optimize: Use fold_masks_z in fold_setcond
> tcg/optimize: Use fold_masks_zs in fold_negsetcond
> tcg/optimize: Use fold_masks_z in fold_setcond2
> tcg/optimize: Use finish_folding in fold_cmp_vec
> tcg/optimize: Use finish_folding in fold_cmpsel_vec
> tcg/optimize: Use fold_masks_zsa in fold_sextract
> tcg/optimize: Use fold_masks_zs in fold_shift
> tcg/optimize: Use finish_folding in fold_sub, fold_sub_vec
> tcg/optimize: Use fold_masks_zs in fold_tcg_ld
> tcg/optimize: Use finish_folding in fold_tcg_ld_memcopy
> tcg/optimize: Use fold_masks_zs in fold_xor
> tcg/optimize: Use finish_folding in fold_bitsel_vec
> tcg/optimize: Use finish_folding as default in tcg_optimize
> tcg/optimize: Remove [zsa]_mask from OptContext
> tcg/optimize: Move fold_bitsel_vec into alphabetic sort
> tcg/optimize: Move fold_cmp_vec, fold_cmpsel_vec into alphabetic sort
>
> tcg/optimize.c | 597 ++++++++++++++++++++++++++-----------------------
> 1 file changed, 315 insertions(+), 282 deletions(-)
>