diff options
author | Richard Guenther <rguenther@suse.de> | 2010-04-08 10:21:23 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-04-08 10:21:23 +0000 |
commit | 84ae6d7ba5b2cc9d0ecbb844486c435598594123 (patch) | |
tree | e91f5063ba8dc6863a237ba78a49067e0708b610 | |
parent | 5a905a2b23dec8efb2aea618962eefbac1092f41 (diff) | |
download | gcc-84ae6d7ba5b2cc9d0ecbb844486c435598594123.zip gcc-84ae6d7ba5b2cc9d0ecbb844486c435598594123.tar.gz gcc-84ae6d7ba5b2cc9d0ecbb844486c435598594123.tar.bz2 |
re PR tree-optimization/43679 (ice in gen_lsm_tmp_name, at tree-ssa-loop-im.c:1812)
2010-04-08 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43679
* tree-ssa-pre.c (eliminate): Only propagate copies.
* gcc.c-torture/compile/pr43679.c: New testcase.
From-SVN: r158112
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr43679.c | 33 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 5 |
4 files changed, 46 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b221b55..c7d4ecb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-04-08 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/43679 + * tree-ssa-pre.c (eliminate): Only propagate copies. + 2010-04-08 Jakub Jelinek <jakub@redhat.com> PR bootstrap/43681 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 39fb6f0..51cf82d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-08 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/43679 + * gcc.c-torture/compile/pr43679.c: New testcase. + 2010-04-08 Jakub Jelinek <jakub@redhat.com> PR debug/43670 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr43679.c b/gcc/testsuite/gcc.c-torture/compile/pr43679.c new file mode 100644 index 0000000..c45ef9f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr43679.c @@ -0,0 +1,33 @@ +unsigned g_5; +int g_7; +int g_23[2]; +int *g_29 = &g_23[0]; +int **g_59; +unsigned long g_186; + +int foo (int, int); +int bar (int); + +void func_37 (long p_38) +{ + int *l_39 = &g_7; + *l_39 = (*l_39 + || + (foo + (((*g_29 != *l_39, ((bar (g_59 != &l_39), 0), 0))), + 0))); + foo (*l_39, 0); + int **l_256 = &l_39; + { + for (0; g_186; 0) + { + *l_256 = *l_256; + if (g_5) + goto lbl_270; + *l_39 &= 0; + } + } +lbl_270: + ; +} + diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 35ce4cc..ae630df 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4341,15 +4341,16 @@ eliminate (void) for (i = 0; VEC_iterate (gimple, to_remove, i, stmt); ++i) { tree lhs = gimple_assign_lhs (stmt); + tree rhs = gimple_assign_rhs1 (stmt); use_operand_p use_p; gimple use_stmt; /* If there is a single use only, propagate the equivalency instead of keeping the copy. */ if (TREE_CODE (lhs) == SSA_NAME + && TREE_CODE (rhs) == SSA_NAME && single_imm_use (lhs, &use_p, &use_stmt) - && may_propagate_copy (USE_FROM_PTR (use_p), - gimple_assign_rhs1 (stmt))) + && may_propagate_copy (USE_FROM_PTR (use_p), rhs)) { SET_USE (use_p, gimple_assign_rhs1 (stmt)); update_stmt (use_stmt); |