From: rguenth Date: Wed, 2 Jan 2019 12:19:10 +0000 (+0000) Subject: 2019-01-02 Richard Biener X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=74dbdf38a8763d4804d822b38e69098aceedfbc5;p=thirdparty%2Fgcc.git 2019-01-02 Richard Biener 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@267510 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 37c318da6a0e..1c86e22a777b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-01-02 Richard Biener + + PR tree-optimization/88621 + * tree-ssa-loop-im.c (gather_mem_refs_stmt): Fix pastos, avoid + bitfields when canoncalizing. + 2019-01-02 Richard Biener PR target/87545 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dfb1c97b61ed..51ecc5380a6e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-02 Richard Biener + + PR tree-optimization/88621 + * gcc.dg/torture/pr88621.c: New testcase. + 2019-01-02 Jakub Jelinek PR ipa/88561 diff --git a/gcc/testsuite/gcc.dg/torture/pr88621.c b/gcc/testsuite/gcc.dg/torture/pr88621.c new file mode 100644 index 000000000000..78492a34dd77 --- /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 58da79d05456..0919931cec30 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);