On 9/30/19 3:19 AM, Richard Sandiford wrote: > 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. OK. THanks for clarifying.
> >> 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.) Your call on whether or not it's worth it. Given that it's supposed to be derived info, I won't lose any sleep if it's not available in the RTL front-end. jeff