This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: SSA alias representation
>
> 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