This is the mail archive of the gcc-patches@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: Repost: RFA [4.1]: improvement to if-conversion and cross-jumping (PR20070)


This doesn't do anything different from the normal recursive bit at the end of the function, does it? If it isn't needed, delete this part.


It does something different - it first processes set destinations, and then sources. That is the right thing to do if rvalue == 1.
However, AFAICS there is no caller left which can cause rvalue == 1 when we are processing a PARALLEL. Instead, it will
always be -1, which is correctly handled by the default processing. Therefore, I have replaced this code with a gcc_assert and a
break; .

That's what I meant. Thanks.


Are they really all dead at the end of each block? It's been a long time since I looked at reg-stack, but this looks odd to me.


No, they are not all dead. But we don't have any up-to-date information on these registers, because reg-stack changes the actual register numbers used, but it doesn't update the global_live_at{start,end}. And update_live_info lacks the smarts to do a proper update. (The bogosity of the live info is taken care of by not changing register usage by stack regs after reg-stack.) Since we are changing some blocks by cross-jumping, we end up with live information on the stack regs that is not only bogus, but also inconsistent between different blocks with identical successors.

Uh, ok. Sounds like there's a project to rewrite regstack in there somewhere, but I guess it's out of scope for this :-)


I have attached the updated patch that takes your comments into account. regtesting is underway.

This is ok, please install after testing. Thanks!



Bernd



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