birthpoints in rtl.

Paolo Bonzini bonzini@gnu.org
Sat Mar 1 13:47:00 GMT 2008


> By the way, I still don't understand how birth points would work.  Can
> someone give an example of what the insn stream would look like with
> birth points, and what the DU/UD chains would look like?

With a big IIUC, and using a high-level IR for simplicity

    if (a < 5) goto BB1; else goto BB2;
  BB1: b = 3; goto BB3;
  BB2: b = c; goto BB3;
  BB3: return b * b;

    DF info for b:
      insn <b = 3> has def D1
      insn <b = c> has def D2
      insn <b * b> has use U1 (use-def chain [D1,D2]) and
                       use U2 (use-def chain [D1,D2])

becomes

    if (a < 5) goto BB1; else goto BB2;
  BB1: b = 3; goto BB2;
  BB2: b = c; goto BB3;
  BB3: b = b; return b * b;

    DF info for b:
      insn       <b = 3> has def D1
      insn       <b = c> has def D2
      birthpoint <b = b> has use U1 (use-def chain [D1,D2])
                         and def D3
      insn       <b * b> has use U2 (use-def chain [D3])
                         and use U3 (use-def chain [D3])

Basically the only non-singleton UD chains are for a birthpoint's RHS, 
and the UD chains of birthpoints correspond to PHI operands.  The 
singleton UD chains correspond to subscripted SSA variables.  I think 
this is isomorphic to FUD chains.

Paolo



More information about the Gcc mailing list