On Fri, May 20, 2016 at 1:51 AM, Kugan Vivekanandarajah
<kugan.vivekanandara...@linaro.org> wrote:
> Hi Richard,
>
>> I think it should have the same rank as op or op + 1 which is the current
>> behavior.  Sth else doesn't work correctly here I think, like inserting the
>> multiplication not near the definition of op.
>>
>> Well, the whole "clever insertion" logic is simply flawed.
>
> What I meant to say was that the simple logic we have now wouldn’t
> work. "clever logic" is knowing where exactly where it is needed and
> inserting there.  I think thats what  you are suggesting below in a
> simple to implement way.
>
>> I'd say that ideally we would delay inserting the multiplication to
>> rewrite_expr_tree time.  For example by adding a ops->stmt_to_insert
>> member.
>>
>
> Here is an implementation based on above. Bootstrap on x86-linux-gnu
> is OK. regression testing is ongoing.

I like it.  Please push the insertion code to a helper as I think you need
to post-pone setting the stmts UID to that point.

Ideally we'd make use of the same machinery in attempt_builtin_powi,
removing the special-casing of powi_result.  (same as I said that ideally
the plus->mult stuff would use the repeat-ops machinery...)

I'm not 100% convinced the place you insert the stmt is correct but I
haven't spent too much time to decipher reassoc in this area.

Thanks,
Richard.

> Thanks,
> Kugan
>
> gcc/ChangeLog:
>
> 2016-05-20  Kugan Vivekanandarajah  <kugan.vivekanandara...@linaro.org>
>
>     * tree-ssa-reassoc.c (struct operand_entry): Add field stmt_to_insert.
>     (add_to_ops_vec): Add stmt_to_insert.
>     (add_repeat_to_ops_vec): Init stmt_to_insert.
>     (transform_add_to_multiply): Remove mult_stmt insertion and add it
> to ops vector.
>     (get_ops): Init stmt_to_insert.
>     (maybe_optimize_range_tests): Likewise.
>     (rewrite_expr_tree): Insert  stmt_to_insert before use stmt.
>     (rewrite_expr_tree_parallel): Likewise.

Reply via email to