https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96264

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to seurer from comment #5)
> I too am able to duplicate this on a native powerpc64 LE machine.  Changing
> any of the compilation options (-Os -fno-forward-propagate -fschedule-insns
> -fno-tree-ter) generates code that works.
> 
> The revision that causes it is:
> 
> g:a7eb97ad269b6509bd7b31ca373daea98e4d7e85, r10-135
> 
> commit a7eb97ad269b6509bd7b31ca373daea98e4d7e85 (HEAD)
> Author: Richard Biener <rguent...@suse.de>
> Date:   Fri May 3 10:39:56 2019 +0000
> 
>     re PR middle-end/88963 (gcc generates terrible code for vectors of 64+
> length which are not natively supported)
>     
>     2019-05-03  Richard Biener  <rguent...@suse.de>
>     
>             PR tree-optimization/88963
>             * tree-ssa-forwprop.c (pass_forwprop::execute): Rewrite
>             vector loads feeding only BIT_FIELD_REFs to component
>             loads.  Rewrite stores fed by CONSTRUCTORs to component
>             stores.
>     
>             * gcc.dg/tree-ssa/ssa-fre-31.c: Disable forwprop.
>             * gcc.target/i386/pr88963-1.c: New testcase.
>             * gcc.target/i386/pr88963-2.c: Likewise.
>     
>     From-SVN: r270844
> 
> I compared the assembler output from r10-134 and r10-135 for the test case
> and the differences are significant.  Assembler output of the two revisions
> attached.

Note -fno-forward-propagate is an RTL optimization so if enabling that fixes
the issue the issue cannot really be the above rev. but it's probably exposed
by it only.  Note this is only done for vector load/stores using BLKmode.

Somebody needs to look at the RTL details to see what's the difference with
RTL fwprop or scheduling for example (at least for scheduling there are
existing dbg-counters that might help pointing to the breaking (non-)transform)

Reply via email to