public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu
@ 2021-07-05 19:01 zhendong.su at inf dot ethz.ch
  2021-07-05 19:25 ` [Bug tree-optimization/101335] wrong code at -O2 and above pinskia at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: zhendong.su at inf dot ethz.ch @ 2021-07-05 19:01 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101335

            Bug ID: 101335
           Summary: wrong code at -Os and above on x86_64-linux-gnu
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zhendong.su at inf dot ethz.ch
  Target Milestone: ---

[636] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/suz-local/software/local/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/12.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--prefix=/local/suz-local/software/local/gcc-trunk --enable-languages=c,c++
--disable-werror --enable-multilib --with-system-zlib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.0.0 20210705 (experimental) [master revision
59748b71805:2d42892d7cd:8e0b3827bbab6bf92d88d00909ecf8fb43365f39] (GCC) 
[637] % 
[637] % gcctk -O1 small.c; ./a.out
[638] % 
[638] % gcctk -Os small.c
[639] % ./a.out
Aborted
[640] % cat small.c
unsigned a = 0xFFFFFFFF;
int b;
int main()
{
  int c = ~a;
  unsigned d = c - 10;
  if (d > c)
    c = 20;
  b = -(c | 0);
  if (b > -8)
    __builtin_abort ();
  return 0;
}

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug tree-optimization/101335] wrong code at -O2 and above
  2021-07-05 19:01 [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
@ 2021-07-05 19:25 ` pinskia at gcc dot gnu.org
  2021-07-05 19:26 ` [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) pinskia at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-05 19:25 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101335

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-07-05
           Keywords|                            |wrong-code
            Version|unknown                     |12.0
            Summary|wrong code at -Os and above |wrong code at -O2 and above
                   |on x86_64-linux-gnu         |
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---

Also -fwrapv works around the issue, -fsanitize=undefined does not output any
undefined behavior either.

EVRP has the first difference.

Before EVRP we had:
  a.0_1 = aD.1942; // -1u
  _2 = ~a.0_1; //0u
  c_9 = (intD.6) _2; //0
  _3 = c_9 + -10; // -10
  d_10 = (unsigned intD.9) _3; //-10u
  if (_2 < d_10) // 0u < -10u which is true

But EVRP:
Predicate evaluates to: DON'T KNOW
 folding with relation  > 

Predicate evaluates to: 0
EVRP:hybrid: Second query simplifed stmt
Folded into: if (0 != 0)

---- CUT ----
Looks like this value relation is being used but rather it should have just
converted to != rather < with the casts happening:
 Registering value_relation (_3 < c_9) (bb2) at _3 = c_9 + -10;

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned)
  2021-07-05 19:01 [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
  2021-07-05 19:25 ` [Bug tree-optimization/101335] wrong code at -O2 and above pinskia at gcc dot gnu.org
@ 2021-07-05 19:26 ` pinskia at gcc dot gnu.org
  2021-07-06  6:42 ` [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) by r12-1796 rguenth at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-05 19:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101335

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pinskia at gcc dot gnu.org
            Summary|wrong code at -O2 and above |[12 Regression] wrong code
                   |                            |at -O2 and above (casts
                   |                            |between signed and
                   |                            |unsigned)
   Target Milestone|---                         |12.0

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) by r12-1796
  2021-07-05 19:01 [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
  2021-07-05 19:25 ` [Bug tree-optimization/101335] wrong code at -O2 and above pinskia at gcc dot gnu.org
  2021-07-05 19:26 ` [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) pinskia at gcc dot gnu.org
@ 2021-07-06  6:42 ` rguenth at gcc dot gnu.org
  2021-07-12 15:35 ` amacleod at redhat dot com
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-07-06  6:42 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101335

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) by r12-1796
  2021-07-05 19:01 [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (2 preceding siblings ...)
  2021-07-06  6:42 ` [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) by r12-1796 rguenth at gcc dot gnu.org
@ 2021-07-12 15:35 ` amacleod at redhat dot com
  2021-07-12 18:37 ` cvs-commit at gcc dot gnu.org
  2021-07-12 18:38 ` amacleod at redhat dot com
  5 siblings, 0 replies; 7+ messages in thread
From: amacleod at redhat dot com @ 2021-07-12 15:35 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101335

--- Comment #2 from Andrew Macleod <amacleod at redhat dot com> ---
yeah, it because we have been treating casts to objects of the same precision
as equivalences.    This normally works fine, but in this case we have
c_9 = (int)_2          c_9 == _2
_3 = c_9 - 10      so  _3 is < c_9
d_10 = (unsigned)_3    d_10 == _3 

if (_2 < d_10)
with the equivalences, it now thinks that d_10 < _2.

So I have to either not allow compounding relations thru casting equivalences
(painful), or something else.

-fwrapv make its work because we don't register the relation _3 < c_9 if
wrapping is on.


I'm running an experiment... When the recomputation code was introduced, it
completely eliminated the need to track downcasts. It seems that removing all
equivalences between casts doesn't miss anything either, so perhaps this older
bit isn't needed anymore.

I'm running it thru the testsuite now...

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) by r12-1796
  2021-07-05 19:01 [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (3 preceding siblings ...)
  2021-07-12 15:35 ` amacleod at redhat dot com
@ 2021-07-12 18:37 ` cvs-commit at gcc dot gnu.org
  2021-07-12 18:38 ` amacleod at redhat dot com
  5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-07-12 18:37 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101335

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Andrew Macleod <amacleod@gcc.gnu.org>:

https://gcc.gnu.org/g:a1539b797a06e03b08e1f1de28ad0d19a3956616

commit r12-2258-ga1539b797a06e03b08e1f1de28ad0d19a3956616
Author: Andrew MacLeod <amacleod@redhat.com>
Date:   Mon Jul 12 11:38:17 2021 -0400

    Do not register a cast as an equivalence.

    Registering an equivalence between objects of the same size in a cast can
    cause other relations to be incorrect.

            gcc/
            PR tree-optimization/101335
            * range-op.cc (operator_cast::lhs_op1_relation): Delete.

            gcc/testsuite/
            * gcc.dg/tree-ssa/pr101335.c: New.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) by r12-1796
  2021-07-05 19:01 [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (4 preceding siblings ...)
  2021-07-12 18:37 ` cvs-commit at gcc dot gnu.org
@ 2021-07-12 18:38 ` amacleod at redhat dot com
  5 siblings, 0 replies; 7+ messages in thread
From: amacleod at redhat dot com @ 2021-07-12 18:38 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101335

Andrew Macleod <amacleod at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|NEW                         |RESOLVED

--- Comment #4 from Andrew Macleod <amacleod at redhat dot com> ---
fixed.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-07-12 18:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-05 19:01 [Bug tree-optimization/101335] New: wrong code at -Os and above on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
2021-07-05 19:25 ` [Bug tree-optimization/101335] wrong code at -O2 and above pinskia at gcc dot gnu.org
2021-07-05 19:26 ` [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) pinskia at gcc dot gnu.org
2021-07-06  6:42 ` [Bug tree-optimization/101335] [12 Regression] wrong code at -O2 and above (casts between signed and unsigned) by r12-1796 rguenth at gcc dot gnu.org
2021-07-12 15:35 ` amacleod at redhat dot com
2021-07-12 18:37 ` cvs-commit at gcc dot gnu.org
2021-07-12 18:38 ` amacleod at redhat 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).