> > When there are no symbols in the pointer's points-to set. > I am beginning to realize. But there is something it remains:
1) Once the ssa rename has been done, the alias analysis begins (points-to sets). Each version of a base pointer has associated its own points-to set? Like if () t_1 = & a_1; t_1 points-to { a_1 } else if () t2_ = & b_1; t_2 points-to { b_1 } else t_3 = & c_1; t_3 points-to { c_1 } # t_4 = PHI <t_1, t_2, t_3> p_1 = t_4; p_1 and t_4 points-to { a_1, b_1, c_1 } 2) If a virtual operator is inserted for each symbol found in a points-to set and since the virtual operands are inserted after the ssa renaming, how virtual operands are versioned to keep a correct version state between real and virtual operators? For instance, given the next code if () t_1 = & a_1; t_1 points-to { a_1 } else if () t2_ = & b_1; t_2 points-to { b_1 } else t_3 = & c_1; t_3 points-to { c_1 } p_1 = t_4; p_1 and t_4 points-to { a_1, b_1, c_1 } *p_2 = 5; *p_2 -> NMT that is associated to points-to { a_1, b_1, c_1 } the virtual operators will be placed and versioned like this: if () t_1 = & a_1; t_1 points-to { a_1 } else if () t2_ = & b_1; t_2 points-to { b_1 } else t_3 = & c_1; t_3 points-to { c_1 } # t_4 = PHI <t_1, t_2, t_3> # VUSE <a_1> # VUSE <b_1> # VUSE <c_1> p_1 = t_4; p_1 and t_4 points-to { a_1, b_1, c_1 } # a_2 = VDEF <a_1> # b_2 = VDEF <b_1> # c_2 = VDEF <c_1> *p_2 = 5; *p_2 -> NMT that is associated to points-to { a_1, b_1, c_1 } Thank you very much for your help. Fran