Roman Zippel wrote: > Hi, > > On Tue, 19 Jun 2007, Kenneth Zadeck wrote: > > > > Another question I have is about DF_REF_MAY_CLOBBER, any function call > would also clobber the return value and I see defs generated for calls, > but they are only marked with DF_REF_MAY_CLOBBER and thus the use chain > isn't broken by calls. Why is that? The header file doesn't go into any > details what "better information" it needs. > > For certain regs, the subroutine may or may not modify the value. The better information alluded to is information that one might get by doing interprocedural analysis. Without such information you have to assume that the value may or may not survive. The treatment of these vars is thus conservative, but correct.
The only def that this is not true for in a call is the return value. I am going to let bonzini respond to the rest of this because i am not familiar with enough of this to approve or disapprove it. kenny > bye, Roman > > Index: gcc/df-problems.c > =================================================================== > --- gcc/df-problems.c (revision 125811) > +++ gcc/df-problems.c (working copy) > @@ -1574,7 +1574,7 @@ > /* Call-clobbered registers die across exception and call edges. */ > /* ??? Abnormal call edges ignored for the moment, as this gets > confused by sibling call edges, which crashes reg-stack. */ > - if (e->flags & EDGE_EH) > + if ((e->flags & EDGE_EH) || (e->flags & EDGE_SIBCALL)) > bitmap_ior_and_compl_into (op1, op2, df_invalidated_by_call); > else > bitmap_ior_into (op1, op2); >