From: Tom de Vries <Tom_deVries@mentor.com>
To: Richard Biener <rguenther@suse.de>
Cc: "gcc-patches@gnu.org" <gcc-patches@gnu.org>
Subject: [PATCH][PR67666] Handle single restrict pointer in struct in create_variable_info_for_1
Date: Tue, 22 Sep 2015 07:45:00 -0000 [thread overview]
Message-ID: <5600FBFA.2090300@mentor.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 467 bytes --]
Hi,
Consider this test-case:
struct ps
{
int *__restrict__ p;
};
void
f (struct ps &__restrict__ ps1)
{
*(ps1.p) = 1;
}
Atm, the restrict on p has no effect. Now, say we add a field to the struct:
struct ps
{
int *__restrict__ p;
int a;
};
Then the restrict on p does have the desired effect.
This patch fixes the handling of structs with a single field in alias
analysis.
Bootstrapped and reg-tested on x86_64.
OK for trunk?
Thanks,
- Tom
[-- Attachment #2: 0001-Handle-single-restrict-pointer-in-struct-in-create_v.patch --]
[-- Type: text/x-patch, Size: 2584 bytes --]
Handle single restrict pointer in struct in create_variable_info_for_1
2015-09-22 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/67666
* tree-ssa-structalias.c (create_variable_info_for_1): Handle struct
with single field non-conservative.
* g++.dg/pr67666.C: New test.
---
gcc/testsuite/g++.dg/pr67666.C | 17 +++++++++++++++++
gcc/tree-ssa-structalias.c | 25 ++++++++++++++++---------
2 files changed, 33 insertions(+), 9 deletions(-)
create mode 100644 gcc/testsuite/g++.dg/pr67666.C
diff --git a/gcc/testsuite/g++.dg/pr67666.C b/gcc/testsuite/g++.dg/pr67666.C
new file mode 100644
index 0000000..ad162f4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr67666.C
@@ -0,0 +1,17 @@
+// { dg-do compile }
+// { dg-options "-O2 -fdump-tree-ealias-all" }
+
+struct ps
+{
+ int *__restrict__ p;
+};
+
+void
+f (struct ps &__restrict__ ps1)
+{
+ *(ps1.p) = 1;
+}
+
+// { dg-final { scan-tree-dump-times "clique 1 base 1" 1 "ealias" } }
+// { dg-final { scan-tree-dump-times "clique 1 base 2" 1 "ealias" } }
+// { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } }
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index b5b9d0a..94016b9 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -5675,7 +5675,7 @@ create_variable_info_for_1 (tree decl, const char *name)
/* If we didn't end up collecting sub-variables create a full
variable for the decl. */
- if (fieldstack.length () <= 1
+ if (fieldstack.length () == 0
|| fieldstack.length () > MAX_FIELDS_FOR_FIELD_SENSITIVE)
{
vi = new_var_info (decl, name);
@@ -5694,19 +5694,26 @@ create_variable_info_for_1 (tree decl, const char *name)
fieldstack.iterate (i, &fo);
++i, newvi = vi_next (newvi))
{
- const char *newname = "NULL";
+ const char *newname = NULL;
char *tempname;
if (dump_file)
{
- tempname
- = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC
- "+" HOST_WIDE_INT_PRINT_DEC, name,
- fo->offset, fo->size);
- newname = ggc_strdup (tempname);
- free (tempname);
+ if (fieldstack.length () != 1)
+ {
+ tempname
+ = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC
+ "+" HOST_WIDE_INT_PRINT_DEC, name,
+ fo->offset, fo->size);
+ newname = ggc_strdup (tempname);
+ free (tempname);
+ }
}
- newvi->name = newname;
+ else
+ newname = "NULL";
+
+ if (newname)
+ newvi->name = newname;
newvi->offset = fo->offset;
newvi->size = fo->size;
newvi->fullsize = vi->fullsize;
--
1.9.1
next reply other threads:[~2015-09-22 6:58 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-22 7:45 Tom de Vries [this message]
2015-09-22 8:13 ` Richard Biener
2015-09-29 8:29 ` Tom de Vries
2015-09-29 9:50 ` Richard Biener
2015-10-23 9:59 ` Tom de Vries
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5600FBFA.2090300@mentor.com \
--to=tom_devries@mentor.com \
--cc=gcc-patches@gnu.org \
--cc=rguenther@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).