On Thu, Nov 1, 2012 at 10:06 AM, Dmitry Vyukov <dvyu...@google.com> wrote: > On Thu, Nov 1, 2012 at 7:47 PM, Xinliang David Li <davi...@google.com> > wrote: >> >> On Wed, Oct 31, 2012 at 11:27 PM, Jakub Jelinek <ja...@redhat.com> wrote: >> > On Wed, Oct 31, 2012 at 11:00:17PM -0700, Xinliang David Li wrote: >> >> > + /* Below are things we do not instrument >> >> > + (no possibility of races or not implemented yet). */ >> >> > + if (/* Compiler-emitted artificial variables. */ >> >> > + (DECL_P (expr) && DECL_ARTIFICIAL (expr)) >> >> > + /* The var does not live in memory -> no possibility of races. >> >> > */ >> >> > + || (tcode == VAR_DECL >> >> > + && TREE_ADDRESSABLE (expr) == 0 >> >> >> >> ==> !TREE_ADDRESSABLE (expr) >> >> >> >> > + && TREE_STATIC (expr) == 0) >> >> >> >> >> >> To detect stack varaible, TREE_STATIC can not be used. Use >> >> !DECL_EXTERNAL instead. >> > >> > TREE_STATIC is right for that. >> >> Hmm, what does this condition try to capture then? > > > > As far as I remember, I've seen global variables marked as !ADDRESSABLE. And > this condition is to instrument global vars in any case. > But it was a long time ago.
But it skips those globals without static storage and marked as not addressable. It seems to me you want to skip all stack local variables that are not address escaped. Without address escape analysis, the address taken bit (not the same as addressable attribute) should be used. As far as I can tell, such bit is not available in var_decl. The varpool_node has one, but it is only for var_decls with static storage. It is also unfortunate that there is no single bit to test if a variable is function auto, though there is an interface to call which is 'auto_var_in_fn_p (...)'. The condition to skip such variable references are: if (tcode == VAR_DECL && auto_var_in_fn_p (expr, ..) && !address_taken (expr)) The TREE_ADDRESSABLE check seems redundant -- if the var_decl (instead of ssa name) appears in the assignment, why would it not be 'addressable'? And being addressable does not mean it is address taken either. Diego, is there a way to check address taken attribute for auto vars? thanks, David