* [patch 2/4] Remove tm.h and options.h as dependencies for function.h
@ 2015-06-25 13:22 Andrew MacLeod
2015-06-25 16:18 ` Jeff Law
0 siblings, 1 reply; 2+ messages in thread
From: Andrew MacLeod @ 2015-06-25 13:22 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 999 bytes --]
This patch finally removes tm.h as a compile dependency for function.h
struct incoming_args was declared in function.h, and had an instance of
CUMULATIVE_ARGS from tm.h The only consumer of incoming_args is
rtl-data which is now located in emit-rtl.h, so I moved the decl to there.
The remaining dependencies were pointers to CUMULATIVE_ARGS being used
as parameters to 2 functions pass_by_reference and
reference_callee_copied. I moved these 2 functions to calls.[ch]. The
vast majority of consumers are in the backend, and already include/need
calls.h, so it seemed a sensible location.
This allows tm.h and hard-reg-set.h to be removed from cfgloop.h. On my
flattened branch, compiler back-end files requiring hard-reg-set.h
dropped from 270ish to 98, and it ought to have a decent impact on the
front end files when I get to them.
Bootstraps on x86_64-unknown-linux-gnu with no new regressions. Also
builds stage 1 on all the targets in config-list.mk.
OK for trunk?
Andrew
[-- Attachment #2: 2-func-tm.patch --]
[-- Type: text/x-patch, Size: 10389 bytes --]
* function.h (struct incoming_args): Move struct.
(pass_by_reference, reference_callee_copied): Remove prototypes.
* emit-rtl.h (struct incoming_args): Relocate struct here.
* calls.h (pass_by_reference, reference_callee_copied): Relocate
prototypes here.
* function.c (pass_by_reference, reference_callee_copied): Move.
* calls.c (pass_by_reference, reference_callee_copied): Relocate here.
* cfgloop.h: Don't include tm.h or hard-reg-set.h.
* ipa-chkp.c: Include calls.h.
* ada/gcc-interface/misc.c: Include calls.h not function.h.
* c-family/cilk.c: Move calls.h after tm.h in the include chain.
Index: function.h
===================================================================
*** function.h (revision 224602)
--- function.h (working copy)
*************** struct GTY(()) varasm_status {
*** 169,202 ****
unsigned int deferred_constants;
};
- /* Information mainlined about RTL representation of incoming arguments. */
- struct GTY(()) incoming_args {
- /* Number of bytes of args popped by function being compiled on its return.
- Zero if no bytes are to be popped.
- May affect compilation of return insn or of function epilogue. */
- int pops_args;
-
- /* If function's args have a fixed size, this is that size, in bytes.
- Otherwise, it is -1.
- May affect compilation of return insn or of function epilogue. */
- int size;
-
- /* # bytes the prologue should push and pretend that the caller pushed them.
- The prologue must do this, but only if parms can be passed in
- registers. */
- int pretend_args_size;
-
- /* This is the offset from the arg pointer to the place where the first
- anonymous arg can be found, if there is one. */
- rtx arg_offset_rtx;
-
- /* Quantities of various kinds of registers
- used for the current function's args. */
- CUMULATIVE_ARGS info;
-
- /* The arg pointer hard register, or the pseudo into which it was copied. */
- rtx internal_arg_pointer;
- };
/* Data for function partitioning. */
struct GTY(()) function_subsections {
--- 169,174 ----
*************** extern bool initial_value_entry (int i,
*** 610,619 ****
extern void instantiate_decl_rtl (rtx x);
extern int aggregate_value_p (const_tree, const_tree);
extern bool use_register_for_decl (const_tree);
- extern bool pass_by_reference (CUMULATIVE_ARGS *, machine_mode,
- tree, bool);
- extern bool reference_callee_copied (CUMULATIVE_ARGS *, machine_mode,
- tree, bool);
extern gimple_seq gimplify_parameters (void);
extern void locate_and_pad_parm (machine_mode, tree, int, int, int,
tree, struct args_size *,
--- 582,587 ----
Index: emit-rtl.h
===================================================================
*** emit-rtl.h (revision 224602)
--- emit-rtl.h (working copy)
*************** along with GCC; see the file COPYING3.
*** 23,28 ****
--- 23,58 ----
struct temp_slot;
typedef struct temp_slot *temp_slot_p;
+ /* Information mainlined about RTL representation of incoming arguments. */
+ struct GTY(()) incoming_args {
+ /* Number of bytes of args popped by function being compiled on its return.
+ Zero if no bytes are to be popped.
+ May affect compilation of return insn or of function epilogue. */
+ int pops_args;
+
+ /* If function's args have a fixed size, this is that size, in bytes.
+ Otherwise, it is -1.
+ May affect compilation of return insn or of function epilogue. */
+ int size;
+
+ /* # bytes the prologue should push and pretend that the caller pushed them.
+ The prologue must do this, but only if parms can be passed in
+ registers. */
+ int pretend_args_size;
+
+ /* This is the offset from the arg pointer to the place where the first
+ anonymous arg can be found, if there is one. */
+ rtx arg_offset_rtx;
+
+ /* Quantities of various kinds of registers
+ used for the current function's args. */
+ CUMULATIVE_ARGS info;
+
+ /* The arg pointer hard register, or the pseudo into which it was copied. */
+ rtx internal_arg_pointer;
+ };
+
+
/* Datastructures maintained for currently processed function in RTL form. */
struct GTY(()) rtl_data {
struct expr_status expr;
Index: calls.h
===================================================================
*** calls.h (revision 224602)
--- calls.h (working copy)
*************** extern bool shift_return_value (machine_
*** 32,37 ****
--- 32,42 ----
extern rtx expand_call (tree, rtx, int);
extern void fixup_tail_calls (void);
+ extern bool pass_by_reference (CUMULATIVE_ARGS *, machine_mode,
+ tree, bool);
+ extern bool reference_callee_copied (CUMULATIVE_ARGS *, machine_mode,
+ tree, bool);
+
#endif // GCC_CALLS_H
Index: function.c
===================================================================
*** function.c (revision 224602)
--- function.c (working copy)
*************** use_register_for_decl (const_tree decl)
*** 2169,2217 ****
return true;
}
- /* Return true if TYPE should be passed by invisible reference. */
-
- bool
- pass_by_reference (CUMULATIVE_ARGS *ca, machine_mode mode,
- tree type, bool named_arg)
- {
- if (type)
- {
- /* If this type contains non-trivial constructors, then it is
- forbidden for the middle-end to create any new copies. */
- if (TREE_ADDRESSABLE (type))
- return true;
-
- /* GCC post 3.4 passes *all* variable sized types by reference. */
- if (!TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
- return true;
-
- /* If a record type should be passed the same as its first (and only)
- member, use the type and mode of that member. */
- if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
- {
- type = TREE_TYPE (first_field (type));
- mode = TYPE_MODE (type);
- }
- }
-
- return targetm.calls.pass_by_reference (pack_cumulative_args (ca), mode,
- type, named_arg);
- }
-
- /* Return true if TYPE, which is passed by reference, should be callee
- copied instead of caller copied. */
-
- bool
- reference_callee_copied (CUMULATIVE_ARGS *ca, machine_mode mode,
- tree type, bool named_arg)
- {
- if (type && TREE_ADDRESSABLE (type))
- return false;
- return targetm.calls.callee_copies (pack_cumulative_args (ca), mode, type,
- named_arg);
- }
-
/* Structures to communicate between the subroutines of assign_parms.
The first holds data persistent across all parameters, the second
is cleared out for each parameter. */
--- 2169,2174 ----
Index: calls.c
===================================================================
*** calls.c (revision 224602)
--- calls.c (working copy)
*************** call_expr_flags (const_tree t)
*** 858,863 ****
--- 858,907 ----
return flags;
}
+ /* Return true if TYPE should be passed by invisible reference. */
+
+ bool
+ pass_by_reference (CUMULATIVE_ARGS *ca, machine_mode mode,
+ tree type, bool named_arg)
+ {
+ if (type)
+ {
+ /* If this type contains non-trivial constructors, then it is
+ forbidden for the middle-end to create any new copies. */
+ if (TREE_ADDRESSABLE (type))
+ return true;
+
+ /* GCC post 3.4 passes *all* variable sized types by reference. */
+ if (!TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
+ return true;
+
+ /* If a record type should be passed the same as its first (and only)
+ member, use the type and mode of that member. */
+ if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
+ {
+ type = TREE_TYPE (first_field (type));
+ mode = TYPE_MODE (type);
+ }
+ }
+
+ return targetm.calls.pass_by_reference (pack_cumulative_args (ca), mode,
+ type, named_arg);
+ }
+
+ /* Return true if TYPE, which is passed by reference, should be callee
+ copied instead of caller copied. */
+
+ bool
+ reference_callee_copied (CUMULATIVE_ARGS *ca, machine_mode mode,
+ tree type, bool named_arg)
+ {
+ if (type && TREE_ADDRESSABLE (type))
+ return false;
+ return targetm.calls.callee_copies (pack_cumulative_args (ca), mode, type,
+ named_arg);
+ }
+
+
/* Precompute all register parameters as described by ARGS, storing values
into fields within the ARGS array.
Index: cfgloop.h
===================================================================
*** cfgloop.h (revision 224602)
--- cfgloop.h (working copy)
*************** along with GCC; see the file COPYING3.
*** 22,29 ****
#include "bitmap.h"
#include "sbitmap.h"
- #include "tm.h"
- #include "hard-reg-set.h"
#include "function.h"
#include "cfgloopmanip.h"
--- 22,27 ----
Index: ipa-chkp.c
===================================================================
*** ipa-chkp.c (revision 224602)
--- ipa-chkp.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 34,39 ****
--- 34,40 ----
#include "tm.h"
#include "hard-reg-set.h"
#include "function.h"
+ #include "calls.h"
#include "tree-ssa-alias.h"
#include "predict.h"
#include "basic-block.h"
Index: ada/gcc-interface/misc.c
===================================================================
*** ada/gcc-interface/misc.c (revision 224602)
--- ada/gcc-interface/misc.c (working copy)
***************
*** 48,54 ****
#include "plugin.h"
#include "hashtab.h"
#include "hard-reg-set.h"
! #include "function.h" /* For pass_by_reference. */
#include "dwarf2out.h"
#include "ada.h"
--- 48,54 ----
#include "plugin.h"
#include "hashtab.h"
#include "hard-reg-set.h"
! #include "calls.h" /* For pass_by_reference. */
#include "dwarf2out.h"
#include "ada.h"
Index: c-family/cilk.c
===================================================================
*** c-family/cilk.c (revision 224602)
--- c-family/cilk.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 29,35 ****
#include "tree.h"
#include "fold-const.h"
#include "stringpool.h"
- #include "calls.h"
#include "langhooks.h"
#include "gimple-expr.h"
#include "gimplify.h"
--- 29,34 ----
*************** along with GCC; see the file COPYING3.
*** 41,46 ****
--- 40,46 ----
#include "tm.h"
#include "hard-reg-set.h"
#include "function.h"
+ #include "calls.h"
#include "ipa-ref.h"
#include "cgraph.h"
#include "diagnostic.h"
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [patch 2/4] Remove tm.h and options.h as dependencies for function.h
2015-06-25 13:22 [patch 2/4] Remove tm.h and options.h as dependencies for function.h Andrew MacLeod
@ 2015-06-25 16:18 ` Jeff Law
0 siblings, 0 replies; 2+ messages in thread
From: Jeff Law @ 2015-06-25 16:18 UTC (permalink / raw)
To: Andrew MacLeod, gcc-patches
On 06/25/2015 07:21 AM, Andrew MacLeod wrote:
> This patch finally removes tm.h as a compile dependency for function.h
>
> struct incoming_args was declared in function.h, and had an instance of
> CUMULATIVE_ARGS from tm.h The only consumer of incoming_args is
> rtl-data which is now located in emit-rtl.h, so I moved the decl to there.
>
> The remaining dependencies were pointers to CUMULATIVE_ARGS being used
> as parameters to 2 functions pass_by_reference and
> reference_callee_copied. I moved these 2 functions to calls.[ch]. The
> vast majority of consumers are in the backend, and already include/need
> calls.h, so it seemed a sensible location.
>
> This allows tm.h and hard-reg-set.h to be removed from cfgloop.h. On my
> flattened branch, compiler back-end files requiring hard-reg-set.h
> dropped from 270ish to 98, and it ought to have a decent impact on the
> front end files when I get to them.
>
> Bootstraps on x86_64-unknown-linux-gnu with no new regressions. Also
> builds stage 1 on all the targets in config-list.mk.
>
> OK for trunk?
>
> Andrew
>
>
> 2-func-tm.patch
>
>
> * function.h (struct incoming_args): Move struct.
> (pass_by_reference, reference_callee_copied): Remove prototypes.
> * emit-rtl.h (struct incoming_args): Relocate struct here.
> * calls.h (pass_by_reference, reference_callee_copied): Relocate
> prototypes here.
> * function.c (pass_by_reference, reference_callee_copied): Move.
> * calls.c (pass_by_reference, reference_callee_copied): Relocate here.
> * cfgloop.h: Don't include tm.h or hard-reg-set.h.
> * ipa-chkp.c: Include calls.h.
> * ada/gcc-interface/misc.c: Include calls.h not function.h.
> * c-family/cilk.c: Move calls.h after tm.h in the include chain.
OK.
jeff
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-06-25 16:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-25 13:22 [patch 2/4] Remove tm.h and options.h as dependencies for function.h Andrew MacLeod
2015-06-25 16:18 ` Jeff Law
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).