This is the mail archive of the gcc-bugs@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]

[Bug debug/54693] VTA guality issues with loops


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54693

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-10-04 06:09:48 UTC ---
As a quick hack just for this testcase we might perhaps do something in jump
threading code, if we have a DEBUG stmt based on a PHI result and are splitting
it up, look if it is the last DEBUG stmt for the variable in the threaded bb
and if so, consider adding a DEBUG stmt also to the fallthru bb after the
threaded block, based on its PHI.

For the general solution, didn't give it much thought yet, but so far I was
thinking about a pass that would analyze on GIMPLE (perhaps shortly before
expansion) all DEBUG stmts and work similarly to tree-into-ssa.c algorithm
(just simplified by performing it just once, never incrementally). 
SSA_NAME_VERSION
for the debug stmt lhs decls could be some integer recorded perhaps as
gimple_uid on the debug stmts, we'd track the current definition of each debug
stmt lhs uid, and instead of inserting PHI nodes we could:
1) look for existing PHI node for the var mentioned in the debug stmt rhs,
   use that if exists
2) in bb with few incoming edges, look for existing PHI node with constant
   PHI arguments where for different current defs of some debug stmt lhs uid
   the constants have different values, like:
 <bb 7>:
   DEBUG i => D#12
   goto bb 9;
 <bb 8>:
   DEBUG i => i_17
 <bb 9>:
   z = PHI <7(7), 19(8)>

   We can then insert something like
   DEBUG i => z == 7 ? D#12 : i_17
3) otherwise punt.

Perhaps 2) would need some var-tracking changes, I'm afraid unavailability of a
VALUE for either of the branches of the COND_EXPR would reset it all.  But at
least 1) could work.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]