This patch makes regrename use a similar mask-and-clobber-set pair to IRA when tracking whether registers are clobbered by calls in a region. Testing for a nonzero ABI mask is equivalent to testing for a register that crosses a call. Since AArch64 and c6x use regrename.h, they need to be updated to include function-abi.h first. AIUI this is preferred over including function-abi.h in regrename.h. 2019-09-30 Richard Sandiford <richard.sandiford@arm.com> gcc/ * regrename.h (du_head::call_clobber_mask): New field. (du_head::need_caller_save_reg): Replace with... (du_head::call_abis): ...this new field. * regrename.c: Include function-abi.h. (call_clobbered_in_chain_p): New function. (check_new_reg_p): Use crtl->abi when deciding whether a register is free for use after RA. Use call_clobbered_in_chain_p to test whether a candidate register would be clobbered by a call. (find_rename_reg): Don't add call-clobber conflicts here. (rename_chains): Check call_abis instead of need_caller_save_reg. (merge_chains): Update for changes to du_head. (build_def_use): Use insn_callee_abi to get the ABI of the call insn target. Record the ABI identifier in call_abis and the set of fully or partially clobbered registers in call_clobber_mask. Add fully-clobbered registers to hard_conflicts here rather than in find_rename_reg. * config/aarch64/cortex-a57-fma-steering.c: Include function-abi.h. (rename_single_chain): Check call_abis instead of need_caller_save_reg. * config/aarch64/falkor-tag-collision-avoidance.c: Include function-abi.h. * config/c6x/c6x.c: Likewise. From-SVN: r276332
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
c6x-isas.def | Loading commit data... | |
c6x-modes.def | Loading commit data... | |
c6x-mult.md | Loading commit data... | |
c6x-mult.md.in | Loading commit data... | |
c6x-opts.h | Loading commit data... | |
c6x-protos.h | Loading commit data... | |
c6x-sched.md | Loading commit data... | |
c6x-sched.md.in | Loading commit data... | |
c6x-tables.opt | Loading commit data... | |
c6x.c | Loading commit data... | |
c6x.h | Loading commit data... | |
c6x.md | Loading commit data... | |
c6x.opt | Loading commit data... | |
c6x_intrinsics.h | Loading commit data... | |
constraints.md | Loading commit data... | |
elf-common.h | Loading commit data... | |
elf.h | Loading commit data... | |
genmult.sh | Loading commit data... | |
genopt.sh | Loading commit data... | |
gensched.sh | Loading commit data... | |
predicates.md | Loading commit data... | |
sync.md | Loading commit data... | |
t-c6x | Loading commit data... | |
t-c6x-elf | Loading commit data... | |
t-c6x-uclinux | Loading commit data... | |
uclinux-elf.h | Loading commit data... |