Re: Fix PR middle-end/57393

2013-09-24 Thread Richard Biener
On Mon, Sep 23, 2013 at 5:56 PM, Easwaran Raman era...@google.com wrote:
 Ping.


 On Mon, Sep 16, 2013 at 4:42 PM, Easwaran Raman era...@google.com wrote:
 There are two separate root causes for the problem reported in PR
 57393. This patch attempts to fix both.

 First is due to newly created stmts that have the default UID of 0
 which are compared with statements with valid UIDs leading to broken
 dependences. As discussed in an earlier thread, I check the UIDs
 before using them and ensure stmts have a valid UID. In the worst
 case, this reassigns UIDs for the entire BB containing the stmts in
 question.

 The second is due to debug stmts being out of sync with the IR after
 reassociation. I think the right fix is to create debug temps before
 actual reassociation to decouple them from the SSA variables involved
 in reassociation.

 This bootstraps in x86_64 and I am running the tests. Ok for trunk?

In the end I like the scheduling code less and less - I believe it will become
a major compile-time hog.  Still,

+  gimple temp = gsi_stmt (gsi);
+  uid = gimple_uid (temp);

no need for 'temp', just write gimple_uid (gsi_stmt (gsi))

+}
+  if (iters = MAX_UNASSIGNED_UIDS || uid == 0)
+renumber_gimple_stmt_uids_in_blocks (bb, 1);

so this will renumber uids whenever we have trailing zero-UID stmts at the
end of a basic-block?

