In this PR, -fno-tree-dce meant that backprop was presented with code
that was completely dead.  The pass's internal DCE then tried to delete
the function parameter's definition.

Bootstrapped & regression-tested on x86_64-linux-gnu.  OK to install?

Richard


gcc/
        * gimple-ssa-backprop.cc (backprop::execute): Don't try to delete
        default definitions.

gcc/testsuite/
        * gcc.dg/torture/pr125872.c: New test.
---
 gcc/gimple-ssa-backprop.cc              | 1 +
 gcc/testsuite/gcc.dg/torture/pr125872.c | 7 +++++++
 2 files changed, 8 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/torture/pr125872.c

diff --git a/gcc/gimple-ssa-backprop.cc b/gcc/gimple-ssa-backprop.cc
index e101430bb8e..a95e2f95c5f 100644
--- a/gcc/gimple-ssa-backprop.cc
+++ b/gcc/gimple-ssa-backprop.cc
@@ -1137,6 +1137,7 @@ backprop::execute ()
   for (unsigned int i = 0; i < m_vars.length (); ++i)
     if (var_info *v = m_vars[i])
       if (TREE_CODE (v->new_value) == SSA_NAME
+         && !SSA_NAME_IS_DEFAULT_DEF (v->new_value)
          && has_zero_uses (v->new_value)
          && bitmap_set_bit (deleted_vars, SSA_NAME_VERSION (v->new_value)))
        {
diff --git a/gcc/testsuite/gcc.dg/torture/pr125872.c 
b/gcc/testsuite/gcc.dg/torture/pr125872.c
new file mode 100644
index 00000000000..5e5588f7d33
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr125872.c
@@ -0,0 +1,7 @@
+/* { dg-additional-options "-fno-tree-dce" } */
+
+void
+foo(float f)
+{
+  for(;;) f *= (char)255;
+}
-- 
2.54.0

Reply via email to