mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-26 19:26:16 +08:00
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:
parent
030a9eb6d8
commit
6399c0abb3
@ -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.
|
||||
|
@ -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 \
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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:
|
||||
|
129
gcc/dwarf2out.c
129
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. */
|
||||
|
@ -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"
|
||||
|
@ -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. */
|
||||
|
128
gcc/function.c
128
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.
|
||||
|
||||
|
@ -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 *);
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
|
360
gcc/integrate.c
360
gcc/integrate.c
@ -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"
|
@ -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);
|
||||
|
52
gcc/ira.c
52
gcc/ira.c
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user