integrate.c: Remove.

* integrate.c: Remove.
	* integrate.h: Remove.
	* Makefile.in: Remove make rules for integrate.c and INTEGRATE_H.
	* config/arm/t-arm: Remove INTEGRATE_H dependency for target files.
	* config/rs6000/t-rs6000: Likewise
	* config/spu/t-spu-elf: Likewise.
	* function.h (get_hard_reg_initial_val, has_hard_reg_initial_val,
	get_hard_reg_initial_reg, emit_initial_value_sets): Move prototypes
	from integrate.h to here.
	(initial_value_entry): New prototype.
	* reload.h (allocate_initial_values): Remove prototype.
	* tree.h (set_decl_abstract_flags, set_decl_origin_self): Likewise.
	* cse.c (fixed_base_plus_p): Don't handle virtual registers for
	integrate.c.
	* dwarf2out.c (set_decl_origin_self, set_block_origin_self,
	set_decl_abstract_flags, set_block_abstract_flags): Move from
	integrate.c to here, the only user.
	* expmed.c (extract_fixed_bit_field): Remove outdated comment
	about integrate.c.
	* function.c: Don't include integrate.h.
	(struct initial_value_pair, struct initial_value_struct,
	get_hard_reg_initial_val, has_hard_reg_initial_val,
	get_hard_reg_initial_reg, emit_initial_value_sets): Move from
	integrate.c to here.
	(initial_value_entry): New function.
	* genemit.c (main): Don't print integrate.h include line.
	* ira.c: Don't include integrate.h.
	(allocate_initial_values): Move from integrate.c to here.
	(ira): Update allocate_initial_values call.
	* tree-inline.c: Don't include integrate.h.
	(function_attribute_inlinable_p): Moved from integrate.c to here.
	* cfgexpand.c: Don't include integrate.h.
	* except.c: Likewise.
	* langhooks.c: Likewise.
	* passes.c: Likewise.
	* toplev.c: Likewise.
	* config/frv/frv.c: Likewise.
	* config/pa/pa.c: Likewise.
	* config/spu/spu.c: Likewise.
	* config/epiphany/epiphany.c: Likewise.
	* config/mep/mep.c: Likewise.
	* config/score/score.c: Likewise.
	* config/picochip/picochip.c: Likewise.
	* config/sh/sh.c: Likewise.
	* config/alpha/alpha.c: Likewise.
	* config/microblaze/microblaze.c: Likewise.
	* config/mips/mips.c: Likewise.
	* config/v850/v850.c: Likewise.
	* config/mmix/mmix.c: Likewise.
	* config/bfin/bfin.c: Likewise.
	* config/arm/arm.c: Likewise.
	* config/s390/s390.c: Likewise.
	* config/m32r/m32r.c: Likewise.
	* config/rs6000/rs6000.c: Likewise.
	* config/c6x/c6x.c: Include function.h instead of integrate.h.
	* config/tilegx/tilegx.c: Likewise.
	* config/tilepro/tilepro.c: Likewise.

From-SVN: r187969
This commit is contained in:
Steven Bosscher 2012-05-29 15:36:18 +00:00
parent 030a9eb6d8
commit 6399c0abb3
44 changed files with 424 additions and 465 deletions

View File

@ -1,3 +1,63 @@
2012-05-29 Steven Bosscher <steven@gcc.gnu.org>
* integrate.c: Remove.
* integrate.h: Remove.
* Makefile.in: Remove make rules for integrate.c and INTEGRATE_H.
* config/arm/t-arm: Remove INTEGRATE_H dependency for target files.
* config/rs6000/t-rs6000: Likewise
* config/spu/t-spu-elf: Likewise.
* function.h (get_hard_reg_initial_val, has_hard_reg_initial_val,
get_hard_reg_initial_reg, emit_initial_value_sets): Move prototypes
from integrate.h to here.
(initial_value_entry): New prototype.
* reload.h (allocate_initial_values): Remove prototype.
* tree.h (set_decl_abstract_flags, set_decl_origin_self): Likewise.
* cse.c (fixed_base_plus_p): Don't handle virtual registers for
integrate.c.
* dwarf2out.c (set_decl_origin_self, set_block_origin_self,
set_decl_abstract_flags, set_block_abstract_flags): Move from
integrate.c to here, the only user.
* expmed.c (extract_fixed_bit_field): Remove outdated comment
about integrate.c.
* function.c: Don't include integrate.h.
(struct initial_value_pair, struct initial_value_struct,
get_hard_reg_initial_val, has_hard_reg_initial_val,
get_hard_reg_initial_reg, emit_initial_value_sets): Move from
integrate.c to here.
(initial_value_entry): New function.
* genemit.c (main): Don't print integrate.h include line.
* ira.c: Don't include integrate.h.
(allocate_initial_values): Move from integrate.c to here.
(ira): Update allocate_initial_values call.
* tree-inline.c: Don't include integrate.h.
(function_attribute_inlinable_p): Moved from integrate.c to here.
* cfgexpand.c: Don't include integrate.h.
* except.c: Likewise.
* langhooks.c: Likewise.
* passes.c: Likewise.
* toplev.c: Likewise.
* config/frv/frv.c: Likewise.
* config/pa/pa.c: Likewise.
* config/spu/spu.c: Likewise.
* config/epiphany/epiphany.c: Likewise.
* config/mep/mep.c: Likewise.
* config/score/score.c: Likewise.
* config/picochip/picochip.c: Likewise.
* config/sh/sh.c: Likewise.
* config/alpha/alpha.c: Likewise.
* config/microblaze/microblaze.c: Likewise.
* config/mips/mips.c: Likewise.
* config/v850/v850.c: Likewise.
* config/mmix/mmix.c: Likewise.
* config/bfin/bfin.c: Likewise.
* config/arm/arm.c: Likewise.
* config/s390/s390.c: Likewise.
* config/m32r/m32r.c: Likewise.
* config/rs6000/rs6000.c: Likewise.
* config/c6x/c6x.c: Include function.h instead of integrate.h.
* config/tilegx/tilegx.c: Likewise.
* config/tilepro/tilepro.c: Likewise.
2012-05-29 Georg-Johann Lay <avr@gjlay.de>
* config/avr/t-avr (s-avr-mmcu-texi): Call
@ -1448,7 +1508,8 @@
* doc/options.texi (EnabledBy): Document
* opts.c: Include opts.h and options.h before tm.h.
(finish_options): Do not handle some sub-options here...
(common_handle_option): ... instead call common_handle_option_auto here.
(common_handle_option): ... instead call common_handle_option_auto
here.
* optc-gen.awk: Handle EnabledBy.
* opth-gen.awk: Declare common_handle_option_auto.
* common.opt (Wuninitialized): Use EnabledBy. Delete Init.

