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: Fix bugs introduced by switch-case profile propagation


On Fri, Oct 26, 2012 at 8:05 AM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> Hi,
>>
>> On Tue, Oct 23, 2012 at 3:03 AM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> >> Ping.
>> >>
>> >>
>> >> On Wed, Oct 17, 2012 at 1:48 PM, Easwaran Raman <eraman@google.com> wrote:
>> >> > Hi,
>> >> >  This patch fixes bugs introduced by my previous patch to propagate
>> >> > profiles during switch expansion. Bootstrap and profiledbootstrap
>> >> > successful on x86_64. Confirmed that it fixes the crashes reported in
>> >> > PR middle-end/54957. OK for trunk?
>> >> >
>> >> > - Easwaran
>> >> >
>> >> > 2012-10-17   Easwaran Raman  <eraman@google.com>
>> >> >
>> >> >         PR target/54938
>> >> >         PR middle-end/54957
>> >> >         * optabs.c (emit_cmp_and_jump_insn_1): Add REG_BR_PROB note
>> >> >         only if it doesn't already exist.
>> >> >         * except.c (sjlj_emit_function_enter): Remove unused variable.
>> >> >         * stmt.c (get_outgoing_edge_probs): Return 0 if BB is NULL.
>> >
>> > Seems fine, but under what conditions you get NULL here?
>> Wasn't sure if this is an OK for the patch or if I need to address
>> anything else.
>
> Actually I think you should make the except.c to setcurrent_bb when expanding
> the switch instead.

In the current code, in sjlj_emit_dispatch_table (except.c), a
sequence of instructions including the dispatch table jump are first
generated and emitted to a BB before the first of the jump table
targets. I think you are asking me to first emit the instructions
before the indirect jump into a new bb so that BLOCK_FOR_INSN
(before_case) in stmt.c is non NULL. This would need some refactoring
inside except.c, but more importantly this BB won't have the correct
control flow right? So, while I can avoid the check for BB being NULL
in get_outgoing_edge_probs, I still need to guard for default_edge
being NULL and default_prob will still be 0. Would it be ok if I
remove the check for NULL inside get_outgoing_edge_probs and instead
check it when I initialize BASE?

Thanks,
Easwaran

> OK with this change.
>
> Honza


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