aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2015-08-11 12:34:06 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2015-08-11 12:34:06 +0000
commita6810021afdc4e05a44d7c56682eebe9452c359d (patch)
tree975f335631ad9587ccc537fcc29be670766001e3 /gcc
parent739a838e18d8ce5dfbaf3bc40b3b92fd6111a458 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/dfp/convert-dfp-2.c45
-rw-r--r--gcc/testsuite/c-c++-common/dfp/operator-comma.c2
-rw-r--r--gcc/tree-ssa-phiopt.c10
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);