Hi,

Attached patch fixes a graphite 6/7 regression.

[ found regression by doing an fgraphite-identity on-by-default bootstrap and regtest on x86_64. ]

When compiling gcc.dg/tree-ssa/vrp66.c with -O2 fgraphite-identity, we arrive at graphite_find_cross_bb_scalar_vars:
...
static void
graphite_find_cross_bb_scalar_vars (scop_p scop, gimple *stmt,
vec<scalar_use> *reads, vec<tree> *writes)
{
  tree def;

  if (gimple_code (stmt) == GIMPLE_ASSIGN)
    def = gimple_assign_lhs (stmt);
  else if (gimple_code (stmt) == GIMPLE_CALL)
    def = gimple_call_lhs (stmt);
  else if (gimple_code (stmt) == GIMPLE_PHI)
    def = gimple_phi_result (stmt);
  else
    return;


  build_cross_bb_scalars_def (scop, def, gimple_bb (stmt), writes);
  ...
...


with as stmt a resultless call:
...
(gdb) call debug_gimple_stmt (stmt)
# VUSE <.MEM_10(D)>
f2 (_1);
...

Consequently, def becomes NULL_TREE and we run into an assert at the start of build_cross_bb_scalars_def that asserts that def is not NULL_TREE.

This patch fixes the ICE by handling a NULL_TREE def in build_cross_bb_scalars_def.

Bootstrapped and reg-tested on x86_64.

Approved at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70956#c2 .

Committed to trunk, backported to 6 branch.

Thanks,
- Tom
Handle NULL def in build_cross_bb_scalars_def

2016-05-07  Tom de Vries  <t...@codesourcery.com>

	PR tree-optimization/70956
	* graphite-scop-detection.c (build_cross_bb_scalars_def): Handle NULL
	def.

	* gcc.dg/graphite/pr70956.c: New test.

---
 gcc/graphite-scop-detection.c           | 3 +--
 gcc/testsuite/gcc.dg/graphite/pr70956.c | 4 ++++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index 7615842..dd50a1e 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -1722,8 +1722,7 @@ static void
 build_cross_bb_scalars_def (scop_p scop, tree def, basic_block def_bb,
 			     vec<tree> *writes)
 {
-  gcc_assert (def);
-  if (!is_gimple_reg (def))
+  if (!def || !is_gimple_reg (def))
     return;
 
   /* Do not gather scalar variables that can be analyzed by SCEV as they can be
diff --git a/gcc/testsuite/gcc.dg/graphite/pr70956.c b/gcc/testsuite/gcc.dg/graphite/pr70956.c
new file mode 100644
index 0000000..31fc25f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr70956.c
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fgraphite-identity" } */
+
+#include "../tree-ssa/vrp66.c"

Reply via email to