This fixes another piece of PR51070 - stmt_has_scalar_dependences_outside_loop was not handling calls.
Bootstrapped on x86_64-unknown-linux-gnu, testing in progress. Richard. 2012-01-03 Richard Guenther <rguent...@suse.de> PR tree-optimization/51070 * tree-loop-distribution.c (stmt_has_scalar_dependences_outside_loop): Properly handle calls. * gcc.dg/torture/pr51070-2.c: New testcase. Index: gcc/tree-loop-distribution.c =================================================================== --- gcc/tree-loop-distribution.c (revision 182829) +++ gcc/tree-loop-distribution.c (working copy) @@ -89,8 +89,9 @@ stmt_has_scalar_dependences_outside_loop switch (gimple_code (stmt)) { + case GIMPLE_CALL: case GIMPLE_ASSIGN: - name = gimple_assign_lhs (stmt); + name = gimple_get_lhs (stmt); break; case GIMPLE_PHI: @@ -101,8 +102,10 @@ stmt_has_scalar_dependences_outside_loop return false; } - return TREE_CODE (name) == SSA_NAME - && ssa_name_has_uses_outside_loop_p (name, loop_containing_stmt (stmt)); + return (name + && TREE_CODE (name) == SSA_NAME + && ssa_name_has_uses_outside_loop_p (name, + loop_containing_stmt (stmt))); } /* Update the PHI nodes of NEW_LOOP. NEW_LOOP is a duplicate of Index: gcc/testsuite/gcc.dg/torture/pr51070-2.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr51070-2.c (revision 0) +++ gcc/testsuite/gcc.dg/torture/pr51070-2.c (revision 0) @@ -0,0 +1,35 @@ +/* { dg-do compile } */ +/* { dg-options "-fno-inline" } */ + +int +func_4 (int si1, int si2) +{ + return si1; +} + +int +func_14 (int left, int right) +{ + return 1; +} + +int +func_37 (int left, int right) +{ + return left; +} + +int g_92[1024]; +int g_95[1024]; +int g_224; +int g_352[1024]; +int +func_9 () +{ + for (; g_224; g_224 += 1) + { + g_95[0] = func_4 (func_37 (g_92[g_224], 0), 0); + g_92[g_224] = 0, g_352[g_224] = func_14 (0, 0); + } + return 0; +}