diff options
author | Nathan Sidwell <nathan@acm.org> | 2015-08-11 12:34:06 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2015-08-11 12:34:06 +0000 |
commit | a6810021afdc4e05a44d7c56682eebe9452c359d (patch) | |
tree | 975f335631ad9587ccc537fcc29be670766001e3 /gcc | |
parent | 739a838e18d8ce5dfbaf3bc40b3b92fd6111a458 (diff) | |
download | gcc-a6810021afdc4e05a44d7c56682eebe9452c359d.zip gcc-a6810021afdc4e05a44d7c56682eebe9452c359d.tar.gz gcc-a6810021afdc4e05a44d7c56682eebe9452c359d.tar.bz2 |
tree-ssa-phiopt.c (minmax_replacement): Create new ssa name if we're not the only contributor to target phi.
* tree-ssa-phiopt.c (minmax_replacement): Create new ssa name if
we're not the only contributor to target phi.
testsuite/
* c-c++-common/dfp/operator-comma.c: Call init function.
* c-c++-common/dfp/convert-dfp-2.c: New test.
From-SVN: r226778
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/dfp/convert-dfp-2.c | 45 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/dfp/operator-comma.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa-phiopt.c | 10 |
5 files changed, 66 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61fd887..3a07816 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-08-11 Nathan Sidwell <nathan@acm.org> + + * tree-ssa-phiopt.c (minmax_replacement): Create new ssa name if + we're not the only contributor to target phi. + 2015-08-11 Jiong Wang <jiong.wang@arm.com> * config/aarch64/aarch64.h (REG_CLASS_NAMES): Add the missing ',' after diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 34a5c1a..8d4903f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-08-11 Nathan Sidwell <nathan@acm.org> + + * c-c++-common/dfp/operator-comma.c: Call init function. + * c-c++-common/dfp/convert-dfp-2.c: New test. + 2015-08-10 H.J. Lu <hongjiu.lu@intel.com> * gcc.target/i386/builtin_target.c (check_intel_cpu_model): diff --git a/gcc/testsuite/c-c++-common/dfp/convert-dfp-2.c b/gcc/testsuite/c-c++-common/dfp/convert-dfp-2.c new file mode 100644 index 0000000..a50b202 --- /dev/null +++ b/gcc/testsuite/c-c++-common/dfp/convert-dfp-2.c @@ -0,0 +1,45 @@ +/* { dg-options "-O0" } */ + +/* Test decimal fp conversions of zero. */ + +#include "dfp-dbg.h" + +volatile _Decimal32 d32a, d32c; +volatile _Decimal64 d64a, d64c; +volatile _Decimal128 d128a, d128c; + +int +main () +{ + d32a = d32c; + if (d32a) + FAILURE + d32a = d64c; + if (d32a) + FAILURE + d32a = d128c; + if (d32a) + FAILURE + + d64a = d32c; + if (d64a) + FAILURE + d64a = d64c; + if (d64a) + FAILURE + d64a = d128c; + if (d64a) + FAILURE + + d128a = d32c; + if (d128a) + FAILURE + d128a = d64c; + if (d128a) + FAILURE + d128a = d128c; + if (d128a) + FAILURE + + FINISH +} diff --git a/gcc/testsuite/c-c++-common/dfp/operator-comma.c b/gcc/testsuite/c-c++-common/dfp/operator-comma.c index be6bf6f..7055087 100644 --- a/gcc/testsuite/c-c++-common/dfp/operator-comma.c +++ b/gcc/testsuite/c-c++-common/dfp/operator-comma.c @@ -24,6 +24,8 @@ init () int main () { + init (); + d32a = (d32b, d32c); if (d32a != d32c) FAILURE diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index 633ccc7..d46ba62 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -1277,8 +1277,16 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb, gsi_move_before (&gsi_from, &gsi); } + /* Create an SSA var to hold the min/max result. If we're the only + things setting the target PHI, then we can clone the PHI + variable. Otherwise we must create a new one. */ + result = PHI_RESULT (phi); + if (EDGE_COUNT (gimple_bb (phi)->preds) == 2) + result = duplicate_ssa_name (result, NULL); + else + result = make_ssa_name (TREE_TYPE (result)); + /* Emit the statement to compute min/max. */ - result = duplicate_ssa_name (PHI_RESULT (phi), NULL); new_stmt = gimple_build_assign (result, minmax, arg0, arg1); gsi = gsi_last_bb (cond_bb); gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT); |