diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a212b55af203..382043aaf007 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2016-10-19 Bill Schmidt + + PR tree-optimization/77916 + PR tree-optimization/77937 + * gimple-ssa-strength-reduction.c (analyze_increments): Remove + stopgap fix. + (insert_initializers): Requirement of initializer for -1 should be + based on pointer-typedness of the candidate basis. + 2016-10-19 Bin Cheng PR tree-optimization/78005 diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index 45698d25cc1b..5dad1193c27e 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -2825,10 +2825,6 @@ analyze_increments (slsr_cand_t first_dep, machine_mode mode, bool speed) && !POINTER_TYPE_P (first_dep->cand_type))) incr_vec[i].cost = COST_NEUTRAL; - /* FIXME: Still having trouble with pointers with a -1 increment. */ - else if (incr == -1 && POINTER_TYPE_P (first_dep->cand_type)) - incr_vec[i].cost = COST_INFINITE; - /* FORNOW: If we need to add an initializer, give up if a cast from the candidate's type to its stride's type can lose precision. This could eventually be handled better by expressly retaining the @@ -3115,7 +3111,7 @@ insert_initializers (slsr_cand_t c) if (!profitable_increment_p (i) || incr == 1 || (incr == -1 - && gimple_assign_rhs_code (c->cand_stmt) != POINTER_PLUS_EXPR) + && (!POINTER_TYPE_P (lookup_cand (c->basis)->cand_type))) || incr == 0) continue;