diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2012-05-29 15:36:18 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2012-05-29 15:36:18 +0000 |
commit | 6399c0abb3e562d7dc9cbf2f85998965dac1a1cb (patch) | |
tree | 7e6eb315a8fd801513f14a09fb9035a39128e409 | |
parent | 030a9eb6d827dc3a2363cb220bb4ea6dce083981 (diff) | |
download | gcc-6399c0abb3e562d7dc9cbf2f85998965dac1a1cb.zip gcc-6399c0abb3e562d7dc9cbf2f85998965dac1a1cb.tar.gz gcc-6399c0abb3e562d7dc9cbf2f85998965dac1a1cb.tar.bz2 |
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
44 files changed, 424 insertions, 465 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 50ba4a0..07a610f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index a6fe0e4..6cdd8ee 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -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 \ diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 126b132e..8a31a9f 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -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 diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 225c9ab..6d15bf7 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -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" diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index cb7eed5..c6d4660 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -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" diff --git a/gcc/config/arm/t-arm b/gcc/config/arm/t-arm index 1128d19..2bc97a6 100644 --- a/gcc/config/arm/t-arm +++ b/gcc/config/arm/t-arm @@ -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 diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index 1342c56..3cef847 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -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" diff --git a/gcc/config/c6x/c6x.c b/gcc/config/c6x/c6x.c index a613bba..978d0cb 100644 --- a/gcc/config/c6x/c6x.c +++ b/gcc/config/c6x/c6x.c @@ -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" diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c index f1a8db7..aca296f 100644 --- a/gcc/config/epiphany/epiphany.c +++ b/gcc/config/epiphany/epiphany.c @@ -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; diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index ace9e43..d7a111a 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -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" diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index b27a3a5..a2ae35a 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -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" diff --git a/gcc/config/mep/mep.c b/gcc/config/mep/mep.c index f9ebab8..8e6cc4d 100644 --- a/gcc/config/mep/mep.c +++ b/gcc/config/mep/mep.c @@ -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" diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c index 081715d..8d08bc2 100644 --- a/gcc/config/microblaze/microblaze.c +++ b/gcc/config/microblaze/microblaze.c @@ -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" diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 416c1aa..122bc98 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -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" diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c index 8f801e6..3a99cb6 100644 --- a/gcc/config/mmix/mmix.c +++ b/gcc/config/mmix/mmix.c @@ -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" diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index a95d703..95f2262 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -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" diff --git a/gcc/config/picochip/picochip.c b/gcc/config/picochip/picochip.c index 57cbd15..2beddce 100644 --- a/gcc/config/picochip/picochip.c +++ b/gcc/config/picochip/picochip.c @@ -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" diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index a11aefd..f6cef09 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -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" diff --git a/gcc/config/rs6000/t-rs6000 b/gcc/config/rs6000/t-rs6000 index 5204f58..3ca2732 100644 --- a/gcc/config/rs6000/t-rs6000 +++ b/gcc/config/rs6000/t-rs6000 @@ -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) diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index ede3a55..bc0bf8a 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -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" diff --git a/gcc/config/score/score.c b/gcc/config/score/score.c index 0af0fd5..9c68e19 100644 --- a/gcc/config/score/score.c +++ b/gcc/config/score/score.c @@ -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" diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 048a754..4a2e8f4 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -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" diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index fb482fb..b81bf5e 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -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" diff --git a/gcc/config/spu/t-spu-elf b/gcc/config/spu/t-spu-elf index 50c8d03..84fbbb2 100644 --- a/gcc/config/spu/t-spu-elf +++ b/gcc/config/spu/t-spu-elf @@ -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 diff --git a/gcc/config/tilegx/tilegx.c b/gcc/config/tilegx/tilegx.c index a23e193..7ca4eb6 100644 --- a/gcc/config/tilegx/tilegx.c +++ b/gcc/config/tilegx/tilegx.c @@ -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" diff --git a/gcc/config/tilepro/tilepro.c b/gcc/config/tilepro/tilepro.c index 2b18b4f..ce28d9e 100644 --- a/gcc/config/tilepro/tilepro.c +++ b/gcc/config/tilepro/tilepro.c @@ -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" diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c index e2a72b0..186327d 100644 --- a/gcc/config/v850/v850.c +++ b/gcc/config/v850/v850.c @@ -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" @@ -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: diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 15cbff0..b233d30 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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. */ diff --git a/gcc/except.c b/gcc/except.c index 158ca20..aae8aa0 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -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" diff --git a/gcc/expmed.c b/gcc/expmed.c index a641387..96056b4 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -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. */ diff --git a/gcc/function.c b/gcc/function.c index 87edf7a..274d421 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -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. diff --git a/gcc/function.h b/gcc/function.h index 34efb31..c8357bf 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -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 *); diff --git a/gcc/genemit.c b/gcc/genemit.c index 91025e2..eefe497 100644 --- a/gcc/genemit.c +++ b/gcc/genemit.c @@ -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"); diff --git a/gcc/input.c b/gcc/input.c index 99e6e04..52dde0b 100644 --- a/gcc/input.c +++ b/gcc/input.c @@ -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; diff --git a/gcc/integrate.c b/gcc/integrate.c deleted file mode 100644 index 53c5d78..0000000 --- a/gcc/integrate.c +++ /dev/null @@ -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" diff --git a/gcc/integrate.h b/gcc/integrate.h deleted file mode 100644 index e32a92a..0000000 --- a/gcc/integrate.h +++ /dev/null @@ -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); - @@ -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) diff --git a/gcc/langhooks.c b/gcc/langhooks.c index 340cc99fa..46c19c3 100644 --- a/gcc/langhooks.c +++ b/gcc/langhooks.c @@ -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" diff --git a/gcc/passes.c b/gcc/passes.c index b6fe18e..54bf029 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -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" diff --git a/gcc/reload.h b/gcc/reload.h index f747099..29d15ea 100644 --- a/gcc/reload.h +++ b/gcc/reload.h @@ -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); diff --git a/gcc/toplev.c b/gcc/toplev.c index 3ac69cd..0bdb218 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -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" diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 0190aa9..ccda8c9 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -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. */ @@ -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); |