* 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.
===================================================================
*************** struct GTY(()) varasm_status {
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 {
*************** extern bool initial_value_entry (int i,
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 *,
===================================================================
*************** along with GCC; see the file COPYING3.
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;
===================================================================
*************** extern bool shift_return_value (machine_
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
===================================================================
*************** use_register_for_decl (const_tree decl)
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. */
===================================================================
*************** call_expr_flags (const_tree t)
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.
===================================================================
*************** along with GCC; see the file COPYING3.
#include "bitmap.h"
#include "sbitmap.h"
- #include "tm.h"
- #include "hard-reg-set.h"
#include "function.h"
#include "cfgloopmanip.h"
===================================================================
*************** along with GCC; see the file COPYING3.
#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"
===================================================================
***************
#include "plugin.h"
#include "hashtab.h"
#include "hard-reg-set.h"
! #include "function.h" /* For pass_by_reference. */
#include "dwarf2out.h"
#include "ada.h"
#include "plugin.h"
#include "hashtab.h"
#include "hard-reg-set.h"
! #include "calls.h" /* For pass_by_reference. */
#include "dwarf2out.h"
#include "ada.h"
===================================================================
*************** along with GCC; see the file COPYING3.
#include "tree.h"
#include "fold-const.h"
#include "stringpool.h"
- #include "calls.h"
#include "langhooks.h"
#include "gimple-expr.h"
#include "gimplify.h"
*************** along with GCC; see the file COPYING3.
#include "tm.h"
#include "hard-reg-set.h"
#include "function.h"
+ #include "calls.h"
#include "ipa-ref.h"
#include "cgraph.h"
#include "diagnostic.h"