diff mbox series

[committed] Fix ICE in scan_operand_equal_p (PR tree-optimization/91010)

Message ID 20190627212448.GE815@tucnak
State New
Headers show
Series [committed] Fix ICE in scan_operand_equal_p (PR tree-optimization/91010) | expand

Commit Message

Jakub Jelinek June 27, 2019, 9:24 p.m. UTC
Hi!

As the testcase shows, offset{1,2} can be NULL and operand_equal_p doesn't
like NULL arguments.  If both are NULL, we should return true, if just one,
we should return false.

Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk.

2019-06-27  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/91010
	* tree-vect-stmts.c (scan_operand_equal_p): If offset1 == offset2,
	return true.  Otherwise, don't call operand_equal_p if offset1 or
	offset2 is NULL and just return false.

	* g++.dg/vect/simd-10.cc: New test.


	Jakub
diff mbox series

Patch

--- gcc/tree-vect-stmts.c.jj	2019-06-25 08:58:02.019417742 +0200
+++ gcc/tree-vect-stmts.c	2019-06-27 10:20:09.658616378 +0200
@@ -6347,7 +6347,10 @@  scan_operand_equal_p (tree ref1, tree re
     return false;
   if (maybe_ne (bitsize1, bitsize2))
     return false;
-  if (!operand_equal_p (offset1, offset2, 0))
+  if (offset1 != offset2
+      && (!offset1
+	  || !offset2
+	  || !operand_equal_p (offset1, offset2, 0)))
     return false;
   return true;
 }
--- gcc/testsuite/g++.dg/vect/simd-10.cc.jj	2019-06-27 10:12:44.828471845 +0200
+++ gcc/testsuite/g++.dg/vect/simd-10.cc	2019-06-27 10:24:52.152262921 +0200
@@ -0,0 +1,8 @@ 
+// PR tree-optimization/91010
+// { dg-do compile }
+// { dg-require-effective-target size32plus }
+// { dg-additional-options "-fopenmp-simd -fno-tree-forwprop" }
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-final { scan-tree-dump-times "vectorized \[1-3] loops" 2 "vect" { target i?86-*-* x86_64-*-* } } }
+
+#include "simd-5.cc"