[Bug middle-end/45962] [4.6 Regression]: many c/c++ failures on cris-elf, in r165236:165242

hp at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 19 02:38:00 GMT 2010


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

--- Comment #15 from Hans-Peter Nilsson <hp at gcc dot gnu.org> 2010-10-19 02:37:49 UTC ---
(In reply to comment #14)
> I haven't yet figured out which function's stack-frame is borked / where
> exactly the saved value of r7 is clobbered. Tomorrow.

Ookay, so... With r165240+c165382 and simd-5.c and -O0, gcc feels it needs to
dynamically (allocate and) align the stack-location for the resulting vectors,
though the vector alignment is neither explicit nor mandatory.  No such dynamic
allocation at r165239.  When doing so, it feels it needs to save the
stack-pointer.  That's redundant; it's already saved when a frame-pointer is
needed. It so emits "move.d $sp,[$r8-8]" (i.e. (set (mem (plus
frame_pointer_rtx -8)) stack_pointer_rtx)).  Where it gets the -8 from, I don't
know, I'll look further. That insn just clobbers; it overwrites a saved
register that held an address, which at return to the function, is referenced
and causes the SEGV.

Code at the two revisions are identical for -O1 as well as for-O2; no dynamic
allocation or anything needed, so I guess the new dynamic alignment at -O0 is
not an issue that needs to be investigated per se.


Regarding the earlier "these are not regressions, dammit"-type comments, I see
I made a boo-boo when quoting which failures were regressions: the new FAILs
from gcc.dg/torture/stackalign (13 of them) snuck in.  (To bystanders, the
c165240 "floodgated" check_effective_target_automatic_stack_alignment, but it's
only used in g++.dg/torture/stackalign and gcc.dg/torture/stackalign, outside
of gcc.target/i386/stackalign).

Here's the list of the 62 true regressions (by definition of
contrib/regression/btest-gcc.sh) caused by r165240(+c165382) for cris-elf:

g++.sum tmpdir-g++.dg-struct-layout-1/t001
g++.sum tmpdir-g++.dg-struct-layout-1/t002
g++.sum tmpdir-g++.dg-struct-layout-1/t003
g++.sum tmpdir-g++.dg-struct-layout-1/t004
g++.sum tmpdir-g++.dg-struct-layout-1/t005
g++.sum tmpdir-g++.dg-struct-layout-1/t006
g++.sum tmpdir-g++.dg-struct-layout-1/t007
g++.sum tmpdir-g++.dg-struct-layout-1/t008
g++.sum tmpdir-g++.dg-struct-layout-1/t009
g++.sum tmpdir-g++.dg-struct-layout-1/t010
g++.sum tmpdir-g++.dg-struct-layout-1/t011
g++.sum tmpdir-g++.dg-struct-layout-1/t012
g++.sum tmpdir-g++.dg-struct-layout-1/t013
g++.sum tmpdir-g++.dg-struct-layout-1/t014
g++.sum tmpdir-g++.dg-struct-layout-1/t015
g++.sum tmpdir-g++.dg-struct-layout-1/t016
g++.sum tmpdir-g++.dg-struct-layout-1/t017
g++.sum tmpdir-g++.dg-struct-layout-1/t018
g++.sum tmpdir-g++.dg-struct-layout-1/t019
g++.sum tmpdir-g++.dg-struct-layout-1/t020
g++.sum tmpdir-g++.dg-struct-layout-1/t021
g++.sum tmpdir-g++.dg-struct-layout-1/t022
g++.sum tmpdir-g++.dg-struct-layout-1/t023
g++.sum tmpdir-g++.dg-struct-layout-1/t024
g++.sum tmpdir-g++.dg-struct-layout-1/t025
g++.sum tmpdir-g++.dg-struct-layout-1/t026
g++.sum tmpdir-g++.dg-struct-layout-1/t027
g++.sum tmpdir-g++.dg-struct-layout-1/t028
g++.sum tmpdir-g++.dg-struct-layout-1/t029
g++.sum tmpdir-g++.dg-struct-layout-1/t030
gcc.sum gcc.c-torture/execute/20060420-1.c
gcc.sum gcc.c-torture/execute/simd-5.c
gcc.sum gcc.dg/compat/vector-1
gcc.sum gcc.dg/compat/vector-2
gcc.sum tmpdir-gcc.dg-struct-layout-1/t001
gcc.sum tmpdir-gcc.dg-struct-layout-1/t002
gcc.sum tmpdir-gcc.dg-struct-layout-1/t003
gcc.sum tmpdir-gcc.dg-struct-layout-1/t004
gcc.sum tmpdir-gcc.dg-struct-layout-1/t005
gcc.sum tmpdir-gcc.dg-struct-layout-1/t006
gcc.sum tmpdir-gcc.dg-struct-layout-1/t007
gcc.sum tmpdir-gcc.dg-struct-layout-1/t008
gcc.sum tmpdir-gcc.dg-struct-layout-1/t009
gcc.sum tmpdir-gcc.dg-struct-layout-1/t010
gcc.sum tmpdir-gcc.dg-struct-layout-1/t011
gcc.sum tmpdir-gcc.dg-struct-layout-1/t012
gcc.sum tmpdir-gcc.dg-struct-layout-1/t013
gcc.sum tmpdir-gcc.dg-struct-layout-1/t014
gcc.sum tmpdir-gcc.dg-struct-layout-1/t015
gcc.sum tmpdir-gcc.dg-struct-layout-1/t016
gcc.sum tmpdir-gcc.dg-struct-layout-1/t017
gcc.sum tmpdir-gcc.dg-struct-layout-1/t018
gcc.sum tmpdir-gcc.dg-struct-layout-1/t019
gcc.sum tmpdir-gcc.dg-struct-layout-1/t020
gcc.sum tmpdir-gcc.dg-struct-layout-1/t021
gcc.sum tmpdir-gcc.dg-struct-layout-1/t022
gcc.sum tmpdir-gcc.dg-struct-layout-1/t023
gcc.sum tmpdir-gcc.dg-struct-layout-1/t024
gcc.sum tmpdir-gcc.dg-struct-layout-1/t025
gcc.sum tmpdir-gcc.dg-struct-layout-1/t026
gcc.sum tmpdir-gcc.dg-struct-layout-1/t027
gcc.sum tmpdir-gcc.dg-struct-layout-1/t028

The initial description is missing the c++ part of the log, but I don't think
that adds anything interesting.  The important text for the C tests is already
there; just the gcc.dg/torture/stackalign results too.



More information about the Gcc-bugs mailing list