Remove global REG_SETs

Programming / Compilers / GCC - rsandifo [138bc75d-0d04-0410-961f-82ee72b054a4] - 9 September 2019 18:01 EDT

We currently maintain global REG_SET versions of fixed_reg_set and regs_invalidated_by_call. With bitmap_view, we can instead operate directly on the underlying HARD_REG_SETs, avoiding the need to keep the two pieces of data in sync.

I have a series of patches that removes the assumption that there's a single global ABI for all functions in the translation unit, which includes not relying on having a global regs_invalidated_by_call. Removing the REG_SET equivalent is one step to doing that.

Note that the affected DF code is used for EH edges or dumping only, so shouldn't be performance critical.

2019-09-09 Richard Sandiford

gcc/
- regset.h (regs_invalidated_by_call_regset): Delete. (fixed_reg_set_regset): Likewise.
- reginfo.c (regs_invalidated_by_call_regset): Likewise. (fixed_reg_set_regset, persistent_obstack): Likewise. (init_reg_sets_1, globalize_reg): Update accordingly.
- df.h (df_print_regset, df_print_word_regset): Take a const_bitmap instead of a bitmap.
- df-core.c (df_print_regset, df_print_word_regset): Likewise.
- df-problems.c (df_rd_local_compute): Use regs_invalidated_by_call instead of regs_invalidated_by_call_regset. (df_lr_confluence_n, df_md_confluence_n): Likewise.
- df-scan.c (df_scan_start_dump): Likewise.
- dse.c (copy_fixed_regs): Likewise.
- config/sh/sh.c (sh_find_equiv_gbr_addr): Likewise.

d48484354de Remove global REG_SETs
gcc/ChangeLog | 17 +++++++++++++++++
gcc/config/sh/sh.c | 2 +-
gcc/df-core.c | 4 ++--
gcc/df-problems.c | 20 +++++++++++---------
gcc/df-scan.c | 2 +-
gcc/df.h | 4 ++--
gcc/dse.c | 2 +-
gcc/reginfo.c | 42 ++++--------------------------------------
gcc/regset.h | 8 --------
9 files changed, 39 insertions(+), 62 deletions(-)

Upstream: gcc.gnu.org


  • Share