public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump
@ 2020-12-09 10:07 denis.campredon at gmail dot com
2020-12-09 11:15 ` [Bug rtl-optimization/98212] " crazylht at gmail dot com
` (12 more replies)
0 siblings, 13 replies; 14+ messages in thread
From: denis.campredon at gmail dot com @ 2020-12-09 10:07 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Bug ID: 98212
Summary: X86 unoptimal code for float equallity comparison
followed by jump
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: denis.campredon at gmail dot com
Target Milestone: ---
For f1 code an unnecessary `comiss` instruction is used, the parity flag is
still set after the `jp` instruction.
For f2, I'm not sure if it's the optimal way to do that.
The same problems appear for `float`, `double` and `long double`
------
void f();
void f1(float a, float b) {
if (a != b)
f();
}
void f2(float a, float b) {
if (a == b)
f();
}
------
f1(float, float):
ucomiss xmm0, xmm1
jp .L4
comiss xmm0, xmm1
jne .L4
ret
.L4:
jmp f()
f2(float, float):
ucomiss xmm0, xmm1
jnp .L11
.L7:
ret
.L11:
jne .L7
jmp f()
------
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
@ 2020-12-09 11:15 ` crazylht at gmail dot com
2020-12-09 12:46 ` [Bug rtl-optimization/98212] [10/11 Regression] " rguenth at gcc dot gnu.org
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: crazylht at gmail dot com @ 2020-12-09 11:15 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Hongtao.liu <crazylht at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |crazylht at gmail dot com
--- Comment #1 from Hongtao.liu <crazylht at gmail dot com> ---
It seems a regression in GCC10. GCC9 is ok, https://godbolt.org/
GCC 9:
f1(float, float):
ucomiss xmm0, xmm1
jp .L4
jne .L4
ret
.L4:
jmp f()
f2(float, float):
ucomiss xmm0, xmm1
jnp .L11
.L7:
ret
.L11:
jne .L7
jmp f()
GCC10:
f1(float, float):
ucomiss %xmm1, %xmm0
jp .L4
comiss %xmm1, %xmm0
jne .L4
ret
.L4:
jmp f()
f2(float, float):
ucomiss %xmm1, %xmm0
jnp .L11
.L7:
ret
.L11:
jne .L7
jmp f()
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
2020-12-09 11:15 ` [Bug rtl-optimization/98212] " crazylht at gmail dot com
@ 2020-12-09 12:46 ` rguenth at gcc dot gnu.org
2020-12-09 12:50 ` ubizjak at gmail dot com
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2020-12-09 12:46 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|X86 unoptimal code for |[10/11 Regression] X86
|float equallity comparison |unoptimal code for float
|followed by jump |equallity comparison
| |followed by jump
Target| |x86_64-*-* i?86-*-*
Target Milestone|--- |10.3
Host|x86 |
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
2020-12-09 11:15 ` [Bug rtl-optimization/98212] " crazylht at gmail dot com
2020-12-09 12:46 ` [Bug rtl-optimization/98212] [10/11 Regression] " rguenth at gcc dot gnu.org
@ 2020-12-09 12:50 ` ubizjak at gmail dot com
2020-12-09 14:43 ` jakub at gcc dot gnu.org
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: ubizjak at gmail dot com @ 2020-12-09 12:50 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> ---
f1 is currently unoptimal by design, the compiler is unable to merge trapping
and non-trapping instructions. There is already a PR for that.
f2 is not optimal. The conditional jump to the unconditional jump can be
merged, but the compiler currently does not perform that optimization.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (2 preceding siblings ...)
2020-12-09 12:50 ` ubizjak at gmail dot com
@ 2020-12-09 14:43 ` jakub at gcc dot gnu.org
2020-12-09 16:54 ` jakub at gcc dot gnu.org
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-12-09 14:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2020-12-09
Ever confirmed|0 |1
Status|UNCONFIRMED |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 49718
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49718&action=edit
gcc11-pr98212.patch
Untested attempt to fix f1.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (3 preceding siblings ...)
2020-12-09 14:43 ` jakub at gcc dot gnu.org
@ 2020-12-09 16:54 ` jakub at gcc dot gnu.org
2020-12-09 19:10 ` jakub at gcc dot gnu.org
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-12-09 16:54 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
As for f2, only the case of a == b when the jump is predicted unlikely looks
weird, e.g. take:
void foo (void);
void
bar (float a, float b)
{
if (__builtin_expect (a != b, 1))
foo ();
}
void
baz (float a, float b)
{
if (__builtin_expect (a == b, 1))
foo ();
}
void
qux (float a, float b)
{
if (__builtin_expect (a != b, 0))
foo ();
}
void
corge (float a, float b)
{
if (__builtin_expect (a == b, 0))
foo ();
}
bar: ucomiss %xmm1, %xmm0
jp .L4
je .L1
.L4: jmp foo
.L1: ret
baz: ucomiss %xmm1, %xmm0
jp .L6
jne .L6
jmp foo
.L6: ret
qux: ucomiss %xmm1, %xmm0
jp .L13
jne .L13
ret
.L13: jmp foo
corge: ucomiss %xmm1, %xmm0
jnp .L18
.L14: ret
.L18: jne .L14
jmp foo
I guess I need to debug the branch probabilities in that case, we should
certainly predict that operands are most of the time non-NaN and thus that PF
bit will not be set in 99% of cases or so.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (4 preceding siblings ...)
2020-12-09 16:54 ` jakub at gcc dot gnu.org
@ 2020-12-09 19:10 ` jakub at gcc dot gnu.org
2020-12-09 19:43 ` jakub at gcc dot gnu.org
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-12-09 19:10 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |hubicka at gcc dot gnu.org
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, for the corge case, do_compare_rtx_and_jump is called with EQ,
if_false_label non-NULL, if_true_label NULL (i.e. fall through) and prob of
10%.
The target doesn't support it and so x == y is being split into
x ord y && x u== y.
first_prob is computed as 10.9% and prob 91.74%, it is expanded as
if (x unord y) goto if_false_label; // prob of goto 89.1%
if (x u== y) goto dummy; // prob of goto 91.74%
goto if_false_label;
dummy:;
1133 profile_probability cprob
1134 = profile_probability::guessed_always ();
1135 if (first_code == UNORDERED)
1136 cprob = cprob.apply_scale (1, 100);
1137 else if (first_code == ORDERED)
1138 cprob = cprob.apply_scale (99, 100);
1139 else
1140 cprob = profile_probability::even ();
1141 /* We want to split:
1142 if (x) goto t; // prob;
1143 into
1144 if (a) goto t; // first_prob;
1145 if (b) goto t; // prob;
1146 such that the overall probability of jumping to t
1147 remains the same and first_prob is prob * cprob. */
1148 if (and_them)
...
1151 prob = prob.invert ();
1152 profile_probability first_prob = prob.split
(cprob).invert ();
1153 prob = prob.invert ();
The comment only describes how !and_them looks like, for and_them it is
actually:
if (x) goto t; // prob;
goto f;
into:
if (a) goto f; // 1 - first_prob;
if (b) goto t; // prob;
goto f;
(at least for the case where we have both f and t).
prob.split is documented as:
Split *THIS (ORIG) probability into 2 probabilities, such that
the returned one (FIRST) is *THIS * CPROB and *THIS is
adjusted (SECOND) so that FIRST + FIRST.invert () * SECOND
== ORIG. This is useful e.g. when splitting a conditional
branch like:
if (cond)
goto lab; // ORIG probability
into
if (cond1)
goto lab; // FIRST = ORIG * CPROB probability
if (cond2)
goto lab; // SECOND probability
So, if we talk about baz above with prob of jumping to t 90%, the computed
first_prob is 1-((1-90%)*99%), so 90.1%, which means if (op0 unord op1) goto f;
with 8.9% probability.
For corge prob of jumping to t is 10%, the computed first_prob is
1-((1-10%)*99%), so 10.9% which means
if (op0 unord op1) goto f; // with 89.1% probability. NaNs are never that
common!
if (op0 uneq op1) goto t; // with 91.74% probability.
I think the right thing would be to for these < 50% initial prop and ORDERED
first_code would be to use something like:
profile_probability first_prob = prob.split (cprob).invert ();
without the two prob = prob.invert (); around it.
With:
--- gcc/dojump.c.jj 2020-12-09 15:11:17.042888002 +0100
+++ gcc/dojump.c 2020-12-09 20:05:59.535234206 +0100
@@ -1148,9 +1148,15 @@ do_compare_rtx_and_jump (rtx op0, rtx op
if (and_them)
{
rtx_code_label *dest_label;
- prob = prob.invert ();
- profile_probability first_prob = prob.split (cprob).invert
();
- prob = prob.invert ();
+ profile_probability first_prob;
+ if (prob < profile_probability::even ())
+ first_prob = prob.split (cprob).invert ();
+ else
+ {
+ prob = prob.invert ();
+ first_prob = prob.split (cprob).invert ();
+ prob = prob.invert ();
+ }
/* If we only jump if true, just bypass the second jump. */
if (! if_false_label)
{
I get the output I'm looking for, so bar/baz/qux stay the same and corge
becomes:
corge: ucomiss %xmm1, %xmm0
jp .L14
je .L18
.L14: ret
.L18: jmp foo
Honza, what do you think?
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (5 preceding siblings ...)
2020-12-09 19:10 ` jakub at gcc dot gnu.org
@ 2020-12-09 19:43 ` jakub at gcc dot gnu.org
2020-12-10 11:04 ` cvs-commit at gcc dot gnu.org
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-12-09 19:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Or shall it instead do:
--- gcc/dojump.c.jj 2020-12-09 15:11:17.042888002 +0100
+++ gcc/dojump.c 2020-12-09 20:34:13.124398356 +0100
@@ -1148,9 +1148,8 @@ do_compare_rtx_and_jump (rtx op0, rtx op
if (and_them)
{
rtx_code_label *dest_label;
- prob = prob.invert ();
- profile_probability first_prob = prob.split (cprob).invert
();
- prob = prob.invert ();
+ profile_probability first_prob
+ = prob.split (cprob.invert ()).invert ();
/* If we only jump if true, just bypass the second jump. */
if (! if_false_label)
{
? With the rationale that for and_them we basically invert the first condition
because we pass non-NULL false label and NULL true label, so if first_code is
ORDERED and cprob is thus 99% for and_them we will emit UNORDERED and want it
to be very unlikely, while if first_code is UNORDERED and cprob is thus 1% for
and_them we will emit ORDERED and want it to be very likely (though that case
doesn't happen, if first_code is ORDERED, then and_them is always true, if
first_code is UNORDERED, then and_them is always false, plus there is one case
where first_code is neither of them, then cprob is even.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (6 preceding siblings ...)
2020-12-09 19:43 ` jakub at gcc dot gnu.org
@ 2020-12-10 11:04 ` cvs-commit at gcc dot gnu.org
2020-12-10 23:38 ` cvs-commit at gcc dot gnu.org
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-12-10 11:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:680e4202f23ce74f3b26c7f090b9d22a56765554
commit r11-5899-g680e4202f23ce74f3b26c7f090b9d22a56765554
Author: Jakub Jelinek <jakub@redhat.com>
Date: Thu Dec 10 12:03:30 2020 +0100
dojump: Improve float != comparisons on x86 [PR98212]
The x86 backend doesn't have EQ or NE floating point comparisons,
so splits x != y into x unord y || x <> y. The problem with that is
that unord comparison doesn't trap on qNaN operands but LTGT does.
The end effect is that it doesn't trap on qNaN operands, because x unord y
will be true for those and so LTGT will not be performed, but as the
backend
is currently unable to merge signalling and non-signalling comparisons (and
after all, with this exact exception it shouldn't unless the first one is
signalling and the second one is non-signalling) it means we end up with:
ucomiss %xmm1, %xmm0
jp .L4
comiss %xmm1, %xmm0
jne .L4
ret
.p2align 4,,10
.p2align 3
.L4:
xorl %eax, %eax
jmp foo
where the comiss is the signalling comparison, but we already know that
the right flags bits are already computed by the ucomiss insn.
The following patch, if target supports UNEQ comparisons, splits NE
as x unord y || !(x uneq y) instead, which in the end means we end up with
just:
ucomiss %xmm1, %xmm0
jp .L4
jne .L4
ret
.p2align 4,,10
.p2align 3
.L4:
jmp foo
because UNEQ is like UNORDERED non-signalling.
2020-12-10 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/98212
* dojump.c (do_compare_rtx_and_jump): When splitting NE and backend
can do UNEQ, prefer splitting x != y into x unord y || !(x uneq y)
instead of into x unord y || x ltgt y.
* gcc.target/i386/pr98212.c: New test.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10/11 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (7 preceding siblings ...)
2020-12-10 11:04 ` cvs-commit at gcc dot gnu.org
@ 2020-12-10 23:38 ` cvs-commit at gcc dot gnu.org
2020-12-10 23:40 ` [Bug rtl-optimization/98212] [10 " jakub at gcc dot gnu.org
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-12-10 23:38 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:a5c05005499dd323296008fda4f414d8647adf0c
commit r11-5923-ga5c05005499dd323296008fda4f414d8647adf0c
Author: Jakub Jelinek <jakub@redhat.com>
Date: Fri Dec 11 00:36:21 2020 +0100
dojump: Fix up probabilities splitting in dojump.c comparison splitting
[PR98212]
When compiling:
void foo (void);
void bar (float a, float b) { if (__builtin_expect (a != b, 1)) foo (); }
void baz (float a, float b) { if (__builtin_expect (a == b, 1)) foo (); }
void qux (float a, float b) { if (__builtin_expect (a != b, 0)) foo (); }
void corge (float a, float b) { if (__builtin_expect (a == b, 0)) foo (); }
on x86_64, we get (unimportant cruft removed):
bar: ucomiss %xmm1, %xmm0
jp .L4
je .L1
.L4: jmp foo
.L1: ret
baz: ucomiss %xmm1, %xmm0
jp .L6
jne .L6
jmp foo
.L6: ret
qux: ucomiss %xmm1, %xmm0
jp .L13
jne .L13
ret
.L13: jmp foo
corge: ucomiss %xmm1, %xmm0
jnp .L18
.L14: ret
.L18: jne .L14
jmp foo
(note for bar and qux that changed with a patch I've posted earlier today).
This is all reasonable, except the last function, the overall jump to
the tail call is predicted unlikely (10%), so it is good jmp foo isn't on
the straight line path, but NaNs are (or should be) considered very
unlikely
in the programs, so IMHO the right code (and one emitted with the following
patch) is:
corge: ucomiss %xmm1, %xmm0
jp .L14
je .L18
.L14: ret
.L18: jmp foo
Let's discuss the probabilities in the above testcase:
for !and_them it looks all correct, so for
bar we split
if (a != b) goto t; // prob 90%
goto f;
into:
if (a unord b) goto t; // first_prob = prob * cprob = 90% * 1% = 0.9%
if (a ltgt b) goto t; // adjusted prob = (prob - first_prob) / (1 -
first_prob) = (90% - 0.9%) / (1 - 0.9%) = 89.909%
and for qux we split
if (a != b) goto t; // prob 10%
goto f;
into:
if (a unord b) goto t; // first_prob = prob * cprob = 10% * 1% = 0.1%
if (a ltgt b) goto t; // adjusted prob = (prob - first_prob) / (1 -
first_prob) = (10% - 0.1%) / (1 - 0.1%) = 9.910%
Now, the and_them cases should be probability wise exactly the same
if we swap the f and t labels, because baz
if (a == b) goto t; // prob 90%
goto f;
is equivalent to:
if (a != b) goto f; // prob 10%
goto t;
which is in qux. This means we could expand baz as:
if (a unord b) goto f; // 0.1%
if (a ltgt b) goto f; // 9.910%
goto t;
But we don't expand it exactly that way, but instead (as the comment says)
as:
if (a ord b) ; else goto f; // first_prob as probability of ;
if (a uneq b) goto t; // adjusted prob
goto f;
So, first_prob.invert () should be 0.1% and adjusted prob should be
1 - 9.910%.
Thus, the right thing is 4 inverts:
prob = prob.invert (); // baz is equivalent to qux with swap(t, f) and thus
inverted original prob
first_prob = prob.split (cprob.invert ()).invert ();
// cprob.invert because by doing if (cond) ; else goto f; we effectively
invert the condition
// the second invert because first_prob is probability of ; rather than
goto f
prob = prob.invert (); // lastly because adjusted prob we want is
// probability of goto t;, while the one from corresponding !and_them case
// would be if (...) goto f; goto t;
2020-12-11 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/98212
* dojump.c (do_compare_rtx_and_jump): Change computation of
first_prob for and_them. Add comment explaining and_them case.
* gcc.dg/predict-8.c: Adjust expected probability.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (8 preceding siblings ...)
2020-12-10 23:38 ` cvs-commit at gcc dot gnu.org
@ 2020-12-10 23:40 ` jakub at gcc dot gnu.org
2021-04-08 12:02 ` rguenth at gcc dot gnu.org
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-12-10 23:40 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[10/11 Regression] X86 |[10 Regression] X86
|unoptimal code for float |unoptimal code for float
|equallity comparison |equallity comparison
|followed by jump |followed by jump
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Fixed on the trunk.
Not sure about backports, seems too risky to me.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (9 preceding siblings ...)
2020-12-10 23:40 ` [Bug rtl-optimization/98212] [10 " jakub at gcc dot gnu.org
@ 2021-04-08 12:02 ` rguenth at gcc dot gnu.org
2022-06-28 10:42 ` jakub at gcc dot gnu.org
2023-07-07 9:19 ` rguenth at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-04-08 12:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|10.3 |10.4
--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
GCC 10.3 is being released, retargeting bugs to GCC 10.4.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (10 preceding siblings ...)
2021-04-08 12:02 ` rguenth at gcc dot gnu.org
@ 2022-06-28 10:42 ` jakub at gcc dot gnu.org
2023-07-07 9:19 ` rguenth at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: jakub at gcc dot gnu.org @ 2022-06-28 10:42 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|10.4 |10.5
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 10.4 is being released, retargeting bugs to GCC 10.5.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug rtl-optimization/98212] [10 Regression] X86 unoptimal code for float equallity comparison followed by jump
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
` (11 preceding siblings ...)
2022-06-28 10:42 ` jakub at gcc dot gnu.org
@ 2023-07-07 9:19 ` rguenth at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-07-07 9:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98212
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to fail| |10.5.0
Target Milestone|10.5 |11.0
Known to work| |11.1.0
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
Fixed for GCC 11.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2023-07-07 9:19 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-09 10:07 [Bug rtl-optimization/98212] New: X86 unoptimal code for float equallity comparison followed by jump denis.campredon at gmail dot com
2020-12-09 11:15 ` [Bug rtl-optimization/98212] " crazylht at gmail dot com
2020-12-09 12:46 ` [Bug rtl-optimization/98212] [10/11 Regression] " rguenth at gcc dot gnu.org
2020-12-09 12:50 ` ubizjak at gmail dot com
2020-12-09 14:43 ` jakub at gcc dot gnu.org
2020-12-09 16:54 ` jakub at gcc dot gnu.org
2020-12-09 19:10 ` jakub at gcc dot gnu.org
2020-12-09 19:43 ` jakub at gcc dot gnu.org
2020-12-10 11:04 ` cvs-commit at gcc dot gnu.org
2020-12-10 23:38 ` cvs-commit at gcc dot gnu.org
2020-12-10 23:40 ` [Bug rtl-optimization/98212] [10 " jakub at gcc dot gnu.org
2021-04-08 12:02 ` rguenth at gcc dot gnu.org
2022-06-28 10:42 ` jakub at gcc dot gnu.org
2023-07-07 9:19 ` rguenth 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).