This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: LTO bootstrap compare errors for ARM64
- From: Venkataramanan Kumar <venkataramanan dot kumar at linaro dot org>
- To: Jan Hubicka <hubicka at ucw dot cz>
- Cc: gcc at gcc dot gnu dot org, Maxim Kuvyrkov <maxim dot kuvyrkov at linaro dot org>, Richard Beiner <richard dot guenther at gmail dot com>
- Date: Wed, 20 Aug 2014 12:58:11 +0530
- Subject: Re: LTO bootstrap compare errors for ARM64
- Authentication-results: sourceware.org; auth=none
- References: <CAJK_mQ2sEES1-+Wi5YCZX1PT45VJQtgxar-wbDmW4OWjR3jjdg at mail dot gmail dot com> <20140807134451 dot GB30656 at atrey dot karlin dot mff dot cuni dot cz> <CAJK_mQ17Q=y6TBSmsiX0o7n4-fRhF2rMmgvkoXf3JyX-qCTZWA at mail dot gmail dot com>
Hi Honza,
After discussing with Richard Beiner via
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62077, it look like it is
an existing problem in trunk and is masked due the fact that stage1
and stage2 compilers in trunk are built with enable-checking and hence
same garbage collection tuning parameters.
In release branches, stage 1 is built with some checks like "gc" but
stage 2 is not.
These gc parameters affect the LTO IR and it gets streamed differently.
Currently for release branches we have workaround of setting same gc
parameters for stage1 and stage2 builds (or) build stage1 with
---enable-checking=release.
regards,
Venkat
On 11 August 2014 16:20, Venkataramanan Kumar
<venkataramanan.kumar@linaro.org> wrote:
> Hi Honza,
>
> I did not find any differences in tree level dumps. These are the dump
> differences in IPA
>
> In gimple-fold.c.000i.cgraph
>
> (--Snip--)
> < _Z25gimple_build_omp_continueP9tree_nodeS0_/761
> (gimple_build_omp_continue(tree_node*, tree_node*)) @0x3ff7ebda548
> ---
>> _Z25gimple_build_omp_continueP9tree_nodeS0_/761 (gimple_build_omp_continue(tree_node*, tree_node*)) @0x3ff92b5a548
> 28865c28865
> < _Z26gimple_build_omp_taskgroupP21gimple_statement_base/760
> (gimple_build_omp_taskgroup(gimple_statement_base*)) @0x3ff7ebda400
> ---
>> _Z26gimple_build_omp_taskgroupP21gimple_statement_base/760 (gimple_build_omp_taskgroup(gimple_statement_base*)) @0x3ff92b5a400
> 28875c28875
> < _Z23gimple_build_omp_masterP21gimple_statement_base/759
> (gimple_build_omp_master(gimple_statement_base*)) @0x3ff7ebda2b8
> ---
>> _Z23gimple_build_omp_masterP21gimple_statement_base/759 (gimple_build_omp_master(gimple_statement_base*)) @0x3ff92b5a2b8
> 28885c28885
> < _Z24gimple_build_omp_sectionP21gimple_statement_base/758
> (gimple_build_omp_section(gimple_statement_base*)) @0x3ff7ebda170
> ---
>> _Z24gimple_build_omp_sectionP21gimple_statement_base/758 (gimple_build_omp_section(gimple_statement_base*)) @0x3ff92b5a170
> (--Snip--)
>
>
> In gimple.c.044i.profile_estimate
>
> (--Snip--)
>
> 1987c1987
> < vec<tree_node*, va_heap, vl_ptr>::qsort(int (*)(void const*, void
> const*)) (struct vec * const this, int (*<T10f9>) (const void *, const
> void *) cmp)
> ---
>> vec<tree_node*, va_heap, vl_ptr>::qsort(int (*)(void const*, void const*)) (struct vec * const this, int (*<T10fb>) (const void *, const void *) cmp)
> (--Snip--)
>
> gimple.c.048i.inline
>
> (--Snip--)
>
> < min size: 6
> ---
>> min size: 0
> 6590c6590
> < min size: 14
> ---
>> min size: 0
> 6607c6607
> < min size: 28
> (--Snip--)
>
> On 7 August 2014 19:14, Jan Hubicka <hubicka@ucw.cz> wrote:
>>>
>>> As a First step I compared the "objump -D" dump between
>>> "stage2-gcc/gimple.o" and "stage3-gcc/gimple.o". Differences are in
>>> LTO sections .gnu.lto_.decls.0, .gnu.lto_.symtab.
>>> Ref: http://paste.ubuntu.com/7949238/
>>
>> If you see the differences already in .o files (i.e. at compile time), I think the next
>> step is to produce -fdump-tree-all -fdump-ipa-all dumps of stage2-gcc/gimple.o
>> and stage3-gcc/gimple.o and see how they differ.
>>
>> Debugging misoptimization of LTO stage2 compiler will be interesting - I guess we can
>> first try to identify what is wrong rahter than usual bisecting method...
>>
>> Honza
>>>
>>> No differences when when using "objdump -d".
>>>
>>> Next I passed "-save-temps" to stage2 and stage3 builds and compared
>>> the assembly files. The differences are in strings dumped via .ascii
>>> and ,string directives.
>>>
>>> Next I checked the flags passed to the stage 2 and stage 3 builds. It
>>> is same and below is the flag set being passed.
>>>
>>> -save-temps -O2 -g -flto -flto=jobserver -frandom-seed=1
>>> -ffat-lto-objects -DIN_GCC -fno-exceptions -fno-rtti
>>> -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings
>>> -Wcast-qual -Wmissing-forma t-attribute -pedantic
>>> -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings
>>>
>>> Can you please suggest on how to fix/debug further these comparison
>>> failures in GCC 4.9?
>>>
>>> regards,
>>> Venkat.