public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign
@ 2021-06-10 21:13 zsojka at seznam dot cz
2021-06-11 8:03 ` [Bug target/101023] " rguenth at gcc dot gnu.org
` (11 more replies)
0 siblings, 12 replies; 13+ messages in thread
From: zsojka at seznam dot cz @ 2021-06-10 21:13 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
Bug ID: 101023
Summary: [11/12 Regression] wrong code with -mstackrealign
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: zsojka at seznam dot cz
Target Milestone: ---
Host: x86_64-pc-linux-gnu
Target: x86_64-pc-linux-gnu
Created attachment 50981
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50981&action=edit
auto-reduced testcase (from OpenTTD sources)
Compiler output:
$ x86_64-pc-linux-gnu-g++ -O2 -mtune=opteron -mstackrealign
--param=hot-bb-frequency-fraction=1 testcase.C -S
The offending code is:
.L8:
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %r12, -8(%rbp)
pushq %rax
the "push" overwrites r12 stored just one instruction above; when returning:
movq -8(%rbp), %r12
xorl %eax, %eax
leave
.cfi_def_cfa 7, 8
ret
the wrong data is restored to r12
I wasn't able yet to generate an executable testcase, but I can try to if
needed. (it shouldn't be that hard, just r12 needs to be used by the caller
during the call)
$ x86_64-pc-linux-gnu-g++ -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-amd64/bin/x86_64-pc-linux-gnu-g++
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r12-1366-20210610095751-g6fcba9ef23e-checking-yes-rtl-df-extra-nobootstrap-amd64/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--disable-bootstrap --with-cloog --with-ppl --with-isl
--build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu
--target=x86_64-pc-linux-gnu --with-ld=/usr/bin/x86_64-pc-linux-gnu-ld
--with-as=/usr/bin/x86_64-pc-linux-gnu-as --disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-r12-1366-20210610095751-g6fcba9ef23e-checking-yes-rtl-df-extra-nobootstrap-amd64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.0 20210610 (experimental) (GCC)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
@ 2021-06-11 8:03 ` rguenth at gcc dot gnu.org
2021-06-11 8:19 ` ubizjak at gmail dot com
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-06-11 8:03 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |11.2
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
2021-06-11 8:03 ` [Bug target/101023] " rguenth at gcc dot gnu.org
@ 2021-06-11 8:19 ` ubizjak at gmail dot com
2021-06-11 12:25 ` hjl.tools at gmail dot com
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: ubizjak at gmail dot com @ 2021-06-11 8:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
Uroš Bizjak <ubizjak at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |hjl.tools at gmail dot com
--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
CC added.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
2021-06-11 8:03 ` [Bug target/101023] " rguenth at gcc dot gnu.org
2021-06-11 8:19 ` ubizjak at gmail dot com
@ 2021-06-11 12:25 ` hjl.tools at gmail dot com
2021-06-11 12:56 ` jakub at gcc dot gnu.org
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: hjl.tools at gmail dot com @ 2021-06-11 12:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Last reconfirmed| |2021-06-11
Status|UNCONFIRMED |WAITING
--- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to Zdenek Sojka from comment #0)
> Created attachment 50981 [details]
> auto-reduced testcase (from OpenTTD sources)
>
> Compiler output:
> $ x86_64-pc-linux-gnu-g++ -O2 -mtune=opteron -mstackrealign
> --param=hot-bb-frequency-fraction=1 testcase.C -S
>
> The offending code is:
> .L8:
> pushq %rbp
> .cfi_def_cfa_offset 16
> .cfi_offset 6, -16
> movq %rsp, %rbp
> .cfi_def_cfa_register 6
> movq %r12, -8(%rbp)
> pushq %rax
>
> the "push" overwrites r12 stored just one instruction above; when returning:
> movq -8(%rbp), %r12
> xorl %eax, %eax
> leave
> .cfi_def_cfa 7, 8
> ret
>
> the wrong data is restored to r12
>
> I wasn't able yet to generate an executable testcase, but I can try to if
> needed. (it shouldn't be that hard, just r12 needs to be used by the caller
> during the call)
Please create a run-time testcase.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (2 preceding siblings ...)
2021-06-11 12:25 ` hjl.tools at gmail dot com
@ 2021-06-11 12:56 ` jakub at gcc dot gnu.org
2021-06-11 12:56 ` jakub at gcc dot gnu.org
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-06-11 12:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
CC| |jakub at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Here it is:
// PR target/101023
// { dg-do run }
// { dg-options "-O2 -mtune=opteron -mstackrealign
--param=hot-bb-frequency-fraction=1" }
struct S {
__attribute__((noipa)) int m1 ();
__attribute__((noipa)) void m2 ();
};
struct T {
__attribute__((noipa)) virtual S m3 ();
};
struct U : T {
int u;
__attribute__((noipa)) U (int);
};
int *a;
S *b;
int c;
int
S::m1 ()
{
return 0;
}
void
S::m2 ()
{
}
S
T::m3 ()
{
return S ();
}
U::U (int) : u (4)
{
}
__attribute__((noipa)) int
foo ()
{
if (a)
return 0;
U d(c);
S *e = b;
e->m2 ();
return e->m1();
}
int
main ()
{
register int r12 __asm ("r12") = 1;
register int rax __asm ("rax") = 2;
asm volatile ("" : "+r" (r12), "+r" (rax));
foo ();
asm volatile ("" : "+r" (r12));
if (r12 != 1)
__builtin_abort ();
}
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (3 preceding siblings ...)
2021-06-11 12:56 ` jakub at gcc dot gnu.org
@ 2021-06-11 12:56 ` jakub at gcc dot gnu.org
2021-06-11 13:09 ` zsojka at seznam dot cz
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-06-11 12:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
// { dg-do run { target lp64 } }
(or ! ia32 if you want).
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (4 preceding siblings ...)
2021-06-11 12:56 ` jakub at gcc dot gnu.org
@ 2021-06-11 13:09 ` zsojka at seznam dot cz
2021-06-11 14:37 ` hjl.tools at gmail dot com
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: zsojka at seznam dot cz @ 2021-06-11 13:09 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
--- Comment #5 from Zdenek Sojka <zsojka at seznam dot cz> ---
(In reply to Jakub Jelinek from comment #3)
> Here it is:
>
Thank you, I probably wouldn't be able to get back to this until next week.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (5 preceding siblings ...)
2021-06-11 13:09 ` zsojka at seznam dot cz
@ 2021-06-11 14:37 ` hjl.tools at gmail dot com
2021-06-11 20:49 ` hjl.tools at gmail dot com
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: hjl.tools at gmail dot com @ 2021-06-11 14:37 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |hjl.tools at gmail dot com
--- Comment #6 from H.J. Lu <hjl.tools at gmail dot com> ---
Created attachment 50986
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50986&action=edit
A patch
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (6 preceding siblings ...)
2021-06-11 14:37 ` hjl.tools at gmail dot com
@ 2021-06-11 20:49 ` hjl.tools at gmail dot com
2021-06-13 12:16 ` cvs-commit at gcc dot gnu.org
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: hjl.tools at gmail dot com @ 2021-06-11 20:49 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |patch
--- Comment #7 from H.J. Lu <hjl.tools at gmail dot com> ---
A patch is posted at
https://gcc.gnu.org/pipermail/gcc-patches/2021-June/572596.html
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (7 preceding siblings ...)
2021-06-11 20:49 ` hjl.tools at gmail dot com
@ 2021-06-13 12:16 ` cvs-commit at gcc dot gnu.org
2021-06-13 13:16 ` hjl.tools at gmail dot com
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-06-13 12:16 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by H.J. Lu <hjl@gcc.gnu.org>:
https://gcc.gnu.org/g:3f04e3782536ad2f9cfbb8cfe6630e9f9dd8af4c
commit r12-1409-g3f04e3782536ad2f9cfbb8cfe6630e9f9dd8af4c
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Fri Jun 11 07:31:29 2021 -0700
x86: Replace ix86_red_zone_size with ix86_red_zone_used
Add red_zone_used to machine_function to track if red zone is used.
When expanding function prologue, set red_zone_used to true if red
zone is used.
gcc/
PR target/101023
* config/i386/i386.c (ix86_expand_prologue): Set red_zone_used
to true if red zone is used.
(ix86_output_indirect_jmp): Replace ix86_red_zone_size with
ix86_red_zone_used.
* config/i386/i386.h (machine_function): Add red_zone_used.
(ix86_red_zone_size): Removed.
(ix86_red_zone_used): New.
* config/i386/i386.md (peephole2 patterns): Replace
ix86_red_zone_size with ix86_red_zone_used.
gcc/testsuite/
PR target/101023
* g++.target/i386/pr101023a.C: New test.
* g++.target/i386/pr101023b.C: Likewise.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (8 preceding siblings ...)
2021-06-13 12:16 ` cvs-commit at gcc dot gnu.org
@ 2021-06-13 13:16 ` hjl.tools at gmail dot com
2021-07-15 12:43 ` cvs-commit at gcc dot gnu.org
2021-07-15 12:43 ` hjl.tools at gmail dot com
11 siblings, 0 replies; 13+ messages in thread
From: hjl.tools at gmail dot com @ 2021-06-13 13:16 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
--- Comment #9 from H.J. Lu <hjl.tools at gmail dot com> ---
This bug is exposed by r11-508.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (9 preceding siblings ...)
2021-06-13 13:16 ` hjl.tools at gmail dot com
@ 2021-07-15 12:43 ` cvs-commit at gcc dot gnu.org
2021-07-15 12:43 ` hjl.tools at gmail dot com
11 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-07-15 12:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-11 branch has been updated by H.J. Lu <hjl@gcc.gnu.org>:
https://gcc.gnu.org/g:ba3b30cf70990f4aadb393b64b76ff490bb0bd0f
commit r11-8755-gba3b30cf70990f4aadb393b64b76ff490bb0bd0f
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Fri Jun 11 07:31:29 2021 -0700
x86: Replace ix86_red_zone_size with ix86_red_zone_used
Add red_zone_used to machine_function to track if red zone is used.
When expanding function prologue, set red_zone_used to true if red
zone is used.
gcc/
PR target/101023
* config/i386/i386.c (ix86_expand_prologue): Set red_zone_used
to true if red zone is used.
(ix86_output_indirect_jmp): Replace ix86_red_zone_size with
ix86_red_zone_used.
* config/i386/i386.h (machine_function): Add red_zone_used.
(ix86_red_zone_size): Removed.
(ix86_red_zone_used): New.
* config/i386/i386.md (peephole2 patterns): Replace
ix86_red_zone_size with ix86_red_zone_used.
gcc/testsuite/
PR target/101023
* g++.target/i386/pr101023a.C: New test.
* g++.target/i386/pr101023b.C: Likewise.
(cherry picked from commit 3f04e3782536ad2f9cfbb8cfe6630e9f9dd8af4c)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug target/101023] [11/12 Regression] wrong code with -mstackrealign
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
` (10 preceding siblings ...)
2021-07-15 12:43 ` cvs-commit at gcc dot gnu.org
@ 2021-07-15 12:43 ` hjl.tools at gmail dot com
11 siblings, 0 replies; 13+ messages in thread
From: hjl.tools at gmail dot com @ 2021-07-15 12:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|NEW |RESOLVED
--- Comment #11 from H.J. Lu <hjl.tools at gmail dot com> ---
Fixed for GCC 12 and 11.2.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2021-07-15 12:43 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-10 21:13 [Bug target/101023] New: [11/12 Regression] wrong code with -mstackrealign zsojka at seznam dot cz
2021-06-11 8:03 ` [Bug target/101023] " rguenth at gcc dot gnu.org
2021-06-11 8:19 ` ubizjak at gmail dot com
2021-06-11 12:25 ` hjl.tools at gmail dot com
2021-06-11 12:56 ` jakub at gcc dot gnu.org
2021-06-11 12:56 ` jakub at gcc dot gnu.org
2021-06-11 13:09 ` zsojka at seznam dot cz
2021-06-11 14:37 ` hjl.tools at gmail dot com
2021-06-11 20:49 ` hjl.tools at gmail dot com
2021-06-13 12:16 ` cvs-commit at gcc dot gnu.org
2021-06-13 13:16 ` hjl.tools at gmail dot com
2021-07-15 12:43 ` cvs-commit at gcc dot gnu.org
2021-07-15 12:43 ` hjl.tools at gmail dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).