diff mbox

[PR67666] Handle single restrict pointer in struct in create_variable_info_for_1

Message ID 562A0414.2040602@mentor.com
State New
Headers show

Commit Message

Tom de Vries Oct. 23, 2015, 9:55 a.m. UTC
On 29/09/15 10:29, Richard Biener wrote:
> On Tue, 29 Sep 2015, Tom de Vries wrote:
>
>> On 22/09/15 09:49, Richard Biener wrote:
>>> On Tue, 22 Sep 2015, Tom de Vries wrote:
>>>
>>>> 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?
>>>
>>> Ok.
>>>
>>
>> Hi,
>>
>> I wonder if this follow-up patch is necessary.
>>
>> Now that we handle structs with one field in the final loop of
>> create_variable_info_for_1, should we set the is_full_var field as well? It
>> used to be set for such structs before I committed the "Handle single restrict
>> pointer in struct in create_variable_info_for_1" patch.
>
> Yeah, I suppose so.  But I'd set vi->is_full_var to true when
> allocating 'vi':
>
>    vi = new_var_info (decl, name);
>    vi->fullsize = tree_to_uhwi (declsize);
>   +      if (fieldstack.length () == 1)
>   +       vi->is_full_var = true;
>
>
> Ok with that change.
>

Committed as attached.

Thanks,
- Tom
diff mbox

Patch

Add missing is_full_var setting in create_variable_info_for_1

2015-10-23  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-structalias.c (create_variable_info_for_1): Add missing
	setting of is_full_var in case of a single field.
---
 gcc/tree-ssa-structalias.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 8d86dcb..db0ab1e 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -5693,6 +5693,8 @@  create_variable_info_for_1 (tree decl, const char *name)
 
   vi = new_var_info (decl, name);
   vi->fullsize = tree_to_uhwi (declsize);
+  if (fieldstack.length () == 1)
+    vi->is_full_var = true;
   for (i = 0, newvi = vi;
        fieldstack.iterate (i, &fo);
        ++i, newvi = vi_next (newvi))
-- 
1.9.1