diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c8a08fbe84..2d6360984a3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-10-30 Nathan Froyd + + * emit-rtl.c (mark_used_flags): New function. + (set_used_flags, reset_used_flags): Call it. + 2010-10-30 Uros Bizjak PR middle-end/44569 @@ -160,6 +165,22 @@ * recog.c (split_all_insns): Remove dead code. +2010-10-28 Nathan Froyd + + * config/microblaze/microblaze-protos.h (function_arg): Delete. + (function_arg_advance): Delete. + * config/microblaze/microblaze.h (FUNCTION_ARG_ADVANCE): Delete. + (FUNCTION_ARG): Delete. + * config/microblaze/microblaze.c (function_arg_advance): Rename to... + (microblaze_function_arg_advance): ...this. Make static. Take a + const_tree and a bool. + (function-arg): Rename to... + (microblaze_function_arg): ...this. Make static. Take a const_tree + and a bool. + (microblaze_expand_prologue): Call targetm.calls.function_arg and + targetm.calls.function_arg_advance. + (TARGET_FUNCTION_ARG, TARGET_FUNCTION_ARG_ADVANCE): Define. + 2010-10-28 Nathan Froyd * score.h (FUNCTION_ARG, FUNCTION_ARG_ADVANCE): Delete. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 19d290c4b2c..eb4ea2a97d8 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -2728,11 +2728,10 @@ repeat: return; } -/* Clear all the USED bits in X to allow copy_rtx_if_shared to be used - to look for shared sub-parts. */ +/* Set the USED bit in X and its non-shareable subparts to FLAG. */ -void -reset_used_flags (rtx x) +static void +mark_used_flags (rtx x, int flag) { int i, j; enum rtx_code code; @@ -2778,7 +2777,7 @@ repeat: break; } - RTX_FLAG (x, used) = 0; + RTX_FLAG (x, used) = flag; format_ptr = GET_RTX_FORMAT (code); length = GET_RTX_LENGTH (code); @@ -2793,81 +2792,33 @@ repeat: x = XEXP (x, i); goto repeat; } - reset_used_flags (XEXP (x, i)); + mark_used_flags (XEXP (x, i), flag); break; case 'E': for (j = 0; j < XVECLEN (x, i); j++) - reset_used_flags (XVECEXP (x, i, j)); + mark_used_flags (XVECEXP (x, i, j), flag); break; } } } +/* Clear all the USED bits in X to allow copy_rtx_if_shared to be used + to look for shared sub-parts. */ + +void +reset_used_flags (rtx x) +{ + mark_used_flags (x, 0); +} + /* Set all the USED bits in X to allow copy_rtx_if_shared to be used to look for shared sub-parts. */ void set_used_flags (rtx x) { - int i, j; - enum rtx_code code; - const char *format_ptr; - - if (x == 0) - return; - - code = GET_CODE (x); - - /* These types may be freely shared so we needn't do any resetting - for them. */ - - switch (code) - { - case REG: - case DEBUG_EXPR: - case VALUE: - case CONST_INT: - case CONST_DOUBLE: - case CONST_FIXED: - case CONST_VECTOR: - case SYMBOL_REF: - case CODE_LABEL: - case PC: - case CC0: - return; - - case DEBUG_INSN: - case INSN: - case JUMP_INSN: - case CALL_INSN: - case NOTE: - case LABEL_REF: - case BARRIER: - /* The chain of insns is not being copied. */ - return; - - default: - break; - } - - RTX_FLAG (x, used) = 1; - - format_ptr = GET_RTX_FORMAT (code); - for (i = 0; i < GET_RTX_LENGTH (code); i++) - { - switch (*format_ptr++) - { - case 'e': - set_used_flags (XEXP (x, i)); - break; - - case 'E': - for (j = 0; j < XVECLEN (x, i); j++) - set_used_flags (XVECEXP (x, i, j)); - break; - } - } + mark_used_flags (x, 1); } /* Copy X if necessary so that it won't be altered by changes in OTHER.