diff mbox series

Fix PR88621

Message ID alpine.LSU.2.20.1901021317430.23386@zhemvz.fhfr.qr
State New
Headers show
Series Fix PR88621 | expand

Commit Message

Richard Biener Jan. 2, 2019, 12:18 p.m. UTC
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2019-01-02  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/88621
	* tree-ssa-loop-im.c (gather_mem_refs_stmt): Fix pastos, avoid
	bitfields when canoncalizing.

	* gcc.dg/torture/pr88621.c: New testcase.
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.dg/torture/pr88621.c b/gcc/testsuite/gcc.dg/torture/pr88621.c
new file mode 100644
index 00000000000..78492a34dd7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr88621.c
@@ -0,0 +1,25 @@ 
+/* { dg-do run } */
+
+struct S
+{
+  int b:4;
+  int c; 
+} e = { -1, 0 };
+
+int d, f;
+
+int main ()
+{
+  while (f)
+    {
+      struct S g = { 0, 0 };
+      e = g;
+    }
+L:
+  while (e.b > 0)
+    ;
+  e.b = 0;
+  if (d)
+    goto L;
+  return 0;
+}
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 58da79d0545..0919931cec3 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -1468,9 +1468,10 @@  gather_mem_refs_stmt (struct loop *loop, gimple *stmt)
       tree mem_base;
       if (aor.max_size_known_p ()
 	  && aor.offset.is_constant (&offset)
-	  && aor.offset.is_constant (&size)
-	  && aor.offset.is_constant (&max_size)
+	  && aor.size.is_constant (&size)
+	  && aor.max_size.is_constant (&max_size)
 	  && size == max_size
+	  && (size % BITS_PER_UNIT) == 0
 	  && (mem_base = get_addr_base_and_unit_offset (aor.ref, &mem_off)))
 	{
 	  hash = iterative_hash_expr (ao_ref_base (&aor), 0);