From bd785b44932274f7067105de417938597289962c Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 30 Sep 2019 16:19:38 +0000 Subject: Add function_abi.{h,cc} 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-30 Richard Sandiford 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. From-SVN: r276307 --- gcc/target-globals.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/target-globals.h') diff --git a/gcc/target-globals.h b/gcc/target-globals.h index ceb216a..9c42913 100644 --- a/gcc/target-globals.h +++ b/gcc/target-globals.h @@ -26,6 +26,7 @@ extern struct target_regs *this_target_regs; extern struct target_rtl *this_target_rtl; extern struct target_recog *this_target_recog; extern struct target_hard_regs *this_target_hard_regs; +extern struct target_function_abi_info *this_target_function_abi_info; extern struct target_reload *this_target_reload; extern struct target_expmed *this_target_expmed; extern struct target_optabs *this_target_optabs; @@ -48,6 +49,7 @@ public: struct target_rtl *rtl; struct target_recog *GTY((skip)) recog; struct target_hard_regs *GTY((skip)) hard_regs; + struct target_function_abi_info *GTY((skip)) function_abi_info; struct target_reload *GTY((skip)) reload; struct target_expmed *GTY((skip)) expmed; struct target_optabs *GTY((skip)) optabs; @@ -75,6 +77,7 @@ restore_target_globals (class target_globals *g) this_target_rtl = g->rtl; this_target_recog = g->recog; this_target_hard_regs = g->hard_regs; + this_target_function_abi_info = g->function_abi_info; this_target_reload = g->reload; this_target_expmed = g->expmed; this_target_optabs = g->optabs; -- cgit v1.1