------- Comment #20 from rguenth at gcc dot gnu dot org  2006-08-27 14:20 
-------
So I have a patch that produces (diff typedef long GLint
__attribute__((may_alias)) resunts vs. patch):

--- t.i.030t.alias1.ok  2006-08-27 16:13:54.000000000 +0200
+++ t.i.030t.alias1     2006-08-27 16:14:17.000000000 +0200
@@ -174,11 +174,11 @@

 Variable: blist, UID 1526, const int *

-Variable: list, UID 1527, int[32], is aliased, is addressable, call clobbered
(, passed to call, is global var ), default def: list_4
+Variable: list, UID 1527, int[32], is addressable, call clobbered (, passed to
call, is incoming pointer ), default def: list_4

 Variable: blist.0, UID 1528, const GLint *, symbol memory tag: SMT.30

-Variable: SMT.30, UID 1575, const GLint, is addressable, is global, call
clobbered (, passed to call, is global var ), may aliases: { list }
+Variable: SMT.30, UID 1575, const GLint, is addressable, is global, call
clobbered (, passed to call, is global var )



@@ -195,8 +195,8 @@

 Aliased symbols

-list, UID 1527, int[32], is aliased, is addressable, call clobbered (, passed
to call, is global var ), default def: list_4
-SMT.30, UID 1575, const GLint, is addressable, is global, call clobbered (,
passed to call, is global var ), may aliases: { list }
+list, UID 1527, int[32], is addressable, call clobbered (, passed to call, is
incoming pointer ), default def: list_4
+SMT.30, UID 1575, const GLint, is addressable, is global, call clobbered (,
passed to call, is global var )

 Dereferenced pointers

@@ -204,7 +204,7 @@

 Symbol memory tags

-SMT.30, UID 1575, const GLint, is addressable, is global, call clobbered (,
passed to call, is global var ), may aliases: { list }
+SMT.30, UID 1575, const GLint, is addressable, is global, call clobbered (,
passed to call, is global var )


 Flow-sensitive alias information for find
@@ -275,7 +275,8 @@
   # blist_1 = PHI <blist_3(3), blist_6(4)>;
 <L2>:;
   blist.0_7 = (const GLint *) blist_1;
-  #   list_9 = V_MAY_DEF <list_8>;
+  #   list_10 = V_MAY_DEF <list_8>;
+  #   SMT.30_11 = V_MAY_DEF <SMT.30_9>;
   aglChoosePixelFormat (blist.0_7);
   return;

by noticing that if pt_anything is set, we indeed need to include all
addressable vars in the clobbering:

Index: tree-ssa-alias.c
===================================================================
*** tree-ssa-alias.c    (revision 116488)
--- tree-ssa-alias.c    (working copy)
*************** set_initial_properties (struct alias_inf
*** 359,364 ****
--- 359,373 ----
                if (!unmodifiable_var_p (referenced_var (j)))
                  mark_call_clobbered (referenced_var (j), pi->escape_mask);
            }
+
+         if (pi->pt_anything)
+           {
+             bitmap_iterator bi;
+             unsigned int j;
+             EXECUTE_IF_SET_IN_BITMAP (addressable_vars, 0, j, bi)
+               if (!unmodifiable_var_p (referenced_var (j)))
+                 mark_call_clobbered (referenced_var (j), pi->escape_mask);
+           }
        }

        /* If the name tag is call clobbered, so is the symbol tag


> So what do you think will happen when you add one level of indirection
> to the mess, and TBAA now prunes out *that* alias instead, so you miss
> it again? (IE break the chain of clobber transitivity one link in the
> other direcftion).

Do you have a testcase in mind?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28778

Reply via email to