public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el
@ 2015-09-27 21:49 aurelien at aurel32 dot net
2015-09-27 23:26 ` [Bug target/67736] " pinskia at gcc dot gnu.org
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: aurelien at aurel32 dot net @ 2015-09-27 21:49 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67736
Bug ID: 67736
Summary: Wrong optimization with -fexpensive-optimizations on
mips64el
Product: gcc
Version: 5.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: aurelien at aurel32 dot net
Target Milestone: ---
Host: mips64el-unknown-linux-gnu
Target: mips64el-unknown-linux-gnu
Build: mips64el-unknown-linux-gnu
The following code is wrongly compiled on a mips64el target when using
-fexpensive-optimizations:
#include <inttypes.h>
#include <stdio.h>
int compare(uint64_t state, uint32_t *last, uint8_t buf)
{
if (*last == ((state | buf) & 0xFFFFFFFF)) {
printf("B %"PRIx64" %"PRIx32"\n", state, *last);
return 0;
}
return 1;
}
It produces the following code:
00000000000009a0 <compare>:
9a0: 30c200ff andi v0,a2,0xff
9a4: 8ca60000 lw a2,0(a1)
9a8: 00441025 or v0,v0,a0
9ac: 10460004 beq v0,a2,9c0 <compare+0x20>
9b0: 24020001 li v0,1
9b4: 03e00008 jr ra
9b8: 00000000 nop
9bc: 00000000 nop
...
Note how the comparison is done incorrectly, dropping the & 0xFFFFFFFF and
sign-extending the value when loading *last.
Using -fno-expensive-optimizations produces the following valid code:
00000000000009a0 <compare>:
9a0: 30c200ff andi v0,a2,0xff
9a4: 8ca60000 lw a2,0(a1)
9a8: 00441025 or v0,v0,a0
9ac: 7cc3f803 dext v1,a2,0x0,0x20
9b0: 7c42f803 dext v0,v0,0x0,0x20
9b4: 10620004 beq v1,v0,9c8 <compare+0x28>
9b8: 24020001 li v0,1
9bc: 03e00008 jr ra
9c0: 00000000 nop
9c4: 00000000 nop
9c8: 67bdfff0 daddiu sp
Here both values are zero extended to 32-bit before the comparison.
Alternatively, when removing the line with the printf, GCC also produces
correct code, which is more optimized:
0000000000000960 <compare>:
960: 30c600ff andi a2,a2,0xff
964: 00c42025 or a0,a2,a0
968: 9ca20000 lwu v0,0(a1)
96c: 7c86f803 dext a2,a0,0x0,0x20
970: 00c21026 xor v0,a2,v0
974: 03e00008 jr ra
978: 0002102b sltu v0,zero,v0
97c: 00000000 nop
Note that at least gcc 4.8.5, 4.9.3 and 5.2.1 are affected.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/67736] Wrong optimization with -fexpensive-optimizations on mips64el
2015-09-27 21:49 [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el aurelien at aurel32 dot net
@ 2015-09-27 23:26 ` pinskia at gcc dot gnu.org
2015-09-29 10:39 ` [Bug rtl-optimization/67736] " aurelien at aurel32 dot net
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2015-09-27 23:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67736
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Can you try the patch in
https://gcc.gnu.org/ml/gcc-patches/2012-05/msg00401.html ?
I never got around to updating it for the comments.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug rtl-optimization/67736] Wrong optimization with -fexpensive-optimizations on mips64el
2015-09-27 21:49 [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el aurelien at aurel32 dot net
2015-09-27 23:26 ` [Bug target/67736] " pinskia at gcc dot gnu.org
@ 2015-09-29 10:39 ` aurelien at aurel32 dot net
2015-09-29 12:09 ` aurelien at aurel32 dot net
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: aurelien at aurel32 dot net @ 2015-09-29 10:39 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67736
--- Comment #2 from Aurelien Jarno <aurelien at aurel32 dot net> ---
Thanks for the patch. I have just tested it, and it indeed fixes the issue from
the testcase. I am currently trying to build ffmpeg, from which the testcase
has been extracted to see if all the issues are really fixed.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug rtl-optimization/67736] Wrong optimization with -fexpensive-optimizations on mips64el
2015-09-27 21:49 [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el aurelien at aurel32 dot net
2015-09-27 23:26 ` [Bug target/67736] " pinskia at gcc dot gnu.org
2015-09-29 10:39 ` [Bug rtl-optimization/67736] " aurelien at aurel32 dot net
@ 2015-09-29 12:09 ` aurelien at aurel32 dot net
2015-10-23 15:56 ` sje at gcc dot gnu.org
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: aurelien at aurel32 dot net @ 2015-09-29 12:09 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67736
--- Comment #3 from Aurelien Jarno <aurelien at aurel32 dot net> ---
The ffmpeg testsuite is successful on mips64el-linux-gnu with this patch
applied.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug rtl-optimization/67736] Wrong optimization with -fexpensive-optimizations on mips64el
2015-09-27 21:49 [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el aurelien at aurel32 dot net
` (2 preceding siblings ...)
2015-09-29 12:09 ` aurelien at aurel32 dot net
@ 2015-10-23 15:56 ` sje at gcc dot gnu.org
2015-10-23 15:59 ` sje at gcc dot gnu.org
2023-07-07 4:32 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: sje at gcc dot gnu.org @ 2015-10-23 15:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67736
--- Comment #4 from Steve Ellcey <sje at gcc dot gnu.org> ---
Author: sje
Date: Fri Oct 23 15:56:15 2015
New Revision: 229259
URL: https://gcc.gnu.org/viewcvs?rev=229259&root=gcc&view=rev
Log:
2015-10-23 Steve Ellcey <sellcey@imgtec.com>
Andrew Pinski <apinski@cavium.com>
PR rtl-optimization/67736
* combine.c (simplify_comparison): Use gen_lowpart_or_truncate instead
of gen_lowpart.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/combine.c
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug rtl-optimization/67736] Wrong optimization with -fexpensive-optimizations on mips64el
2015-09-27 21:49 [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el aurelien at aurel32 dot net
` (3 preceding siblings ...)
2015-10-23 15:56 ` sje at gcc dot gnu.org
@ 2015-10-23 15:59 ` sje at gcc dot gnu.org
2023-07-07 4:32 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: sje at gcc dot gnu.org @ 2015-10-23 15:59 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67736
--- Comment #5 from Steve Ellcey <sje at gcc dot gnu.org> ---
Author: sje
Date: Fri Oct 23 15:58:33 2015
New Revision: 229260
URL: https://gcc.gnu.org/viewcvs?rev=229260&root=gcc&view=rev
Log:
2015-10-23 Steve Ellcey <sellcey@imgtec.com>
Andrew Pinski <apinski@cavium.com>
PR rtl-optimization/67736
* gcc.dg/torture/pr67736.c: New test.
* gcc.dg/combine-subregs.c: New test.
Added:
trunk/gcc/testsuite/gcc.dg/combine-subregs.c
trunk/gcc/testsuite/gcc.dg/torture/pr67736.c
Modified:
trunk/gcc/testsuite/ChangeLog
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug rtl-optimization/67736] Wrong optimization with -fexpensive-optimizations on mips64el
2015-09-27 21:49 [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el aurelien at aurel32 dot net
` (4 preceding siblings ...)
2015-10-23 15:59 ` sje at gcc dot gnu.org
@ 2023-07-07 4:32 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-07-07 4:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67736
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |5.3
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-07-07 4:32 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-27 21:49 [Bug target/67736] New: Wrong optimization with -fexpensive-optimizations on mips64el aurelien at aurel32 dot net
2015-09-27 23:26 ` [Bug target/67736] " pinskia at gcc dot gnu.org
2015-09-29 10:39 ` [Bug rtl-optimization/67736] " aurelien at aurel32 dot net
2015-09-29 12:09 ` aurelien at aurel32 dot net
2015-10-23 15:56 ` sje at gcc dot gnu.org
2015-10-23 15:59 ` sje at gcc dot gnu.org
2023-07-07 4:32 ` pinskia at gcc dot gnu.org
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).