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 PR target/59233 (ICE on *-apple-darwin* with -m32 exposed by -freorder-blocks-and-partition)


On Thu, Nov 21, 2013 at 8:57 PM, Teresa Johnson wrote:
> There are two problems I am fixing here (see
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59233 for full analysis).
>
> The first is the original ICE in crossjump optimization, which was
> exposed by enabling -freorder-blocks-and-partition which was
> conservatively preventing some upstream block combining optimizations.
> The issue is that the block ended in a NOTE_INSN_DELETED, which
> old_insns_match_p could not handle. I am fixing this by passing
> old_insns_match_p the last instruction in the block that it knows how
> to handle.
>
> The second issue this exposed was that we were unnecessarily marking
> landing pad branches EDGE_PRESERVE since
> flag_reorder_blocks_and_partition was on, even though this was -Os and
> we will gate partitioning off.

So we keep an edge to a landing pad... Why is this a problem?


>         * bb-reorder.c (do_partition_blocks): New function.
>         (gate_handle_partition_blocks): Call do_partition_blocks.
>         * bb-reorder.h (do_partition_blocks): Declare.
>         * except.c (dw2_build_landing_pads): Call do_partition_blocks.

Exporting this gate function from bb-reorder.c shouldn't be necessary.
Better fix this at the root, in except.c.


>         * cfgcleanup.c (outgoing_edges_match): Walk up past note instructions
>         not understood by old_insns_match_p.

This part is OK.

Ciao!
Steven


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