View File

@ -884,7 +884,6 @@ SCHED_INT_H = sched-int.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H) $(DF_H) \
SEL_SCHED_IR_H = sel-sched-ir.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H) \
$(GGC_H) $(BITMAP_H) vecprim.h $(SCHED_INT_H) $(CFGLOOP_H) $(REGSET_H)
SEL_SCHED_DUMP_H = sel-sched-dump.h $(SEL_SCHED_IR_H)
INTEGRATE_H = integrate.h
CFGLAYOUT_H = cfglayout.h $(BASIC_BLOCK_H)
CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(RTL_H) vecprim.h double-int.h \
$(BITMAP_H) sbitmap.h
@ -1253,7 +1252,6 @@ OBJS = \
ree.o \
incpath.o \
init-regs.o \
integrate.o \
internal-fn.o \
ipa-cp.o \
ipa-split.o \
@ -2259,7 +2257,7 @@ lto-streamer.o: lto-streamer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TREE_FLOW_H) $(DIAGNOSTIC_CORE_H) $(LTO_SYMTAB_H) toplev.h \
$(DIAGNOSTIC_CORE_H) $(STREAMER_HOOKS_H)
langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) toplev.h $(DIAGNOSTIC_CORE_H) $(TREE_INLINE_H) $(RTL_H) insn-config.h $(INTEGRATE_H) \
$(TREE_H) toplev.h $(DIAGNOSTIC_CORE_H) $(TREE_INLINE_H) $(RTL_H) insn-config.h \
langhooks.h $(TARGET_H) $(LANGHOOKS_DEF_H) $(FLAGS_H) $(GGC_H) $(DIAGNOSTIC_H) \
intl.h $(GIMPLE_H) $(CGRAPH_H) output.h tree-diagnostic.h
tree.o: tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
@ -2278,7 +2276,7 @@ tree-inline.o : tree-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(HASHTAB_H) langhooks.h $(TREE_INLINE_H) $(CGRAPH_H) \
intl.h $(FUNCTION_H) $(GIMPLE_H) \
debug.h $(DIAGNOSTIC_H) $(EXCEPT_H) $(TREE_FLOW_H) tree-iterator.h tree-mudflap.h \
$(IPA_PROP_H) value-prof.h $(TREE_PASS_H) $(TARGET_H) $(INTEGRATE_H) \
$(IPA_PROP_H) value-prof.h $(TREE_PASS_H) $(TARGET_H) \
tree-pretty-print.h
print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(GGC_H) langhooks.h tree-iterator.h \
@ -2751,7 +2749,7 @@ toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
hard-reg-set.h $(BASIC_BLOCK_H) graph.h $(EXCEPT_H) $(REGS_H) $(TIMEVAR_H) \
value-prof.h $(PARAMS_H) $(TM_P_H) reload.h ira.h dwarf2asm.h $(TARGET_H) \
langhooks.h insn-flags.h $(CFGLAYOUT_H) $(CFGLOOP_H) hosthooks.h \
$(CGRAPH_H) $(COVERAGE_H) alloc-pool.h $(GGC_H) $(INTEGRATE_H) \
$(CGRAPH_H) $(COVERAGE_H) alloc-pool.h $(GGC_H) \
$(OPTS_H) params.def tree-mudflap.h $(TREE_PASS_H) $(GIMPLE_H) \
tree-ssa-alias.h $(PLUGIN_H) realmpfr.h tree-diagnostic.h \
tree-pretty-print.h opts-diagnostic.h $(COMMON_TARGET_H)
@ -2766,7 +2764,7 @@ passes.o : passes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
langhooks.h insn-flags.h $(CFGLAYOUT_H) $(CFGLOOP_H) \
hosthooks.h $(CGRAPH_H) $(COVERAGE_H) $(TREE_PASS_H) $(TREE_DUMP_H) \
$(GGC_H) $(INTEGRATE_H) $(CPPLIB_H) $(OPTS_H) $(TREE_FLOW_H) $(TREE_INLINE_H) \
$(GGC_H) $(CPPLIB_H) $(OPTS_H) $(TREE_FLOW_H) $(TREE_INLINE_H) \
gt-passes.h $(DF_H) $(PREDICT_H) $(LTO_HEADER_H) $(LTO_SECTION_OUT_H) \
$(PLUGIN_H) $(IPA_UTILS_H)
@ -2804,7 +2802,7 @@ function.o : function.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_ERROR_
$(TREE_H) $(CFGLAYOUT_H) $(GIMPLE_H) $(FLAGS_H) $(FUNCTION_H) $(EXPR_H) \
$(OPTABS_H) $(LIBFUNCS_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
output.h $(EXCEPT_H) $(HASHTAB_H) $(GGC_H) $(TM_P_H) langhooks.h \
gt-function.h $(TARGET_H) $(BASIC_BLOCK_H) $(INTEGRATE_H) $(PREDICT_H) \
gt-function.h $(TARGET_H) $(BASIC_BLOCK_H) $(PREDICT_H) \
$(TREE_PASS_H) $(DF_H) $(TIMEVAR_H) vecprim.h $(PARAMS_H) bb-reorder.h \
$(COMMON_TARGET_H)
statistics.o : statistics.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
@ -2819,7 +2817,7 @@ except.o : except.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(TREE_H) $(FLAGS_H) $(EXCEPT_H) $(FUNCTION_H) $(EXPR_H) $(LIBFUNCS_H) \
langhooks.h insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
dwarf2asm.h dwarf2out.h toplev.h $(DIAGNOSTIC_CORE_H) $(HASHTAB_H) intl.h $(GGC_H) \
gt-except.h $(CGRAPH_H) $(INTEGRATE_H) $(DIAGNOSTIC_H) $(DWARF2_H) \
gt-except.h $(CGRAPH_H) $(DIAGNOSTIC_H) $(DWARF2_H) \
$(TARGET_H) $(TM_P_H) $(TREE_PASS_H) $(TIMEVAR_H) $(TREE_FLOW_H) \
tree-pretty-print.h sbitmap.h $(COMMON_TARGET_H) $(CFGLOOP_H)
expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
@ -2900,11 +2898,6 @@ dfp.o : dfp.c dfp.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(DIAGNOSTIC_CORE_H) $(TM_P_H) $(REAL_H) $(DECNUM_H)
fixed-value.o: fixed-value.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(REAL_H) $(DIAGNOSTIC_CORE_H)
integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(TREE_H) $(FLAGS_H) debug.h $(INTEGRATE_H) insn-config.h \
$(EXPR_H) $(REGS_H) intl.h $(FUNCTION_H) output.h $(RECOG_H) \
$(EXCEPT_H) $(DIAGNOSTIC_CORE_H) $(PARAMS_H) $(TM_P_H) $(TARGET_H) langhooks.h \
gt-integrate.h $(GGC_H) $(TREE_PASS_H) $(DF_H)
jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(FLAGS_H) hard-reg-set.h $(REGS_H) insn-config.h $(RECOG_H) $(EXPR_H) \
$(EXCEPT_H) $(FUNCTION_H) $(BASIC_BLOCK_H) $(TREE_PASS_H) \
@ -3167,7 +3160,7 @@ cfgexpand.o : cfgexpand.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(DIAGNOSTIC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(BASIC_BLOCK_H) $(FLAGS_H) debug.h $(PARAMS_H) \
value-prof.h $(TREE_INLINE_H) $(TARGET_H) $(SSAEXPAND_H) $(REGS_H) \
tree-pretty-print.h gimple-pretty-print.h $(BITMAP_H) sbitmap.h \
$(INSN_ATTR_H) $(INTEGRATE_H) $(CFGLOOP_H)
$(INSN_ATTR_H) $(CFGLOOP_H)
cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_ERROR_H) \
$(FLAGS_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h \
output.h $(FUNCTION_H) $(EXCEPT_H) $(TM_P_H) $(INSN_ATTR_H) \
@ -3310,7 +3303,7 @@ ira.o: ira.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(REGS_H) $(RTL_H) $(TM_P_H) $(TARGET_H) $(FLAGS_H) $(OBSTACK_H) \
$(BITMAP_H) hard-reg-set.h $(BASIC_BLOCK_H) $(DBGCNT_H) \
$(EXPR_H) $(RECOG_H) $(PARAMS_H) $(TIMEVAR_H) $(TREE_PASS_H) output.h \
$(EXCEPT_H) reload.h toplev.h $(DIAGNOSTIC_CORE_H) $(INTEGRATE_H) $(DF_H) $(GGC_H) $(IRA_INT_H)
$(EXCEPT_H) reload.h toplev.h $(DIAGNOSTIC_CORE_H) $(DF_H) $(GGC_H) $(IRA_INT_H)
regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
insn-config.h $(TIMEVAR_H) $(TREE_PASS_H) $(DF_H) \
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
@ -3501,7 +3494,7 @@ insn-emit.o : insn-emit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(TM_P_H) $(FUNCTION_H) $(EXPR_H) $(OPTABS_H) \
dfp.h $(FLAGS_H) output.h insn-config.h hard-reg-set.h $(RECOG_H) \
$(RESOURCE_H) reload.h $(DIAGNOSTIC_CORE_H) $(REGS_H) tm-constrs.h \
$(GGC_H) $(BASIC_BLOCK_H) $(INTEGRATE_H) $(TARGET_H)
$(GGC_H) $(BASIC_BLOCK_H) $(TARGET_H)
insn-enums.o : insn-enums.c $(CONFIG_H) $(SYSTEM_H) insn-constants.h
insn-extract.o : insn-extract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(DIAGNOSTIC_CORE_H) insn-config.h $(RECOG_H)
@ -3737,7 +3730,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
$(srcdir)/expr.h \
$(srcdir)/function.c $(srcdir)/except.c \
$(srcdir)/gcse.c $(srcdir)/godump.c \
$(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
$(srcdir)/lists.c $(srcdir)/optabs.c \
$(srcdir)/profile.c $(srcdir)/mcf.c \
$(srcdir)/reg-stack.c $(srcdir)/cfglayout.c $(srcdir)/cfglayout.h \
$(srcdir)/sdbout.c $(srcdir)/stor-layout.c \

View File

@ -49,7 +49,6 @@ along with GCC; see the file COPYING3. If not see
#include "sbitmap.h"
#include "cfgloop.h"
#include "regs.h" /* For reg_renumber. */
#include "integrate.h" /* For emit_initial_value_sets. */
#include "insn-attr.h" /* For INSN_SCHEDULING. */
/* This variable holds information helping the rewriting of SSA trees

View File

@ -43,7 +43,6 @@ along with GCC; see the file COPYING3. If not see
#include "function.h"
#include "diagnostic-core.h"
#include "ggc.h"
#include "integrate.h"
#include "tm_p.h"
#include "target.h"
#include "target-def.h"

View File

@ -46,7 +46,6 @@
#include "ggc.h"
#include "except.h"
#include "c-family/c-pragma.h" /* ??? */
#include "integrate.h"
#include "tm_p.h"
#include "target.h"
#include "target-def.h"

View File

@ -78,7 +78,7 @@ arm.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
insn-config.h conditions.h output.h \
$(INSN_ATTR_H) $(FLAGS_H) reload.h $(FUNCTION_H) \
$(EXPR_H) $(OPTABS_H) $(RECOG_H) $(CGRAPH_H) \
$(GGC_H) except.h $(C_PRAGMA_H) $(INTEGRATE_H) $(TM_P_H) \
$(GGC_H) except.h $(C_PRAGMA_H) $(TM_P_H) \
$(TARGET_H) $(TARGET_DEF_H) debug.h langhooks.h $(DF_H) \
intl.h libfuncs.h $(PARAMS_H) $(OPTS_H) $(srcdir)/config/arm/arm-cores.def \
$(srcdir)/config/arm/arm-arches.def $(srcdir)/config/arm/arm-fpus.def

View File

@ -44,7 +44,6 @@
#include "recog.h"
#include "optabs.h"
#include "ggc.h"
#include "integrate.h"
#include "cgraph.h"
#include "langhooks.h"
#include "bfin-protos.h"

View File

@ -40,7 +40,7 @@
#include "tm-preds.h"
#include "tm-constrs.h"
#include "df.h"
#include "integrate.h"
#include "function.h"
#include "diagnostic-core.h"
#include "cgraph.h"
#include "cfglayout.h"

View File

@ -46,7 +46,6 @@ along with GCC; see the file COPYING3. If not see
#include "ggc.h"
#include "tm-constrs.h"
#include "tree-pass.h"
#include "integrate.h"
/* Which cpu we're compiling for. */
int epiphany_cpu_type;

View File

@ -46,7 +46,6 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "target-def.h"
#include "targhooks.h"
#include "integrate.h"
#include "langhooks.h"
#include "df.h"

View File

@ -36,7 +36,6 @@
#include "recog.h"
#include "diagnostic-core.h"
#include "ggc.h"
#include "integrate.h"
#include "df.h"
#include "tm_p.h"
#include "target.h"

View File

@ -45,7 +45,6 @@ along with GCC; see the file COPYING3. If not see
#include "tm_p.h"
#include "ggc.h"
#include "diagnostic-core.h"
#include "integrate.h"
#include "target.h"
#include "target-def.h"
#include "langhooks.h"

View File

@ -31,7 +31,6 @@
#include "conditions.h"
#include "insn-flags.h"
#include "insn-attr.h"
#include "integrate.h"
#include "recog.h"
#include "tree.h"
#include "function.h"

View File

@ -50,7 +50,6 @@ along with GCC; see the file COPYING3. If not see
#include "debug.h"
#include "target.h"
#include "target-def.h"
#include "integrate.h"
#include "langhooks.h"
#include "cfglayout.h"
#include "sched-int.h"

View File

@ -41,7 +41,6 @@ along with GCC; see the file COPYING3. If not see
#include "dwarf2.h"
#include "debug.h"
#include "tm_p.h"
#include "integrate.h"
#include "target.h"
#include "target-def.h"
#include "df.h"

View File

@ -37,7 +37,6 @@ along with GCC; see the file COPYING3. If not see
#include "expr.h"
#include "optabs.h"
#include "reload.h"
#include "integrate.h"
#include "function.h"
#include "diagnostic-core.h"
#include "ggc.h"

View File

@ -40,7 +40,6 @@ along with GCC; see the file COPYING3. If not, see
#include "function.h"
#include "output.h"
#include "basic-block.h"
#include "integrate.h"
#include "diagnostic-core.h"
#include "ggc.h"
#include "hashtab.h"

View File

@ -41,7 +41,6 @@
#include "function.h"
#include "output.h"
#include "basic-block.h"
#include "integrate.h"
#include "diagnostic-core.h"
#include "toplev.h"
#include "ggc.h"

View File

@ -25,7 +25,7 @@ rs6000.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(REGS_H) hard-reg-set.h \
real.h insn-config.h conditions.h insn-attr.h flags.h $(RECOG_H) \
$(OBSTACK_H) $(TREE_H) $(EXPR_H) $(OPTABS_H) except.h function.h \
output.h $(BASIC_BLOCK_H) $(INTEGRATE_H) toplev.h $(GGC_H) $(HASHTAB_H) \
output.h $(BASIC_BLOCK_H) toplev.h $(GGC_H) $(HASHTAB_H) \
$(TM_P_H) $(TARGET_H) $(TARGET_DEF_H) langhooks.h reload.h gt-rs6000.h \
cfglayout.h cfgloop.h $(OPTS_H) $(COMMON_TARGET_H)

View File

@ -42,7 +42,6 @@ along with GCC; see the file COPYING3. If not see
#include "reload.h"
#include "diagnostic-core.h"
#include "basic-block.h"
#include "integrate.h"
#include "ggc.h"
#include "target.h"
#include "target-def.h"

View File

@ -45,7 +45,6 @@
#include "debug.h"
#include "target.h"
#include "target-def.h"
#include "integrate.h"
#include "langhooks.h"
#include "cfglayout.h"
#include "df.h"

View File

@ -39,7 +39,6 @@ along with GCC; see the file COPYING3. If not see
#include "insn-attr.h"
#include "diagnostic-core.h"
#include "recog.h"
#include "integrate.h"
#include "dwarf2.h"
#include "tm_p.h"
#include "target.h"

View File

@ -35,7 +35,6 @@
#include "function.h"
#include "output.h"
#include "basic-block.h"
#include "integrate.h"
#include "diagnostic-core.h"
#include "ggc.h"
#include "hashtab.h"

View File

@ -22,7 +22,7 @@ spu.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(REGS_H) hard-reg-set.h \
real.h insn-config.h conditions.h insn-attr.h flags.h $(RECOG_H) \
$(OBSTACK_H) $(TREE_H) $(EXPR_H) $(OPTABS_H) except.h function.h \
output.h $(BASIC_BLOCK_H) $(INTEGRATE_H) $(GGC_H) $(HASHTAB_H) \
output.h $(BASIC_BLOCK_H) $(GGC_H) $(HASHTAB_H) \
$(TM_P_H) $(TARGET_H) $(TARGET_DEF_H) langhooks.h reload.h cfglayout.h \
$(srcdir)/config/spu/spu-protos.h \
$(srcdir)/config/spu/spu-builtins.def

View File

@ -37,7 +37,7 @@
#include "tm-constrs.h"
#include "target.h"
#include "target-def.h"
#include "integrate.h"
#include "function.h"
#include "dwarf2.h"
#include "timevar.h"
#include "gimple.h"

View File

@ -38,7 +38,7 @@
#include "tm-constrs.h"
#include "target.h"
#include "target-def.h"
#include "integrate.h"
#include "function.h"
#include "dwarf2.h"
#include "timevar.h"
#include "gimple.h"

View File

@ -37,7 +37,6 @@
#include "function.h"
#include "diagnostic-core.h"
#include "ggc.h"
#include "integrate.h"
#include "tm_p.h"
#include "target.h"
#include "target-def.h"

View File

@ -622,9 +622,7 @@ static enum machine_mode cse_cc_succs (basic_block, basic_block, rtx, rtx,
static const struct rtl_hooks cse_rtl_hooks = RTL_HOOKS_INITIALIZER;
/* Nonzero if X has the form (PLUS frame-pointer integer). We check for
virtual regs here because the simplify_*_operation routines are called
by integrate.c, which is called before virtual register instantiation. */
/* Nonzero if X has the form (PLUS frame-pointer integer). */
static bool
fixed_base_plus_p (rtx x)
@ -636,9 +634,6 @@ fixed_base_plus_p (rtx x)
return true;
if (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM])
return true;
if (REGNO (x) >= FIRST_VIRTUAL_REGISTER
&& REGNO (x) <= LAST_VIRTUAL_REGISTER)
return true;
return false;
case PLUS:

View File

@ -16409,6 +16409,135 @@ gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
pop_decl_scope ();
}
}
/* Forward declare these functions, because they are mutually recursive
with their set_block_* pairing functions. */
static void set_decl_origin_self (tree);
static void set_decl_abstract_flags (tree, int);
/* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
that it points to the node itself, thus indicating that the node is its
own (abstract) origin. Additionally, if the BLOCK_ABSTRACT_ORIGIN for
the given node is NULL, recursively descend the decl/block tree which
it is the root of, and for each other ..._DECL or BLOCK node contained
therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
values to point to themselves. */
static void
set_block_origin_self (tree stmt)
{
if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE)
{
BLOCK_ABSTRACT_ORIGIN (stmt) = stmt;
{
tree local_decl;
for (local_decl = BLOCK_VARS (stmt);
local_decl != NULL_TREE;
local_decl = DECL_CHAIN (local_decl))
if (! DECL_EXTERNAL (local_decl))
set_decl_origin_self (local_decl); /* Potential recursion. */
}
{
tree subblock;
for (subblock = BLOCK_SUBBLOCKS (stmt);
subblock != NULL_TREE;
subblock = BLOCK_CHAIN (subblock))
set_block_origin_self (subblock); /* Recurse. */
}
}
}
/* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
node to so that it points to the node itself, thus indicating that the
node represents its own (abstract) origin. Additionally, if the
DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
the decl/block tree of which the given node is the root of, and for
each other ..._DECL or BLOCK node contained therein whose
DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
point to themselves. */
static void
set_decl_origin_self (tree decl)
{
if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE)
{
DECL_ABSTRACT_ORIGIN (decl) = decl;
if (TREE_CODE (decl) == FUNCTION_DECL)
{
tree arg;
for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
DECL_ABSTRACT_ORIGIN (arg) = arg;
if (DECL_INITIAL (decl) != NULL_TREE
&& DECL_INITIAL (decl) != error_mark_node)
set_block_origin_self (DECL_INITIAL (decl));
}
}
}
/* Given a pointer to some BLOCK node, and a boolean value to set the
"abstract" flags to, set that value into the BLOCK_ABSTRACT flag for
the given block, and for all local decls and all local sub-blocks
(recursively) which are contained therein. */
static void
set_block_abstract_flags (tree stmt, int setting)
{
tree local_decl;
tree subblock;
unsigned int i;
BLOCK_ABSTRACT (stmt) = setting;
for (local_decl = BLOCK_VARS (stmt);
local_decl != NULL_TREE;
local_decl = DECL_CHAIN (local_decl))
if (! DECL_EXTERNAL (local_decl))
set_decl_abstract_flags (local_decl, setting);
for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
{
local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
|| TREE_CODE (local_decl) == PARM_DECL)
set_decl_abstract_flags (local_decl, setting);
}
for (subblock = BLOCK_SUBBLOCKS (stmt);
subblock != NULL_TREE;
subblock = BLOCK_CHAIN (subblock))
set_block_abstract_flags (subblock, setting);
}
/* Given a pointer to some ..._DECL node, and a boolean value to set the
"abstract" flags to, set that value into the DECL_ABSTRACT flag for the
given decl, and (in the case where the decl is a FUNCTION_DECL) also
set the abstract flags for all of the parameters, local vars, local
blocks and sub-blocks (recursively) to the same setting. */
static void
set_decl_abstract_flags (tree decl, int setting)
{
DECL_ABSTRACT (decl) = setting;
if (TREE_CODE (decl) == FUNCTION_DECL)
{
tree arg;
for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
DECL_ABSTRACT (arg) = setting;
if (DECL_INITIAL (decl) != NULL_TREE
&& DECL_INITIAL (decl) != error_mark_node)
set_block_abstract_flags (DECL_INITIAL (decl), setting);
}
}
/* Generate the DWARF2 info for the "abstract" instance of a function which we
may later generate inlined and/or out-of-line instances of. */

