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: [PATCH] Fix undefined label problem after crossjumping (PR rtl-optimization/64536)


On Fri, Jan 09, 2015 at 10:36:09AM +0100, Richard Biener wrote:
> I wonder why post_order_compute calls tidy_fallthru_edges at all - won't
> that break the just computed postorder?

Dunno, but I think it shouldn't break anything, the function doesn't remove
any blocks, just in the typical case of an unconditional jump to the next bb
or conditional jump to the next bb (if only successor) removes the jump and
makes the edge EDGE_FALLTHRU.

> Other than that, why doesn't can't the issue show up with non-table-jumps?

I think tablejumps are the only case where (at least during jump2)
code_labels live in between the basic blocks, not inside of them.

> What does it take to preserve (all) the labels?

Then we'd need to remove all the instructions in between the two basic
blocks (as we currently do), but move any code_labels from there first to
the start of the next basic block.  Probably better just call tablejump_p
with non-NULL args and move precisely that code_label that it sets.

But, as I said, we'd still not optimize it if tidy_fallthru_edges is not
called, so we'd need to do it at another place too.

	Jakub


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