From 4b983fdc50c590dde021fae533d8c3745897fdae Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 28 Jul 2000 10:46:18 -0700 Subject: cse.c (canon_hash): Handle PRE_MODIFY/POST_MODIFY. * cse.c (canon_hash): Handle PRE_MODIFY/POST_MODIFY. (cse_insn): Likewise. (addr_affects_sp_p): Likewise. * expr.c (move_by_pieces): Likewise. (clear_by_pieces): Likewise. * gcse.c (oprs_unchanged_p): Likewise. * haifa-sched.c (sched_analyze_2): Likewise. * recog.c (offsettable_address_p): Likewise. * regclass.c (record_address_regs): Likewise. * reload.c (find_reusable_reload): Likewise. (push_reload): Likewise. (operands_match_p): Likewise. (decompose): Likewise. (find_reloads_address_1): Likewise. (find_inc_amount): Likewise. * reload1.c (elimination_effects): Likewise. * resource.c (mark_set_resources): Likewise. * flow.c (attempt_auto_inc): New function; mostly broken out of find_auto_inc. (find_auto_inc): Split into two functions and enhanced to generate POST_MODIFY. * rtl.def (PRE_MODIFY, POST_MODIFY): Adjust comment. * rtl.h (count_all_occurrences): Declare. (HAVE_{PRE,POST}_MODIFY_{DISP,REG}): Provide default of 0 if not defined. * rtlanal.c (count_all_occurrences): New function. * tm.texi (HAVE_POST_MODIFY_DISP, HAVE_PRE_MODIFY_DISP, HAVE_POST_MODIFY_REG, HAVE_PRE_MODIFY_REG): Document. * config/ia64/ia64-protos.h (destination_operand): Declare. * config/ia64/ia64.c (destination_operand): New function. (ia64_print_operand): Handle POST_MODIFY. (rtx_needs_barrier): Likewise. * config/ia64/ia64.h (HAVE_POST_MODIFY_DISP): Define to 1. (HAVE_POST_MODIFY_REG): Define to 1. (MAX_REGS_PER_ADDRESS): Change to 2. (GO_IF_LEGITIMATE_ADDRESS): Accept POST_MODIFY too. (LEGITIMATE_ADDRESS_REG): New helper macro. (LEGITIMATE_ADDRESS_DISP): Likewise. (PREDICATE_CODES): Add entry for destination_operand. * config/ia64/ia64.md (all mov patterns): Use destination_operand predicate for operand 0. From-SVN: r35321 --- gcc/rtl.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'gcc/rtl.h') diff --git a/gcc/rtl.h b/gcc/rtl.h index 4351712..1a20ae4 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -892,6 +892,22 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS]; #define HAVE_POST_DECREMENT 0 #endif +#ifndef HAVE_POST_MODIFY_DISP +#define HAVE_POST_MODIFY_DISP 0 +#endif + +#ifndef HAVE_POST_MODIFY_REG +#define HAVE_POST_MODIFY_REG 0 +#endif + +#ifndef HAVE_PRE_MODIFY_DISP +#define HAVE_PRE_MODIFY_DISP 0 +#endif + +#ifndef HAVE_PRE_MODIFY_REG +#define HAVE_PRE_MODIFY_REG 0 +#endif + /* Some architectures do not have complete pre/post increment/decrement instruction sets, or only move some modes efficiently. These macros @@ -1260,6 +1276,7 @@ extern int rtx_addr_varies_p PARAMS ((rtx)); extern HOST_WIDE_INT get_integer_term PARAMS ((rtx)); extern rtx get_related_value PARAMS ((rtx)); extern int reg_mentioned_p PARAMS ((rtx, rtx)); +extern int count_occurrences PARAMS ((rtx, rtx, int)); extern int reg_referenced_p PARAMS ((rtx, rtx)); extern int reg_used_between_p PARAMS ((rtx, rtx, rtx)); extern int reg_referenced_between_p PARAMS ((rtx, rtx, rtx)); -- cgit v1.1