On Sat, May 21, 2016 at 8:08 AM, Kugan Vivekanandarajah
<kugan.vivekanandara...@linaro.org> wrote:
> On 20 May 2016 at 21:07, Richard Biener <richard.guent...@gmail.com> wrote:
>> 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.
>
>
> Hi Richard,
>
> Thanks. Here is a tested version of the patch. I did miss one place
> which I fixed now (tranform_stmt_to_copy) I also created a function to
> do the insertion.
>
>
> Bootstrap and regression testing on x86_64-linux-gnu are fine. Is this
> OK for trunk.

@@ -3798,6 +3805,7 @@ rewrite_expr_tree (gimple *stmt, unsigned int opindex,
       oe1 = ops[opindex];
       oe2 = ops[opindex + 1];

+
       if (rhs1 != oe1->op || rhs2 != oe2->op)
        {
          gimple_stmt_iterator gsi = gsi_for_stmt (stmt);

please remove this stray change.

Ok with that change.

Thanks,
Richard.

> Thanks,
> Kugan
>
>
> gcc/ChangeLog:
>
> 2016-05-21  Kugan Vivekanandarajah  <kug...@linaro.org>
>
>     PR middle-end/71170
>     * 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.
>     (insert_stmt_before_use): New.
>     (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.
>     (reassociate_bb): Likewise.

Reply via email to