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]

Re: remaining libjava/verify_local_live_at_start failures


>> So as long as cleanup_cfg returns non-zero update_life_info will
>> DTRT by iterating until global liveness / dead code removal converges.
>
> It is not unreachable code removal, it is dead code removal that causes
> problem.

I wasn't refering to unreachable code removal.  As I recall,
cleanup_cfg interacts with dead code removal as follows:

  BB 1
    a = b + c
    if (a > 10)
      then BB 3

  BB 2
    d = a - e

  BB 3
    d = b / c
    ...

1) calculate_global_regs_live decides that results of "d" computed
   in BB 2 isn't used.

2) update_life_info calls propagate_block with PROP_KILL_DEAD_CODE
   set which removes the contents of BB 2.

3) cleanup_cfg kills the conditional jump at the end of BB 1.

4) calculate_global_regs_live needs to be called again since
   "a" may not be needed.

Notice that unreachable code didn't enter into the picture.

> I guess Richard Kenner's dead store removal introduced the problem.

Sounds like you're on the trail.

-- John
-------------------------------------------------------------------------
|   Feith Systems  |   Voice: 1-215-646-8000  |  Email: john@feith.com  |
|    John Wehle    |     Fax: 1-215-540-5495  |                         |
-------------------------------------------------------------------------


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