diff options
author | Jan Hubicka <jh@suse.cz> | 2021-08-11 15:01:39 +0200 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2021-08-11 15:01:39 +0200 |
commit | 9851a1631f2915fafdc733539b6c8b5fb81e7ae5 (patch) | |
tree | 6ec5d79b94267126a39a6ce0c68e22be7c40c170 /gcc/testsuite/c-c++-common/modref-dse.c | |
parent | d7e91f4894f6a1a2daeec5cbe1e912bb896b9f7a (diff) | |
download | gcc-9851a1631f2915fafdc733539b6c8b5fb81e7ae5.zip gcc-9851a1631f2915fafdc733539b6c8b5fb81e7ae5.tar.gz gcc-9851a1631f2915fafdc733539b6c8b5fb81e7ae5.tar.bz2 |
Fix min_flags handling in mod-ref
gcc/ChangeLog:
2021-08-11 Jan Hubicka <hubicka@ucw.cz>
Alexandre Oliva <oliva@adacore.com>
* ipa-modref.c (modref_lattice::dump): Fix escape_point's min_flags
dumping.
(modref_lattice::merge_deref): Fix handling of indirect scape points.
(update_escape_summary_1): Likewise.
(update_escape_summary): Likewise.
(ipa_merge_modref_summary_after_inlining): Likewise.
gcc/testsuite/ChangeLog:
* c-c++-common/modref-dse.c: New test.
Diffstat (limited to 'gcc/testsuite/c-c++-common/modref-dse.c')
-rw-r--r-- | gcc/testsuite/c-c++-common/modref-dse.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/modref-dse.c b/gcc/testsuite/c-c++-common/modref-dse.c new file mode 100644 index 0000000..5f64e8f --- /dev/null +++ b/gcc/testsuite/c-c++-common/modref-dse.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-dse2-details" } */ +/* { dg-final { scan-tree-dump-not "Deleted dead store" "dse2" } } */ + +struct foo { unsigned long bar; }; + +unsigned y; + +static int __attribute__ ((__noinline__, __noclone__)) +wrapped (struct foo *p, int i); + +static int wrapper (struct foo *p); + +static int __attribute__ ((__noclone__)) +wrapper (struct foo *p) { + return wrapped (p, 1); +} + +static int __attribute__ ((__noinline__, __noclone__)) +dind (struct foo **pp); + +int __attribute__ ((__noclone__, __no_reorder__)) +xfn () { + struct foo x = { 0xBADC0FFE }; + struct foo *p = &x; + return dind (&p); +} + +static int __attribute__ ((__noinline__, __no_reorder__)) +wrapped (struct foo *p, int i) { + return p->bar + i == y++; +} + +static int __attribute__ ((__noinline__, __noclone__, __no_reorder__)) +dind (struct foo **pp) { + wrapper (*pp); + return 0; +} |