This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Various selective scheduling fixes
- From: Christophe Lyon <christophe dot lyon at linaro dot org>
- To: Andrey Belevantsev <abel at ispras dot ru>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Alexander Monakov <amonakov at ispras dot ru>
- Date: Fri, 1 Apr 2016 15:09:28 +0200
- Subject: Re: Various selective scheduling fixes
- Authentication-results: sourceware.org; auth=none
- References: <d534c458-8456-51f7-2963-5d1faf112ffe at ispras dot ru> <73dda1b9-478a-931e-0412-01979164f702 at ispras dot ru> <CAKdteOaFn-nH0SMVoeXkGFFv+zVema9q1_mFoUrGw0yoqMhyyw at mail dot gmail dot com> <7447b21e-f0cf-508a-2ba2-2924887fc85e at ispras dot ru>
On 1 April 2016 at 10:54, Andrey Belevantsev <abel@ispras.ru> wrote:
> Hi Christophe,
>
>
> On 01.04.2016 10:33, Christophe Lyon wrote:
>>
>> On 31 March 2016 at 16:43, Andrey Belevantsev <abel@ispras.ru> wrote:
>>>
>>> Hello,
>>>
>>> On 14.03.2016 12:10, Andrey Belevantsev wrote:
>>>>
>>>>
>>>> Hello,
>>>>
>>>> In this thread I will be posting the patches for the fixed selective
>>>> scheduling PRs (except the one that was already kindly checked in by
>>>> Jeff).
>>>> The patches were tested both on x86-64 and ia64 with the following
>>>> combination: 1) the usual bootstrap/regtest, which only utilizes
>>>> sel-sched
>>>> on its own tests, made by default to run on arm/ppc/x86-64/ia64; 2) the
>>>> bootstrap/regtest with the second scheduler forced to sel-sched; 3) both
>>>> schedulers forced to sel-sched. In all cases everything seemed to be
>>>> fine.
>>>>
>>>> Three of the PRs are regressions, the other two showed different errors
>>>> across the variety of releases tested by submitters; I think all of
>>>> them
>>>> are appropriate at this stage -- they do not touch anything outside of
>>>> selective scheduling except the first patch where a piece of code from
>>>> sched-deps.c needs to be refactored into a function to be called from
>>>> sel-sched.c.
>>>
>>>
>>>
>>> I've backported all regression PRs to gcc-5-branch after testing there
>>> again
>>> with selective scheduling force enabled: PRs 64411, 66660, 69032, 69102.
>>> The first one was not marked as a regression as such but the test for PR
>>> 70292, which is duplicate, works for me on gcc 5.1 thus making it a
>>> regression, too.
>>>
>>
>> Hi,
>>
>> The backport for pr69102 shows that the new testcase fails to compile
>> (ICE)
>> when GCC is configured as:
>>
>> --target=arm-none-linux-gnueabihf --with-float=hard --with-mode=arm
>> --with-cpu=cortex-a15 --with-fpu=neon-vfpv4
>>
>>
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.c-torture/compile/pr69102.c:
>> In function 'foo':
>>
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.c-torture/compile/pr69102.c:21:1:
>> internal compiler error: Segmentation fault
>> 0xa64d15 crash_signal
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/toplev.c:383
>> 0xfa41d7 autopref_multipass_dfa_lookahead_guard(rtx_insn*, int)
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/haifa-sched.c:5752
>> 0xa31cd2 invoke_dfa_lookahead_guard
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:4212
>> 0xa31cd2 find_best_expr
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:4415
>> 0xa343fb fill_insns
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:5570
>> 0xa343fb schedule_on_fences
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:7395
>> 0xa36010 sel_sched_region_2
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:7533
>> 0xa36f2a sel_sched_region_1
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:7575
>> 0xa36f2a sel_sched_region(int)
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:7676
>> 0xa37589 run_selective_scheduling()
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sel-sched.c:7752
>> 0xa14aed rest_of_handle_sched2
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sched-rgn.c:3647
>> 0xa14aed execute
>> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/sched-rgn.c:3791
>>
>> See
>> http://people.linaro.org/~christophe.lyon/cross-validation/gcc/gcc-5-branch/234625/arm-none-linux-gnueabihf/diff-gcc-rh60-arm-none-linux-gnueabihf-arm-cortex-a15-neon-vfpv4.txt
>>
>> Can you have a look?
>
>
> That's because A15 is the only place which enables
> autopref_multipass_dfa_lookahead_guard as the DFA lookahead guard hook. But
> autoprefetch modeling doesn't work for selective scheduling, it uses haifa
> structures that are not kept up to date during sel-sched. So this is not
> supposed to work as soon as the param value for prefetcher lookahead depth
> is positive.
>
> The following patch works for me. Could you check it with your testing? If
> it works fine for you, I would install the patch both for trunk and gcc-5.
> It would be great to force sel-sched to be enabled, too. I could do that
> but I don't have the hardware or cross-arm target tools at the moment.
>
> * haifa-sched.c (autopref_multipass_dfa_lookahead_guard): Disable
> for selective scheduler.
>
It does work for me, it also fixes the other ICE I reported (on pr69307).
But note that both tests pass on trunk.
Christophe
> Best,
> Andrey
>
>
>>
>> Christophe
>>
>>> Andrey
>>>
>>>>
>>>> Andrey
>>>
>>>
>>>
>