From: rguenth Date: Fri, 14 May 2010 20:18:34 +0000 (+0000) Subject: 2010-05-14 Richard Guenther X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b0834cc0b5779ff0b603165f0274f67e267e0348;p=thirdparty%2Fgcc.git 2010-05-14 Richard Guenther PR tree-optimization/44119 * tree-ssa-pre.c (eliminate): Properly mark replacement of a PHI node necessary. * gcc.c-torture/compile/pr44119.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159412 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd83bf814211..a0df089891ee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-05-14 Richard Guenther + + PR tree-optimization/44119 + * tree-ssa-pre.c (eliminate): Properly mark replacement of + a PHI node necessary. + 2010-05-14 Eric Botcazou * tree.h (TREE_ADDRESSABLE): Remove bogus usage for FIELD_DECL. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 331b142e024e..b96b9a315a56 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-05-14 Richard Guenther + + PR tree-optimization/44119 + * gcc.c-torture/compile/pr44119.c: New testcase. + 2010-05-14 Jason Merrill PR c++/44127 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44119.c b/gcc/testsuite/gcc.c-torture/compile/pr44119.c new file mode 100644 index 000000000000..ef6ca4533fce --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr44119.c @@ -0,0 +1,46 @@ +typedef signed char int8_t; +typedef short int int16_t; +typedef int int32_t; +typedef unsigned int uint32_t; +static int8_t +safe_mul_func_int16_t_s_s (int16_t si1, int8_t si2) +{ + return si1 && si2 && si1 > +si2 || si1 && si2 && si2 < +si1 || si1 && si2 + && si1 < +si2 || si1 && si2 && si1 && si2 < +si1 ? : si1 * si2; +} + +struct S0 +{ +}; +int32_t g_72[7][4][1]; +int32_t *g_184 = &g_72[1][2][0]; +int32_t **g_224 = &g_184; +struct S0 g_244 = { +}; + +int8_t * +func_96 (int8_t p_97, uint32_t p_98, uint32_t p_99) +{ + struct S0 *l_243 = &g_244; + int i; + for (i = 0; i < 1; p_98 = 1) + { + int32_t *l_202[3]; + int i; + for (i = 0; i < 1; i++) + l_202[i] = &g_72[2][2][0]; + if (safe_mul_func_int16_t_s_s (0xCAF0, **g_224)) + { + if (p_98 && &l_243) + { + } + else + *g_224 = l_202[0]; + for (0;; 1) + { + } + } + } + return 0; +} + diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index ac676cd41505..816aeb6af6ff 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4347,6 +4347,10 @@ eliminate (void) remove_phi_node (&gsi, false); + if (!bitmap_bit_p (inserted_exprs, SSA_NAME_VERSION (res)) + && TREE_CODE (sprime) == SSA_NAME) + gimple_set_plf (SSA_NAME_DEF_STMT (sprime), NECESSARY, true); + if (!useless_type_conversion_p (TREE_TYPE (res), TREE_TYPE (sprime))) sprime = fold_convert (TREE_TYPE (res), sprime); stmt = gimple_build_assign (res, sprime);