gcc/ * loop-iv.c (altered_reg_used): Turn from being a for_each_rtx callback to being a function that examines each subrtx itself. (simplify_using_condition, simplify_using_initial_values): Update accordingly.
Index: gcc/loop-iv.c =================================================================== --- gcc/loop-iv.c 2014-08-03 11:25:27.978132785 +0100 +++ gcc/loop-iv.c 2014-08-03 11:25:28.247135444 +0100 @@ -1327,15 +1327,19 @@ inverse (uint64_t x, int mod) return rslt; } -/* Checks whether register *REG is in set ALT. Callback for for_each_rtx. */ +/* Checks whether any register in X is in set ALT. */ -static int -altered_reg_used (rtx *reg, void *alt) +static bool +altered_reg_used (const_rtx x, bitmap alt) { - if (!REG_P (*reg)) - return 0; - - return REGNO_REG_SET_P ((bitmap) alt, REGNO (*reg)); + subrtx_iterator::array_type array; + FOR_EACH_SUBRTX (iter, array, x, NONCONST) + { + const_rtx x = *iter; + if (REG_P (x) && REGNO_REG_SET_P (alt, REGNO (x))) + return true; + } + return false; } /* Marks registers altered by EXPR in set ALT. */ @@ -1771,8 +1775,7 @@ simplify_using_condition (rtx cond, rtx /* If some register gets altered later, we do not really speak about its value at the time of comparison. */ - if (altered - && for_each_rtx (&cond, altered_reg_used, altered)) + if (altered && altered_reg_used (cond, altered)) return; if (GET_CODE (cond) == EQ @@ -2048,7 +2051,7 @@ simplify_using_initial_values (struct lo /* If we did not use this insn to make a replacement, any overlap between stores in this insn and our expression will cause the expression to become invalid. */ - if (for_each_rtx (expr, altered_reg_used, this_altered)) + if (altered_reg_used (*expr, this_altered)) goto out; /* Likewise for the conditions. */ @@ -2058,7 +2061,7 @@ simplify_using_initial_values (struct lo rtx old_cond = XEXP (note, 0); pnote_next = &XEXP (note, 1); - if (for_each_rtx (&old_cond, altered_reg_used, this_altered)) + if (altered_reg_used (old_cond, this_altered)) { *pnote = *pnote_next; pnote_next = pnote; @@ -2076,7 +2079,7 @@ simplify_using_initial_values (struct lo can't return it to the caller. However, it is still valid for further simplification, so keep searching to see if we can eventually turn it into a constant. */ - if (for_each_rtx (expr, altered_reg_used, altered)) + if (altered_reg_used (*expr, altered)) expression_valid = false; if (expression_valid) last_valid_expr = *expr;