View File

@ -123,7 +123,6 @@ along with GCC; see the file COPYING3. If not see
#include "libfuncs.h"
#include "insn-config.h"
#include "except.h"
#include "integrate.h"
#include "hard-reg-set.h"
#include "basic-block.h"
#include "output.h"

View File

@ -1865,9 +1865,9 @@ extract_fixed_bit_field (enum machine_mode tmode, rtx op0,
/* If the field does not already start at the lsb,
shift it so it does. */
/* Maybe propagate the target for the shift. */
/* But not if we will return it--could confuse integrate.c. */
rtx subtarget = (target != 0 && REG_P (target) ? target : 0);
if (tmode != mode) subtarget = 0;
if (tmode != mode)
subtarget = 0;
op0 = expand_shift (RSHIFT_EXPR, mode, op0, bitpos, subtarget, 1);
}
/* Convert the value to the desired mode. */

View File

@ -54,7 +54,6 @@ along with GCC; see the file COPYING3. If not see
#include "hashtab.h"
#include "ggc.h"
#include "tm_p.h"
#include "integrate.h"
#include "langhooks.h"
#include "target.h"
#include "common/common-target.h"
@ -1224,6 +1223,133 @@ init_temp_slots (void)
htab_empty (temp_slot_address_table);
}
/* Functions and data structures to keep track of the values hard regs
had at the start of the function. */
/* Private type used by get_hard_reg_initial_reg, get_hard_reg_initial_val,
and has_hard_reg_initial_val.. */
typedef struct GTY(()) initial_value_pair {
rtx hard_reg;
rtx pseudo;
} initial_value_pair;
/* ??? This could be a VEC but there is currently no way to define an
opaque VEC type. This could be worked around by defining struct
initial_value_pair in function.h. */
typedef struct GTY(()) initial_value_struct {
int num_entries;
int max_entries;
initial_value_pair * GTY ((length ("%h.num_entries"))) entries;
} initial_value_struct;
/* If a pseudo represents an initial hard reg (or expression), return
it, else return NULL_RTX. */
rtx
get_hard_reg_initial_reg (rtx reg)
{
struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
int i;
if (ivs == 0)
return NULL_RTX;
for (i = 0; i < ivs->num_entries; i++)
if (rtx_equal_p (ivs->entries[i].pseudo, reg))
return ivs->entries[i].hard_reg;
return NULL_RTX;
}
/* Make sure that there's a pseudo register of mode MODE that stores the
initial value of hard register REGNO. Return an rtx for such a pseudo. */
rtx
get_hard_reg_initial_val (enum machine_mode mode, unsigned int regno)
{
struct initial_value_struct *ivs;
rtx rv;
rv = has_hard_reg_initial_val (mode, regno);
if (rv)
return rv;
ivs = crtl->hard_reg_initial_vals;
if (ivs == 0)
{
ivs = ggc_alloc_initial_value_struct ();
ivs->num_entries = 0;
ivs->max_entries = 5;
ivs->entries = ggc_alloc_vec_initial_value_pair (5);
crtl->hard_reg_initial_vals = ivs;
}
if (ivs->num_entries >= ivs->max_entries)
{
ivs->max_entries += 5;
ivs->entries = GGC_RESIZEVEC (initial_value_pair, ivs->entries,
ivs->max_entries);
}
ivs->entries[ivs->num_entries].hard_reg = gen_rtx_REG (mode, regno);
ivs->entries[ivs->num_entries].pseudo = gen_reg_rtx (mode);
return ivs->entries[ivs->num_entries++].pseudo;
}
/* See if get_hard_reg_initial_val has been used to create a pseudo
for the initial value of hard register REGNO in mode MODE. Return
the associated pseudo if so, otherwise return NULL. */
rtx
has_hard_reg_initial_val (enum machine_mode mode, unsigned int regno)
{
struct initial_value_struct *ivs;
int i;
ivs = crtl->hard_reg_initial_vals;
if (ivs != 0)
for (i = 0; i < ivs->num_entries; i++)
if (GET_MODE (ivs->entries[i].hard_reg) == mode
&& REGNO (ivs->entries[i].hard_reg) == regno)
return ivs->entries[i].pseudo;
return NULL_RTX;
}
unsigned int
emit_initial_value_sets (void)
{
struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
int i;
rtx seq;
if (ivs == 0)
return 0;
start_sequence ();
for (i = 0; i < ivs->num_entries; i++)
emit_move_insn (ivs->entries[i].pseudo, ivs->entries[i].hard_reg);
seq = get_insns ();
end_sequence ();
emit_insn_at_entry (seq);
return 0;
}
/* Return the hardreg-pseudoreg initial values pair entry I and
TRUE if I is a valid entry, or FALSE if I is not a valid entry. */
bool
initial_value_entry (int i, rtx *hreg, rtx *preg)
{
struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
if (!ivs || i >= ivs->num_entries)
return false;
*hreg = ivs->entries[i].hard_reg;
*preg = ivs->entries[i].pseudo;
return true;
}
/* These routines are responsible for converting virtual register references
to the actual hard register references once RTL generation is complete.

View File

@ -264,8 +264,11 @@ struct GTY(()) rtl_data {
the hard register containing the result. */
rtx return_rtx;
/* Opaque pointer used by get_hard_reg_initial_val and
has_hard_reg_initial_val (see integrate.[hc]). */
/* Vector of initial-value pairs. Each pair consists of a pseudo
register of approprite mode that stores the initial value a hard
register REGNO, and that hard register itself. */
/* ??? This could be a VEC but there is currently no way to define an
opaque VEC type. */
struct initial_value_struct *hard_reg_initial_vals;
/* A variable living at the top of the frame that holds a known value.
@ -688,7 +691,6 @@ void types_used_by_var_decl_insert (tree type, tree var_decl);
referenced by the global variable. */
extern GTY(()) VEC(tree,gc) *types_used_by_cur_var_decl;
/* cfun shouldn't be set directly; use one of these functions instead. */
extern void set_cfun (struct function *new_cfun);
extern void push_cfun (struct function *new_cfun);
@ -760,6 +762,14 @@ extern int get_last_funcdef_no (void);
extern bool requires_stack_frame_p (rtx, HARD_REG_SET, HARD_REG_SET);
#endif
extern rtx get_hard_reg_initial_val (enum machine_mode, unsigned int);
extern rtx has_hard_reg_initial_val (enum machine_mode, unsigned int);
extern rtx get_hard_reg_initial_reg (rtx);
extern bool initial_value_entry (int i, rtx *, rtx *);
/* Called from gimple_expand_cfg. */
extern unsigned int emit_initial_value_sets (void);
/* In predict.c */
extern bool optimize_function_for_size_p (struct function *);
extern bool optimize_function_for_speed_p (struct function *);

