This is the mail archive of the gcc-bugs@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]

[Bug bootstrap/57154] [4.9 Regression] Bootstrap broken for powerpc64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57154

--- Comment #9 from Teresa Johnson <tejohnson at google dot com> 2013-05-03 15:40:16 UTC ---
The problem is that with the rounding divide, an odd numbered
probability being propagated along a 50-50 branch will be rounded up
along both edges, resulting in 1 higher probability being propagated
along the graph than with the earlier truncating divide. The algorithm
in sched-rgn.c is propagating the probabilities along the whole cfg,
and when these edges merge, we have 10001 as the accumulated
probability, which is higher than REG_BR_PROB_BASE.

The following patch fixes this for the attached test case:

Index: sched-rgn.c
===================================================================
--- sched-rgn.c (revision 198581)
+++ sched-rgn.c (working copy)
@@ -1442,6 +1442,8 @@ compute_dom_prob_ps (int bb)
  bitmap_set_bit (pot_split[bb], EDGE_TO_BIT (out_edge));

       prob[bb] += combine_probabilities (prob[pred_bb], in_edge->probability);
+      if (prob[bb] > REG_BR_PROB_BASE)
+ prob[bb] = REG_BR_PROB_BASE;
     }

   bitmap_set_bit (dom[bb], bb);

I am now testing with the full powerpc bootstrap build. This was the
only additional use of combine_probabilities in my patch, so there
shouldn't be any other issues like this. Will send the patch for
review once the bootstrap completes.

Teresa

On Fri, May 3, 2013 at 8:10 AM, tejohnson at google dot com
<gcc-bugzilla@gcc.gnu.org> wrote:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57154
>
> --- Comment #7 from Teresa Johnson <tejohnson at google dot com> 2013-05-03 15:10:50 UTC ---
> Thanks for the test case - reproduced with my stage1 compiler on gcc110. Teresa
>
> On Fri, May 3, 2013 at 8:02 AM, dje at gcc dot gnu.org
> <gcc-bugzilla@gcc.gnu.org> wrote:
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57154
>>
>> --- Comment #6 from David Edelsohn <dje at gcc dot gnu.org> 2013-05-03 15:02:18 UTC ---
>> Created attachment 30022
>>   --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30022
>> Testcase
>>
>> Testcase from Anton Blanchard transferred from PR 57161
>>
>> # gcc -O2 -c foo.c
>> foo.c: In function 'testcase':
>> foo.c:40:1: internal compiler error: in check_probability, at basic-block.h:941
>>  }
>>  ^
>> 0x105bb57b check_probability
>>     ../../gcc/gcc/basic-block.h:941
>> 0x105bb57b check_probability
>>     ../../gcc/gcc/sched-rgn.c:3247
>> 0x105bb57b combine_probabilities
>>     ../../gcc/gcc/basic-block.h:950
>> 0x105bb57b compute_dom_prob_ps
>>     ../../gcc/gcc/sched-rgn.c:1444
>> 0x105bb57b sched_rgn_local_init(int)
>>     ../../gcc/gcc/sched-rgn.c:3291
>> 0x105bd393 schedule_region
>>     ../../gcc/gcc/sched-rgn.c:2984
>> 0x105bd393 schedule_insns
>>     ../../gcc/gcc/sched-rgn.c:3384
>> 0x105bd393 schedule_insns()
>>     ../../gcc/gcc/sched-rgn.c:3363
>> 0x105bdbb3 rest_of_handle_sched
>>     ../../gcc/gcc/sched-rgn.c:3577
>>
>> --
>> Configure bugmail: http://gcc.gnu.org/bugzilla/userprefs.cgi?tab=email
>> ------- You are receiving this mail because: -------
>> You are on the CC list for the bug.
>
> --
> Configure bugmail: http://gcc.gnu.org/bugzilla/userprefs.cgi?tab=email
> ------- You are receiving this mail because: -------
> You are on the CC list for the bug.


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