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

Reply via email to