diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2014-08-28 06:24:57 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2014-08-28 06:24:57 +0000 |
commit | 7e56c2835ef1958b98f755dcca1c6b794987eae6 (patch) | |
tree | 0197cbd8757ae4d09daac1b0536bedad37cb3a19 /gcc | |
parent | 4f498863ce10eb5ee1ae0e0a2d1234f9f2419834 (diff) | |
download | gcc-7e56c2835ef1958b98f755dcca1c6b794987eae6.zip gcc-7e56c2835ef1958b98f755dcca1c6b794987eae6.tar.gz gcc-7e56c2835ef1958b98f755dcca1c6b794987eae6.tar.bz2 |
var-tracking.c (non_suitable_const): Turn from being a for_each_rtx callback to being a function that examines each...
gcc/
* var-tracking.c (non_suitable_const): Turn from being a for_each_rtx
callback to being a function that examines each subrtx itself.
Remove handling of null rtxes.
(add_uses): Update accordingly.
From-SVN: r214662
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/var-tracking.c | 44 |
2 files changed, 31 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4ca3224..9c7a149 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2014-08-28 Richard Sandiford <rdsandiford@googlemail.com> + * var-tracking.c (non_suitable_const): Turn from being a for_each_rtx + callback to being a function that examines each subrtx itself. + Remove handling of null rtxes. + (add_uses): Update accordingly. + +2014-08-28 Richard Sandiford <rdsandiford@googlemail.com> + * var-tracking.c: Include rtl-iter.h. (rtx_debug_expr_p): Turn from being a for_each_rtx callback to being a function that examines each subrtx itself. diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 1cd2276..da83e49 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -5523,27 +5523,32 @@ preserve_value (cselib_val *val) any rtxes not suitable for CONST use not replaced by VALUEs are discovered. */ -static int -non_suitable_const (rtx *x, void *data ATTRIBUTE_UNUSED) +static bool +non_suitable_const (const_rtx x) { - if (*x == NULL_RTX) - return 0; - - switch (GET_CODE (*x)) + subrtx_iterator::array_type array; + FOR_EACH_SUBRTX (iter, array, x, ALL) { - case REG: - case DEBUG_EXPR: - case PC: - case SCRATCH: - case CC0: - case ASM_INPUT: - case ASM_OPERANDS: - return 1; - case MEM: - return !MEM_READONLY_P (*x); - default: - return 0; + const_rtx x = *iter; + switch (GET_CODE (x)) + { + case REG: + case DEBUG_EXPR: + case PC: + case SCRATCH: + case CC0: + case ASM_INPUT: + case ASM_OPERANDS: + return true; + case MEM: + if (!MEM_READONLY_P (x)) + return true; + break; + default: + break; + } } + return false; } /* Add uses (register and memory references) LOC which will be tracked @@ -5589,8 +5594,7 @@ add_uses (rtx *ploc, void *data) } if (CONSTANT_P (vloc) - && (GET_CODE (vloc) != CONST - || for_each_rtx (&vloc, non_suitable_const, NULL))) + && (GET_CODE (vloc) != CONST || non_suitable_const (vloc))) /* For constants don't look up any value. */; else if (!VAR_LOC_UNKNOWN_P (vloc) && !unsuitable_loc (vloc) && (val = find_use_val (vloc, GET_MODE (oloc), cui))) |