Hi Jeff, Thanks as always for the reviews :-)
Jeff Law <l...@redhat.com> writes: > On 9/11/19 1:03 PM, Richard Sandiford wrote: >> This patch adds new structures and functions for handling >> multiple ABIs in a translation unit. The structures are: >> >> - predefined_function_abi: describes a static, predefined ABI >> - function_abi: describes either a predefined ABI or a local >> variant of one (e.g. taking -fipa-ra into account) >> >> The patch adds functions for getting the ABI from a given type >> or decl; a later patch will also add a function for getting the >> ABI of the target of a call insn. >> >> Although ABIs are about much more than call-clobber/saved choices, >> I wanted to keep the name general in case we add more ABI-related >> information in future. >> >> >> 2019-09-11 Richard Sandiford <richard.sandif...@arm.com> >> >> gcc/ >> * Makefile.in (OBJS): Add function-abi.o. >> (GTFILES): Add function-abi.h. >> * function-abi.cc: New file. >> * function-abi.h: Likewise. >> * emit-rtl.h (rtl_data::abi): New field. >> * function.c: Include function-abi.h. >> (prepare_function_start): Initialize crtl->abi. >> * read-rtl-function.c: Include regs.h and function-abi.h. >> (read_rtl_function_body): Initialize crtl->abi. >> (read_rtl_function_body_from_file_range): Likewise. >> * reginfo.c: Include function-abi.h. >> (init_reg_sets_1): Initialize default_function_abi. >> (globalize_reg): Call add_full_reg_clobber for each predefined ABI >> when making a register global. >> * target-globals.h (this_target_function_abi_info): Declare. >> (target_globals::function_abi_info): New field. >> (restore_target_globals): Copy it. >> * target-globals.c: Include function-abi.h. >> (default_target_globals): Initialize the function_abi_info field. >> (target_globals): Allocate it. >> (save_target_globals): Free it. > So no problem with this as-is. Questions though: > > 1. Do we need to stream this information for LTO? At the moment this is all derived information rather than something we need to stream directly. E.g. the set of available predefined_function_abis really only depends on command-line flags. The mapping from functions to predefined_function_abis currently depends only on the function type, so streaming the type is enough to recover the ABI too. function_abi additionally depends on RTL stuff that doesn't affect LTO. > 2. Do we need to support it for the RTL front-end, even if primarily for > testing purposes? Yeah, I guess it could be useful to be able to pretend that a function is defined locally with a certain -fipa-ra clobber set, but I think in most cases it'd be possible to do this using: void __attribute__ ((noinline, noclone)) callee (void) { asm ("" ::: ...regs...); } (That's the kind of test I've used in the support for the SVE PCS FWIW, not posted yet.) Richard