From: Richard Biener Date: Wed, 2 Jan 2019 12:19:10 +0000 (+0000) Subject: re PR tree-optimization/88621 (wrong code at -O1 and above on x86_64-linux-gnu in... X-Git-Tag: upstream/12.2.0~27059 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4c3643a559980f84e5749f470c35badadc1c570e;p=platform%2Fupstream%2Fgcc.git re PR tree-optimization/88621 (wrong code at -O1 and above on x86_64-linux-gnu in 64-bit mode (not in 32-bit mode)) 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. From-SVN: r267510 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 37c318d..1c86e22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 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 * config/i386/x86-tune-costs.h (intel_cost): Adjust cost of cheap SSE instruction. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dfb1c97..51ecc53 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 0000000..78492a3 --- /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 58da79d..0919931 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);