This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
The code is a bit complicated, so i'll simplify it. Given: <BLOCK 0>
while (1) { <BLOCK 1> a_5 = PHI <a_4 (0) <<<<< The default def, a_7 (13)> b_9 = a_5 + 3; ... (More uses of a_5 + 3) <BLOCK 13> a_7 = 7; }
To do this optimally, we do four things:
1. Insert a save at the end of the loop 2. Insert a save before the loop 3. Insert reloads in place of all the redundant expressions. 4. Insert a phi for the two saves we made.
So that the end code looks like: <BLOCK 0> pretmp_1 = a_4 + 3; while (1) { <BLOCK 1> pretmp_2 = PHI<pretmp_1 (0), pretmp_3 (13)> b_9 = pretmp_2; .... (uses of a_5 + 3 replaced with pretmp_2) <BLOCK 13> a_7 = 7; pretmp_3 = a_7 + 3; }
When we go to generate the save at pretmp_1, the only thing we have to
work with is the block we are in. We don't have a handle to any "a_5 + 3"'s or
anything, because none *exist at that point yet*.
I still don't get it... maybe Im dense. But looking for versions of a_ seems wrong. You know from the PHI what variables actually reach the PHI.
The PHI doesnt even have to have an a_ in it, it could beI'm not sure what you think this has to do with anything, but i'll note we substitute phi args into expressions when deciding on ESSA versions in order to get this right.
a_5 = PHI <b_8(0), c_7(3)>
so a_5 + 3 is going to have nothing to do with a_*
or there could be an overlapping range of a_ reaching the PHI. Maybe your PHI refers to a_4, but there could be a def of a_9 bewteen the PHI and the def of a_4.. wouldn't you find the a_9?
This is taken care of in a different portion of SSAPRE.
SO I guess I dont understand what you are looking for... I dont know how you can evaluate the expression without know what use of a variable is feeding the PHI...
Andrew
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |