public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648
[not found] <bug-30267-4@http.gcc.gnu.org/bugzilla/>
@ 2021-06-08 8:47 ` pinskia at gcc dot gnu.org
2021-06-08 11:09 ` bruno at clisp dot org
1 sibling, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-06-08 8:47 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30267
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |7.0
Resolution|--- |FIXED
Status|NEW |RESOLVED
Known to fail| |4.8.5
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Fixed with at least GCC 7.
It was still broken in GCC 4.8.5 though.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648
[not found] <bug-30267-4@http.gcc.gnu.org/bugzilla/>
2021-06-08 8:47 ` [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648 pinskia at gcc dot gnu.org
@ 2021-06-08 11:09 ` bruno at clisp dot org
1 sibling, 0 replies; 4+ messages in thread
From: bruno at clisp dot org @ 2021-06-08 11:09 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30267
Bruno Haible <bruno at clisp dot org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to work| |10.3.0, 11.1.0, 6.5.0,
| |7.5.0, 8.4.0, 9.3.0
Known to fail| |4.9.4, 5.5.0
--- Comment #4 from Bruno Haible <bruno at clisp dot org> ---
(In reply to Andrew Pinski from comment #3)
> Fixed with at least GCC 7.
> It was still broken in GCC 4.8.5 though.
Indeed. Here's the status with GCC versions since 4.0.x:
4.0.4 optimized
4.1.2 missed
4.2.4 missed
4.3.6 missed
4.4.7 missed
4.5.4 missed
4.6.4 missed
4.7.3 missed
4.8.5 missed
4.9.4 missed
5.5.0 missed
6.5.0 optimized
7.5.0 optimized
8.4.0 optimized
9.3.0 optimized
10.3.0 optimized
11.1.0 optimized
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648
2006-12-20 14:35 [Bug c/30267] New: missed optimization due to bad range propagation without -fwrapv bruno at clisp dot org
2006-12-27 16:48 ` [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648 rguenth at gcc dot gnu dot org
@ 2006-12-27 17:01 ` pinskia at gcc dot gnu dot org
1 sibling, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-12-27 17:01 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from pinskia at gcc dot gnu dot org 2006-12-27 17:01 -------
(In reply to comment #1)
> Note this is actually wrong-code.
No, it is not.
In notneg, if x is -2147483647-1, it is obviously, we have an overflow as
-(-2147483647-1) is overflowed.
In negnot, if x is 2147483647, then ~ 2147483647 == -2147483647-1, and then we
have an overflow.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30267
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648
2006-12-20 14:35 [Bug c/30267] New: missed optimization due to bad range propagation without -fwrapv bruno at clisp dot org
@ 2006-12-27 16:48 ` rguenth at gcc dot gnu dot org
2006-12-27 17:01 ` pinskia at gcc dot gnu dot org
1 sibling, 0 replies; 4+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2006-12-27 16:48 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from rguenth at gcc dot gnu dot org 2006-12-27 16:48 -------
This is folded to
;; Function notneg (notneg)
;; enabled by -tree-original
{
return x != -2147483648;
}
;; Function negnot (negnot)
;; enabled by -tree-original
{
return x != 2147483647;
}
via
/* Convert - (~A) to A + 1. */
if (INTEGRAL_TYPE_P (type) && TREE_CODE (arg0) == BIT_NOT_EXPR)
return fold_build2 (PLUS_EXPR, type, TREE_OPERAND (arg0, 0),
build_int_cst (type, 1));
and
/* Convert ~ (-A) to A - 1. */
else if (INTEGRAL_TYPE_P (type) && TREE_CODE (arg0) == NEGATE_EXPR)
return fold_build2 (MINUS_EXPR, type, TREE_OPERAND (arg0, 0),
build_int_cst (type, 1));
and
/* Transform comparisons of the form X +- C1 CMP C2 to X CMP C2 +- C1.
*/ if ((TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR)
&& (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
&& !TREE_OVERFLOW (TREE_OPERAND (arg0, 1))
&& !TYPE_UNSIGNED (TREE_TYPE (arg1))
&& !(flag_wrapv || flag_trapv))
&& (TREE_CODE (arg1) == INTEGER_CST
&& !TREE_OVERFLOW (arg1)))
{
tree const1 = TREE_OPERAND (arg0, 1);
tree const2 = arg1;
tree variable = TREE_OPERAND (arg0, 0);
tree lhs;
int lhs_add;
lhs_add = TREE_CODE (arg0) != PLUS_EXPR;
lhs = fold_build2 (lhs_add ? PLUS_EXPR : MINUS_EXPR,
TREE_TYPE (arg1), const2, const1);
if (TREE_CODE (lhs) == TREE_CODE (arg1)
&& (TREE_CODE (lhs) != INTEGER_CST
|| !TREE_OVERFLOW (lhs)))
return fold_build2 (code, type, variable, lhs);
}
(citing from the 4.1 branch)
Note this is actually wrong-code.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rguenth at gcc dot gnu dot
| |org
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Keywords| |wrong-code
Known to fail| |4.1.2 4.3.0
Known to work| |4.0.3
Last reconfirmed|0000-00-00 00:00:00 |2006-12-27 16:48:37
date| |
Summary|missed optimization due to |folding (~ -x) >= (-
|bad range propagation |2147483647-1) to x != -
|without -fwrapv |2147483648
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30267
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-06-08 11:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <bug-30267-4@http.gcc.gnu.org/bugzilla/>
2021-06-08 8:47 ` [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648 pinskia at gcc dot gnu.org
2021-06-08 11:09 ` bruno at clisp dot org
2006-12-20 14:35 [Bug c/30267] New: missed optimization due to bad range propagation without -fwrapv bruno at clisp dot org
2006-12-27 16:48 ` [Bug middle-end/30267] folding (~ -x) >= (-2147483647-1) to x != -2147483648 rguenth at gcc dot gnu dot org
2006-12-27 17:01 ` pinskia at gcc dot gnu dot 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).