diff options
author | Nathan Froyd <froydnj@codesourcery.com> | 2010-10-31 01:58:12 +0000 |
---|---|---|
committer | Nathan Froyd <froydnj@gcc.gnu.org> | 2010-10-31 01:58:12 +0000 |
commit | 76369a821b895c4d4bf1412d108716c4bb0a90de (patch) | |
tree | 9ae062a107bbf781d36702b920987d727b70ba32 /gcc/emit-rtl.c | |
parent | 6528027423123ab5bf18568422d6d930cd544b06 (diff) | |
download | gcc-76369a821b895c4d4bf1412d108716c4bb0a90de.zip gcc-76369a821b895c4d4bf1412d108716c4bb0a90de.tar.gz gcc-76369a821b895c4d4bf1412d108716c4bb0a90de.tar.bz2 |
emit-rtl.c (mark_used_flags): New function.
* emit-rtl.c (mark_used_flags): New function.
(set_used_flags, reset_used_flags): Call it.
From-SVN: r166101
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 81 |
1 files changed, 16 insertions, 65 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 19d290c..eb4ea2a 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; } } } -/* Set all the USED bits in X to allow copy_rtx_if_shared to be used +/* Clear 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) +reset_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; + mark_used_flags (x, 0); +} - 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; +/* Set all the USED bits in X to allow copy_rtx_if_shared to be used + to look for shared sub-parts. */ - case 'E': - for (j = 0; j < XVECLEN (x, i); j++) - set_used_flags (XVECEXP (x, i, j)); - break; - } - } +void +set_used_flags (rtx x) +{ + mark_used_flags (x, 1); } /* Copy X if necessary so that it won't be altered by changes in OTHER. |