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. Fix this by making the masks local variables, passed down to be applied immediately to the opcode being processed. Changes for v2: - Introduce fold_affected_mask, to handle a_mask separately from both z_mask and s_mask. There are only a couple of places where we can compute a_mask, and handling that separately simplifies some things. This means that fold_masks_zsa is gone, and fold_masks_za need not be created. - Introduce fold_masks_s, as suggested in review. - In many places, fetch the TempOptInfo pointers once. This doesn't affect the resulting optimized code, but it's easier to read. - There are a couple of logic fixes, separated out to new patches. - There are a couple of logic improvements for fold_count_zero and fold_deposit. Patches lacking review: 02-tcg-optimize-Split-out-fold_affected_mask.patch 04-tcg-optimize-Split-out-fold_masks_zs.patch 05-tcg-optimize-Augment-s_mask-from-z_mask-in-fold_m.patch 10-tcg-optimize-Use-fold_masks_zs-in-fold_count_zero.patch 13-tcg-optimize-Compute-sign-mask-in-fold_deposit.patch 29-tcg-optimize-Use-fold_masks_zs-in-fold_qemu_ld.patch 35-tcg-optimize-Fix-sign-mask-in-fold_negsetcond.patch 40-tcg-optimize-Canonicalize-s_mask-in-fold_exts-fol.patch 42-tcg-optimize-Simplify-sign-bit-test-in-fold_shift.patch r~ Richard Henderson (51): tcg/optimize: Split out finish_bb, finish_ebb tcg/optimize: Split out fold_affected_mask tcg/optimize: Copy mask writeback to fold_masks tcg/optimize: Split out fold_masks_zs tcg/optimize: Augment s_mask from z_mask in fold_masks_zs tcg/optimize: Use finish_folding in fold_add, fold_add_vec, fold_addsub2 tcg/optimize: Use fold_masks_zs in fold_and tcg/optimize: Use fold_masks_zs in fold_andc tcg/optimize: Use fold_masks_zs in fold_bswap tcg/optimize: Use fold_masks_zs 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: Compute sign mask 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_s in fold_eqv tcg/optimize: Use fold_masks_z in fold_extract tcg/optimize: Use finish_folding in fold_extract2 tcg/optimize: Use fold_masks_zs in fold_exts tcg/optimize: Use fold_masks_z 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_s in fold_nand tcg/optimize: Use fold_masks_z in fold_neg_no_const tcg/optimize: Use fold_masks_s in fold_nor tcg/optimize: Use fold_masks_s 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_s in fold_negsetcond tcg/optimize: Fix sign mask 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_zs in fold_sextract tcg/optimize: Canonicalize s_mask in fold_exts, fold_sextract tcg/optimize: Use fold_masks_zs, fold_masks_s in fold_shift tcg/optimize: Simplify sign bit test 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 z_mask, s_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 | 776 +++++++++++++++++++++++++++---------------------- 1 file changed, 425 insertions(+), 351 deletions(-) -- 2.43.0