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: Suggestion for a fix to Bug middle-end/20177


Mostafa Hagog wrote:
Thanks for the information, what we were doing was to call
update_life_info_in_dirty_blocks, but for some reason this wasn't
sufficient to
mark a register dead (REG_DEAD note) when the register was defined in a
predecessor block and dies in the dirty block; we had to call
update_life_info
for all the blocks to mark that register as dead. Is there cases that we
know
about that such case could happen? is this means a bug in update_life_info

I am not sure I have enough info to answer this.


If you are moving instructions from one block to another, then you may need a full life pass, which means not using UPDATE_LIFE_LOCAL. With UPDATE_LIFE_LOCAL, we assume that the info on which registers are live at the end of each block is still correct, and we just update info within blocks, i.e. making sure REG_DEAD notes within a block are in the right place, as this might have changed. But if you need changes to global_live_at_{start,end} then you need to rerun a full life pass without UPDATE_LIFE_LOCAL to recompute this info.

Otherwise, I am not sure what the problem might be. You might try spending a little time figuring out how update_life_info works.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com



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