View File

@ -809,7 +809,6 @@ from the machine description file `md'. */\n\n");
printf ("#include \"tm-constrs.h\"\n");
printf ("#include \"ggc.h\"\n");
printf ("#include \"basic-block.h\"\n");
printf ("#include \"integrate.h\"\n");
printf ("#include \"target.h\"\n\n");
printf ("#define FAIL return (end_sequence (), _val)\n");
printf ("#define DONE return (_val = get_insns (), end_sequence (), _val)\n\n");

View File

@ -117,7 +117,7 @@ read_line (FILE *file)
the null character. */
const char *
location_get_source_line(expanded_location xloc)
location_get_source_line (expanded_location xloc)
{
const char *buffer;
int lines = 1;

View File

@ -1,360 +0,0 @@
/* Procedure integration for GCC.
Copyright (C) 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "rtl.h"
#include "tree.h"
#include "tm_p.h"
#include "regs.h"
#include "flags.h"
#include "debug.h"
#include "insn-config.h"
#include "expr.h"
#include "output.h"
#include "recog.h"
/* For reg_equivs. */
#include "reload.h"
#include "integrate.h"
#include "except.h"
#include "function.h"
#include "diagnostic-core.h"
#include "intl.h"
#include "params.h"
#include "ggc.h"
#include "target.h"
#include "langhooks.h"
#include "tree-pass.h"
#include "df.h"
/* Round to the next highest integer that meets the alignment. */
#define CEIL_ROUND(VALUE,ALIGN) (((VALUE) + (ALIGN) - 1) & ~((ALIGN)- 1))
/* Private type used by {get/has}_hard_reg_initial_val. */
typedef struct GTY(()) initial_value_pair {
rtx hard_reg;
rtx pseudo;
} initial_value_pair;
typedef struct GTY(()) initial_value_struct {
int num_entries;
int max_entries;
initial_value_pair * GTY ((length ("%h.num_entries"))) entries;
} initial_value_struct;
static void set_block_origin_self (tree);
static void set_block_abstract_flags (tree, int);
/* Return false if the function FNDECL cannot be inlined on account of its
attributes, true otherwise. */
bool
function_attribute_inlinable_p (const_tree fndecl)
{
if (targetm.attribute_table)
{
const_tree a;
for (a = DECL_ATTRIBUTES (fndecl); a; a = TREE_CHAIN (a))
{
const_tree name = TREE_PURPOSE (a);
int i;
for (i = 0; targetm.attribute_table[i].name != NULL; i++)
if (is_attribute_p (targetm.attribute_table[i].name, name))
return targetm.function_attribute_inlinable_p (fndecl);
}
}
return true;
}
/* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
that it points to the node itself, thus indicating that the node is its
own (abstract) origin. Additionally, if the BLOCK_ABSTRACT_ORIGIN for
the given node is NULL, recursively descend the decl/block tree which
it is the root of, and for each other ..._DECL or BLOCK node contained
therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
values to point to themselves. */
static void
set_block_origin_self (tree stmt)
{
if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE)
{
BLOCK_ABSTRACT_ORIGIN (stmt) = stmt;
{
tree local_decl;
for (local_decl = BLOCK_VARS (stmt);
local_decl != NULL_TREE;
local_decl = DECL_CHAIN (local_decl))
if (! DECL_EXTERNAL (local_decl))
set_decl_origin_self (local_decl); /* Potential recursion. */
}
{
tree subblock;
for (subblock = BLOCK_SUBBLOCKS (stmt);
subblock != NULL_TREE;
subblock = BLOCK_CHAIN (subblock))
set_block_origin_self (subblock); /* Recurse. */
}
}
}
/* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
node to so that it points to the node itself, thus indicating that the
node represents its own (abstract) origin. Additionally, if the
DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
the decl/block tree of which the given node is the root of, and for
each other ..._DECL or BLOCK node contained therein whose
DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
point to themselves. */
void
set_decl_origin_self (tree decl)
{
if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE)
{
DECL_ABSTRACT_ORIGIN (decl) = decl;
if (TREE_CODE (decl) == FUNCTION_DECL)
{
tree arg;
for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
DECL_ABSTRACT_ORIGIN (arg) = arg;
if (DECL_INITIAL (decl) != NULL_TREE
&& DECL_INITIAL (decl) != error_mark_node)
set_block_origin_self (DECL_INITIAL (decl));
}
}
}
/* Given a pointer to some BLOCK node, and a boolean value to set the
"abstract" flags to, set that value into the BLOCK_ABSTRACT flag for
the given block, and for all local decls and all local sub-blocks
(recursively) which are contained therein. */
static void
set_block_abstract_flags (tree stmt, int setting)
{
tree local_decl;
tree subblock;
unsigned int i;
BLOCK_ABSTRACT (stmt) = setting;
for (local_decl = BLOCK_VARS (stmt);
local_decl != NULL_TREE;
local_decl = DECL_CHAIN (local_decl))
if (! DECL_EXTERNAL (local_decl))
set_decl_abstract_flags (local_decl, setting);
for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
{
local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
|| TREE_CODE (local_decl) == PARM_DECL)
set_decl_abstract_flags (local_decl, setting);
}
for (subblock = BLOCK_SUBBLOCKS (stmt);
subblock != NULL_TREE;
subblock = BLOCK_CHAIN (subblock))
set_block_abstract_flags (subblock, setting);
}
/* Given a pointer to some ..._DECL node, and a boolean value to set the
"abstract" flags to, set that value into the DECL_ABSTRACT flag for the
given decl, and (in the case where the decl is a FUNCTION_DECL) also
set the abstract flags for all of the parameters, local vars, local
blocks and sub-blocks (recursively) to the same setting. */
void
set_decl_abstract_flags (tree decl, int setting)
{
DECL_ABSTRACT (decl) = setting;
if (TREE_CODE (decl) == FUNCTION_DECL)
{
tree arg;
for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
DECL_ABSTRACT (arg) = setting;
if (DECL_INITIAL (decl) != NULL_TREE
&& DECL_INITIAL (decl) != error_mark_node)
set_block_abstract_flags (DECL_INITIAL (decl), setting);
}
}
/* Functions to keep track of the values hard regs had at the start of
the function. */
rtx
get_hard_reg_initial_reg (rtx reg)
{
struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
int i;
if (ivs == 0)
return NULL_RTX;
for (i = 0; i < ivs->num_entries; i++)
if (rtx_equal_p (ivs->entries[i].pseudo, reg))
return ivs->entries[i].hard_reg;
return NULL_RTX;
}
/* Make sure that there's a pseudo register of mode MODE that stores the
initial value of hard register REGNO. Return an rtx for such a pseudo. */
rtx
get_hard_reg_initial_val (enum machine_mode mode, unsigned int regno)
{
struct initial_value_struct *ivs;
rtx rv;
rv = has_hard_reg_initial_val (mode, regno);
if (rv)
return rv;
ivs = crtl->hard_reg_initial_vals;
if (ivs == 0)
{
ivs = ggc_alloc_initial_value_struct ();
ivs->num_entries = 0;
ivs->max_entries = 5;
ivs->entries = ggc_alloc_vec_initial_value_pair (5);
crtl->hard_reg_initial_vals = ivs;
}
if (ivs->num_entries >= ivs->max_entries)
{
ivs->max_entries += 5;
ivs->entries = GGC_RESIZEVEC (initial_value_pair, ivs->entries,
ivs->max_entries);
}
ivs->entries[ivs->num_entries].hard_reg = gen_rtx_REG (mode, regno);
ivs->entries[ivs->num_entries].pseudo = gen_reg_rtx (mode);
return ivs->entries[ivs->num_entries++].pseudo;
}
/* See if get_hard_reg_initial_val has been used to create a pseudo
for the initial value of hard register REGNO in mode MODE. Return
the associated pseudo if so, otherwise return NULL. */
rtx
has_hard_reg_initial_val (enum machine_mode mode, unsigned int regno)
{
struct initial_value_struct *ivs;
int i;
ivs = crtl->hard_reg_initial_vals;
if (ivs != 0)
for (i = 0; i < ivs->num_entries; i++)
if (GET_MODE (ivs->entries[i].hard_reg) == mode
&& REGNO (ivs->entries[i].hard_reg) == regno)
return ivs->entries[i].pseudo;
return NULL_RTX;
}
unsigned int
emit_initial_value_sets (void)
{
struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
int i;
rtx seq;
if (ivs == 0)
return 0;
start_sequence ();
for (i = 0; i < ivs->num_entries; i++)
emit_move_insn (ivs->entries[i].pseudo, ivs->entries[i].hard_reg);
seq = get_insns ();
end_sequence ();
emit_insn_at_entry (seq);
return 0;
}
/* If the backend knows where to allocate pseudos for hard
register initial values, register these allocations now. */
void
allocate_initial_values (VEC (reg_equivs_t, gc) *reg_equivs)
{
if (targetm.allocate_initial_value)
{
struct initial_value_struct *ivs = crtl->hard_reg_initial_vals;
int i;
if (ivs == 0)
return;
for (i = 0; i < ivs->num_entries; i++)
{
int regno = REGNO (ivs->entries[i].pseudo);
rtx x = targetm.allocate_initial_value (ivs->entries[i].hard_reg);
if (x && REG_N_SETS (REGNO (ivs->entries[i].pseudo)) <= 1)
{
if (MEM_P (x))
reg_equiv_memory_loc (regno) = x;
else
{
basic_block bb;
int new_regno;
gcc_assert (REG_P (x));
new_regno = REGNO (x);
reg_renumber[regno] = new_regno;
/* Poke the regno right into regno_reg_rtx so that even
fixed regs are accepted. */
SET_REGNO (ivs->entries[i].pseudo, new_regno);
/* Update global register liveness information. */
FOR_EACH_BB (bb)
{
if (REGNO_REG_SET_P(df_get_live_in (bb), regno))
SET_REGNO_REG_SET (df_get_live_in (bb), new_regno);
if (REGNO_REG_SET_P(df_get_live_out (bb), regno))
SET_REGNO_REG_SET (df_get_live_out (bb), new_regno);
}
}
}
}
}
}
#include "gt-integrate.h"

View File

@ -1,33 +0,0 @@
/* Function integration definitions for GCC
Copyright (C) 1990, 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
2007, 2008, 2010 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
extern rtx get_hard_reg_initial_val (enum machine_mode, unsigned int);
extern rtx has_hard_reg_initial_val (enum machine_mode, unsigned int);
/* If a pseudo represents an initial hard reg (or expression), return
it, else return NULL_RTX. */
extern rtx get_hard_reg_initial_reg (rtx);
/* Called from rest_of_compilation. */
extern unsigned int emit_initial_value_sets (void);
/* Check whether there's any attribute in a function declaration that
makes the function uninlinable. Returns false if it finds any,
true otherwise. */
extern bool function_attribute_inlinable_p (const_tree);

View File

@ -380,7 +380,7 @@ along with GCC; see the file COPYING3. If not see
#include "except.h"
#include "reload.h"
#include "diagnostic-core.h"
#include "integrate.h"
#include "function.h"
#include "ggc.h"
#include "ira-int.h"
#include "dce.h"
@ -4034,7 +4034,55 @@ move_unallocated_pseudos (void)
}
}
/* If the backend knows where to allocate pseudos for hard
register initial values, register these allocations now. */
void
allocate_initial_values (void)
{
if (targetm.allocate_initial_value)
{
rtx hreg, preg, x;
int i, regno;
for (i = 0; HARD_REGISTER_NUM_P (i); i++)
{
if (! initial_value_entry (i, &hreg, &preg))
break;
x = targetm.allocate_initial_value (hreg);
regno = REGNO (preg);
if (x && REG_N_SETS (regno) <= 1)
{
if (MEM_P (x))
reg_equiv_memory_loc (regno) = x;
else
{
basic_block bb;
int new_regno;
gcc_assert (REG_P (x));
new_regno = REGNO (x);
reg_renumber[regno] = new_regno;
/* Poke the regno right into regno_reg_rtx so that even
fixed regs are accepted. */
SET_REGNO (preg, new_regno);
/* Update global register liveness information. */
FOR_EACH_BB (bb)
{
if (REGNO_REG_SET_P(df_get_live_in (bb), regno))
SET_REGNO_REG_SET (df_get_live_in (bb), new_regno);
if (REGNO_REG_SET_P(df_get_live_out (bb), regno))
SET_REGNO_REG_SET (df_get_live_out (bb), new_regno);
}
}
}
}
gcc_checking_assert (! initial_value_entry (FIRST_PSEUDO_REGISTER,
&hreg, &preg));
}
}
/* All natural loops. */
struct loops ira_loops;
@ -4239,7 +4287,7 @@ ira (FILE *f)
memset (ira_spilled_reg_stack_slots, 0,
max_regno * sizeof (struct ira_spilled_reg_stack_slot));
}
allocate_initial_values (reg_equivs);
allocate_initial_values ();
/* See comment for find_moveable_pseudos call. */
if (ira_conflicts_p)

View File

@ -30,7 +30,6 @@ along with GCC; see the file COPYING3. If not see
#include "gimple.h"
#include "rtl.h"
#include "insn-config.h"
#include "integrate.h"
#include "flags.h"
#include "langhooks.h"
#include "target.h"

View File

@ -54,7 +54,6 @@ along with GCC; see the file COPYING3. If not see
#include "params.h"
#include "reload.h"
#include "dwarf2asm.h"
#include "integrate.h"
#include "debug.h"
#include "target.h"
#include "langhooks.h"

View File

@ -460,9 +460,5 @@ extern void debug_reload (void);
reloading to/from a register that is wider than a word. */
extern rtx reload_adjust_reg_for_mode (rtx, enum machine_mode);
/* Ideally this function would be in ira.c or reload, but due to dependencies
on integrate.h, it's part of integrate.c. */
extern void allocate_initial_values (VEC (reg_equivs_t, gc) *);
/* Allocate or grow the reg_equiv tables, initializing new entries to 0. */
extern void grow_reg_equivs (void);

View File

@ -59,7 +59,6 @@ along with GCC; see the file COPYING3. If not see
#include "reload.h"
#include "ira.h"
#include "dwarf2asm.h"
#include "integrate.h"
#include "debug.h"
#include "target.h"
#include "common/common-target.h"

View File

@ -48,7 +48,6 @@ along with GCC; see the file COPYING3. If not see
#include "value-prof.h"
#include "tree-pass.h"
#include "target.h"
#include "integrate.h"
#include "rtl.h" /* FIXME: For asm_str_count. */
@ -3236,6 +3235,29 @@ inline_forbidden_p (tree fndecl)
pointer_set_destroy (visited_nodes);
return forbidden_p;
}
/* Return false if the function FNDECL cannot be inlined on account of its
attributes, true otherwise. */
static bool
function_attribute_inlinable_p (const_tree fndecl)
{
if (targetm.attribute_table)
{
const_tree a;
for (a = DECL_ATTRIBUTES (fndecl); a; a = TREE_CHAIN (a))
{
const_tree name = TREE_PURPOSE (a);
int i;
for (i = 0; targetm.attribute_table[i].name != NULL; i++)
if (is_attribute_p (targetm.attribute_table[i].name, name))
return targetm.function_attribute_inlinable_p (fndecl);
}
}
return true;
}
/* Returns nonzero if FN is a function that does not have any
fundamental inline blocking properties. */

View File

@ -5658,10 +5658,6 @@ extern tree decl_attributes (tree *, tree, int);
extern void apply_tm_attr (tree, tree);
/* In integrate.c */
extern void set_decl_abstract_flags (tree, int);
extern void set_decl_origin_self (tree);
/* In stor-layout.c */
extern void set_min_and_max_values_for_integral_type (tree, int, bool);
extern void fixup_signed_type (tree);