This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Repair TYPE_REF_CAN_ALIAS_ALL machinery


> At worst, you could simply create NMT's that point to all the call
> clobbered variables, and set the pointers with TYPE_REF_CAN_ALIAS_ALL to
> have that NMT in SSA_NAME_PTR_INFO.

It turns out that I need more than the call-clobbered variables, I also need 
the call-clobbered SMTs so NMTs won't do (see for example p.adb).  I have 
something plausible in tree-ssa-alias.c working with our 4.1-based compiler, 
but not with the mainline compiler because computation of call-clobberness 
for tags is now deferred.  Which leads to the following couple of remarks:

1. In compute_may_aliases:

  /* Compute flow-sensitive, points-to based aliasing for all the name
     memory tags.  Note that this pass needs to be done before flow
     insensitive analysis because it uses the points-to information
     gathered before to mark call-clobbered symbol tags.  */
  compute_flow_sensitive_aliasing (ai);

The comment is outdated, the pass doesn't mark tags any longer.


2. In compute_flow_insensitive_aliasing:

	  /* Skip memory tags and variables that have never been
	     written to.  We also need to check if the variables are
	     call-clobbered because they may be overwritten by
	     function calls.

	     Note this is effectively random accessing elements in
	     the sparse bitset, which can be highly inefficient.
	     So we first check the call_clobbered status of the
	     tag and variable before querying the bitmap.  */
	  tag_stored_p = is_call_clobbered (tag)
	                 || bitmap_bit_p (ai->written_vars, DECL_UID (tag));
	  var_stored_p = is_call_clobbered (var)
	                 || bitmap_bit_p (ai->written_vars, DECL_UID (var));
	  if (!tag_stored_p && !var_stored_p)
	    continue;

I think is_call_clobbered (tag) is not accurate at this point.


-- 
Eric Botcazou


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]