From: Richard Biener Date: Tue, 2 Feb 2016 12:39:36 +0000 (+0000) Subject: re PR tree-optimization/69606 (wrong code at -Os and above on x86_64-linux-gnu) X-Git-Tag: upstream/12.2.0~49038 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9dc03c974ffc1fa29217cf0fb83b4d662a6e7a93;p=platform%2Fupstream%2Fgcc.git re PR tree-optimization/69606 (wrong code at -Os and above on x86_64-linux-gnu) 2016-02-02 Richard Biener PR tree-optimization/69606 * tree-ssa-math-opts.c (bswap_replace): Clear flow sensitive info on the result before moving a stmt. * gcc.dg/torture/pr69606.c: New testcase. From-SVN: r233069 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be546dc..05741331 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-02-02 Richard Biener + + PR tree-optimization/69606 + * tree-ssa-math-opts.c (bswap_replace): Clear flow sensitive + info on the result before moving a stmt. + 2016-02-02 Yuri Rumyantsev PR middle-end/68542 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7f348ae..9d89eee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-02-02 Richard Biener + + PR tree-optimization/69606 + * gcc.dg/torture/pr69606.c: New testcase. + 2016-02-02 Yuri Rumyantsev PR middle-end/68542 diff --git a/gcc/testsuite/gcc.dg/torture/pr69606.c b/gcc/testsuite/gcc.dg/torture/pr69606.c new file mode 100644 index 0000000..84a0e1a --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr69606.c @@ -0,0 +1,20 @@ +/* { dg-do run } */ + +char a; +unsigned short b; +int c, d; +unsigned char e; + +int +main () +{ + int f = 1, g = ~a; + if (b > f) + { + e = b; + d = b | e; + g = 0; + } + c = 1 % g; + return 0; +} diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index abd77e7..3aa4a07 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -2622,6 +2622,8 @@ bswap_replace (gimple *cur_stmt, gimple *src_stmt, tree fndecl, /* Move cur_stmt just before one of the load of the original to ensure it has the same VUSE. See PR61517 for what could go wrong. */ + if (gimple_bb (cur_stmt) != gimple_bb (src_stmt)) + reset_flow_sensitive_info (gimple_assign_lhs (cur_stmt)); gsi_move_before (&gsi, &gsi_ins); gsi = gsi_for_stmt (cur_stmt);