+  else
+{
+  for (gsi_prev (gsi); !gsi_end_p (gsi); gsi_prev (gsi))
+{
+  stmt = gsi_stmt (gsi);
+  if (gimple_uid (stmt)  0)
+break;
+  gimple_set_uid (stmt, uid);
+}

while this fills zero-UIDs from the found UID.  A comment on the
re-fill strathegy
would be nice here.

@@ -2901,6 +2930,9 @@ find_insert_point (gimple stmt, gimple dep_stmt)
   gimple insert_stmt = stmt;
   if (dep_stmt == NULL)
 return stmt;
+  ensure_valid_uid (stmt);
+  ensure_valid_uid (dep_stmt);
+
   if (gimple_uid (insert_stmt) == gimple_uid (dep_stmt)

vertical space oddity - move the blank line before the first
ensure_valid_uid () call.

+{
+  tree rhs1 = gimple_assign_rhs1 (stmt);
+  swap_ops_for_binary_stmt (ops, len - 3, stmt);
+  regenerate_debug_stmts (SSA_NAME_DEF_STMT
(rhs1), len - 3);
+}

I'm not sure this is the right place for this.  Also note my previous
comment that it
is wrong to re-use SSA names for different values because of associated info
that can now be wrong.  Yes, it's a pre-existing bug but you end up exposing it.

I believe the fix is in the places that adjust a stmts rhs1/rhs2.  Yes, reassoc
is a complete mess with regard to this as it modifies the IL for its analysis
purposes.

We'll have interesting times dealing with all this now that we preserve
value-range information for SSA names (which definitely is garbled by
reassoc now).

We absolutely have to do something about this for 4.9 and I think I
shouldn't have
approved the original scheduling work :/  Which complicates matters more,
similar to the || and  reassoc work, and makes the needed rewrite a much
more complex task.

Bah.

Richard.

 Thanks,
 Easwaran

 2013-09-16  Easwaran Raman  era...@google.com

 PR middle-end/57393
 * tree-ssa-reassoc.c (get_stmt_uid_with_default): Remove.
 (build_and_add_sum): Do not set UID of newly created statements.
 (ensure_valid_uid): New function,
 (find_insert_point): called here before UIDs are compared.
 (insert_stmt_after): Do not reset debug statements.
 (regenerate_debug_stmts): New function,
 (reassociate_bb): use here.

 testsuite/ChangeLog:
 2013-09-16  Easwaran Raman  era...@google.com

 PR middle-end/57393
 * gcc.dg/tree-ssa/reassoc-32.c: New testcase.
 * gcc.dg/tree-ssa/reassoc-33.c: New testcase.
 * gcc.dg/tree-ssa/reassoc-34.c: New testcase.


Re: Fix PR middle-end/57393

2013-09-24 Thread Jakub Jelinek
On Tue, Sep 24, 2013 at 11:26:16AM +0200, Richard Biener wrote:
 +  if (iters = MAX_UNASSIGNED_UIDS || uid == 0)
 +renumber_gimple_stmt_uids_in_blocks (bb, 1);
 
 so this will renumber uids whenever we have trailing zero-UID stmts at the
 end of a basic-block?

Trailing zero-UIDs at the end of a basic block should be trivially handlable
without renumbering the whole basic block.

Jakub


Re: Fix PR middle-end/57393

2013-09-23 Thread Easwaran Raman
Ping.


On Mon, Sep 16, 2013 at 4:42 PM, Easwaran Raman era...@google.com wrote:
 There are two separate root causes for the problem reported in PR
 57393. This patch attempts to fix both.

 First is due to newly created stmts that have the default UID of 0
 which are compared with statements with valid UIDs leading to broken
 dependences. As discussed in an earlier thread, I check the UIDs
 before using them and ensure stmts have a valid UID. In the worst
 case, this reassigns UIDs for the entire BB containing the stmts in
 question.

 The second is due to debug stmts being out of sync with the IR after
 reassociation. I think the right fix is to create debug temps before
 actual reassociation to decouple them from the SSA variables involved
 in reassociation.

 This bootstraps in x86_64 and I am running the tests. Ok for trunk?

 Thanks,
 Easwaran

 2013-09-16  Easwaran Raman  era...@google.com

 PR middle-end/57393
 * tree-ssa-reassoc.c (get_stmt_uid_with_default): Remove.
 (build_and_add_sum): Do not set UID of newly created statements.
 (ensure_valid_uid): New function,
 (find_insert_point): called here before UIDs are compared.
 (insert_stmt_after): Do not reset debug statements.
 (regenerate_debug_stmts): New function,
 (reassociate_bb): use here.

 testsuite/ChangeLog:
 2013-09-16  Easwaran Raman  era...@google.com

 PR middle-end/57393
 * gcc.dg/tree-ssa/reassoc-32.c: New testcase.
 * gcc.dg/tree-ssa/reassoc-33.c: New testcase.
 * gcc.dg/tree-ssa/reassoc-34.c: New testcase.


Fix PR middle-end/57393

2013-09-16 Thread Easwaran Raman
There are two separate root causes for the problem reported in PR
57393. This patch attempts to fix both.

First is due to newly created stmts that have the default UID of 0
which are compared with statements with valid UIDs leading to broken
dependences. As discussed in an earlier thread, I check the UIDs
before using them and ensure stmts have a valid UID. In the worst
case, this reassigns UIDs for the entire BB containing the stmts in
question.

The second is due to debug stmts being out of sync with the IR after
reassociation. I think the right fix is to create debug temps before
actual reassociation to decouple them from the SSA variables involved
in reassociation.

This bootstraps in x86_64 and I am running the tests. Ok for trunk?

Thanks,
Easwaran

2013-09-16  Easwaran Raman  era...@google.com

PR middle-end/57393
* tree-ssa-reassoc.c (get_stmt_uid_with_default): Remove.
(build_and_add_sum): Do not set UID of newly created statements.
(ensure_valid_uid): New function,
(find_insert_point): called here before UIDs are compared.
(insert_stmt_after): Do not reset debug statements.
(regenerate_debug_stmts): New function,
(reassociate_bb): use here.

testsuite/ChangeLog:
2013-09-16  Easwaran Raman  era...@google.com

PR middle-end/57393
* gcc.dg/tree-ssa/reassoc-32.c: New testcase.
* gcc.dg/tree-ssa/reassoc-33.c: New testcase.
* gcc.dg/tree-ssa/reassoc-34.c: New testcase.


pr57393.patch
Description: Binary data