On Tue, Oct 23, 2012 at 5:17 AM, Bin.Cheng wrote: > Thanks for your explanation. > Now I understand how df_insn_info is updated when > deleting/modifying/creating insn. One more question is when and how > IN/OUT information is updated. GCC calls df_set_bb_dirty when handling > insns, but I did not found any spot in GCSE updating that information. > is it done in CFG_CLEANUP?
It is done lazily in any call to df_analyze. > I would like to study DF infrastructure later, could you share some > background knowledge on this, for example theory/algorithms to which > GCC referred. Though there is good comment at the beginning of > df-core.c, it doesn't mention any background/references. The stuff in df-problems.c is mostly just Dragon book stuff. For the solver itself there is a reference to a paper from Harvey IIRC, but this is also mostly just Dragon book or Muchnick stuff. The only "fancy" stuff would be how several classic problems are combined. For example, DF_LIVE is actually a combination of "classic" liveness and partial availability. Likewise for the pruned version of reaching definitions. The MD problem is probably not described anywhere, but it's basically poor-man's SSA. The scan problem and data structures are compiler specific. I don't think there are any documented theories about this, it's too specific because all of it is strongly bound to how the compiler's internal representation is constructed. The DF infrastructure supports (or works around, depending on your POV) the RTL representation with on-the-side operand caches. Other compilers or internal representations may not need that (e.g. GIMPLE operand caches are on the GIMPLE statement themselves). The documentation in the code is quite good, but if you have any specific questions then there's always this mailing list :-) Ciao! Steven