diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-20 12:41:20 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-20 12:41:20 +0000 |
commit | ec396ca355d0a4366de7871b0a6806a359dc2bb5 (patch) | |
tree | 41cab53e4e3521fcb9bc4fa0a65a96ef0019bf99 | |
parent | 22d7d92fc9f2516116ea97848745fa2fa0c54d4f (diff) | |
download | gcc-ec396ca355d0a4366de7871b0a6806a359dc2bb5.tar.gz |
2010-07-20 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44977
* tree-ssa-dom.c (propagate_rhs_into_lhs): Do not create invalid
SSA form.
* gcc.dg/torture/pr44977.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162334 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr44977.c | 41 | ||||
-rw-r--r-- | gcc/tree-ssa-dom.c | 14 |
4 files changed, 66 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 72cd6aee2e4..2065af693fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2010-07-20 Richard Guenther <rguenther@suse.de> + PR tree-optimization/44977 + * tree-ssa-dom.c (propagate_rhs_into_lhs): Do not create invalid + SSA form. + +2010-07-20 Richard Guenther <rguenther@suse.de> + * lto-symtab.c (lto_symtab_merge): Use gimple_types_compatible_p. (lto_symtab_merge_decls_2): Likewise. * gimple.h (gimple_types_compatible_p): Declare. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f1ea52f7d45..ae38e84e348 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/44977 + * gcc.dg/torture/pr44977.c: New testcase. + 2010-07-20 Bingfeng Mei <bmei@broadcom.com> * gcc.dg/lto/20090313_0.c: Use dg-require-effective-target diff --git a/gcc/testsuite/gcc.dg/torture/pr44977.c b/gcc/testsuite/gcc.dg/torture/pr44977.c new file mode 100644 index 00000000000..66fd7d1bfae --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr44977.c @@ -0,0 +1,41 @@ +/* { dg-do compile } */ +/* { dg-options "-w" } */ + +static unsigned short +foo (unsigned short ui1, unsigned short ui2) +{ + return ui1 - ui2; +} + +static unsigned short +bar (unsigned ui1, unsigned short ui2) +{ + return ui1 + ui2; +} + +struct S1 +{ + const short f3; +}; +int g_31; +short g_67; +struct S1 g_68[2][5][9][1][1] = { +}; + +int func_90 (int); + +int int329 (int * const *const int32p_81, short ** p_82) +{ + short l_169[8]; + for (g_31 = 0; g_31 <= 0; g_31 = foo (g_31, 1)) + { + short l_85; +lbl_89:g_67 ^= l_85; + for (l_85 = 0; l_85 >= 0; l_85 = bar) + if (g_31) + goto lbl_89; + func_90 (1), g_68[0][2][2][0][0].f3, 0; + } + return l_169[6]; +} + diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 68338206a8a..4715592746c 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -2559,6 +2559,20 @@ propagate_rhs_into_lhs (gimple stmt, tree lhs, tree rhs, bitmap interesting_name continue; } + /* It's not ok to propagate into the definition stmt of RHS. + <bb 9>: + # prephitmp.12_36 = PHI <g_67.1_6(9)> + g_67.1_6 = prephitmp.12_36; + goto <bb 9>; + While this is strictly all dead code we do not want to + deal with this here. */ + if (TREE_CODE (rhs) == SSA_NAME + && SSA_NAME_DEF_STMT (rhs) == use_stmt) + { + all = false; + continue; + } + /* Dump details. */ if (dump_file && (dump_flags & TDF_DETAILS)) { |