public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
@ 2022-11-06 12:56 zhendong.su at inf dot ethz.ch
  2022-11-06 18:20 ` [Bug tree-optimization/107541] [13 Regression] " pinskia at gcc dot gnu.org
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: zhendong.su at inf dot ethz.ch @ 2022-11-06 12:56 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 107541
           Summary: wrong code at -O1, -O2 and -O3 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: ---

This appears to be a recent regression; 12.2 compiles it correctly. 

Compiler Explorer: https://godbolt.org/z/6nq8jxn57

[661] % 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/13.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--enable-checking=yes --prefix=/local/suz-local/software/local/gcc-trunk
--enable-sanitizers --enable-languages=c,c++ --disable-werror --enable-multilib
--with-system-zlib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 13.0.0 20221104 (experimental) [master r13-3701-g07b0096e5b6] (GCC) 
[662] % 
[662] % gcctk -O0 small.c; ./a.out
[663] % 
[663] % gcctk -O1 small.c
[664] % ./a.out
Aborted
[665] % 
[665] % cat small.c
unsigned char a = 1;
char b, e;
long c;
short d;
int main() {
  a = ~(1 && a);
  c = ~((~a / 8 | -2) & 11007578330939886389LLU);
  e = -c;
  d = ~c / e;
  if (d < 2000)
    __builtin_abort();
  return 0;
}

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
@ 2022-11-06 18:20 ` pinskia at gcc dot gnu.org
  2022-11-06 18:28 ` franckbehaghel_gcc at protonmail dot com
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-06 18:20 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |x86_64-linux-gnu
   Target Milestone|---                         |13.0
            Summary|wrong code at -O1, -O2 and  |[13 Regression] wrong code
                   |-O3 on x86_64-linux-gnu     |at -O1, -O2 and -O3 on
                   |                            |x86_64-linux-gnu

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
  2022-11-06 18:20 ` [Bug tree-optimization/107541] [13 Regression] " pinskia at gcc dot gnu.org
@ 2022-11-06 18:28 ` franckbehaghel_gcc at protonmail dot com
  2022-11-06 18:30 ` pinskia at gcc dot gnu.org
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: franckbehaghel_gcc at protonmail dot com @ 2022-11-06 18:28 UTC (permalink / raw)
  To: gcc-bugs

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

Franck Behaghel <franckbehaghel_gcc at protonmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |franckbehaghel_gcc@protonma
                   |                            |il.com

--- Comment #1 from Franck Behaghel <franckbehaghel_gcc at protonmail dot com> ---
Created attachment 53839
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53839&action=edit
reduce testcase

Confirmed on master ( 3ad2167bbac8ae83b1e91305b105ab5287bdac55 )

It might be related with integer promotion on char type with ~ and / .
A reduce testcase.

gcc    main.cpp -O2   ; ./a.out ;echo "*****" ;  gcc  main.cpp ; ./a.out
b    : 128
*****
b    : 129

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
  2022-11-06 18:20 ` [Bug tree-optimization/107541] [13 Regression] " pinskia at gcc dot gnu.org
  2022-11-06 18:28 ` franckbehaghel_gcc at protonmail dot com
@ 2022-11-06 18:30 ` pinskia at gcc dot gnu.org
  2022-11-06 21:51 ` franckbehaghel_gcc at protonmail dot com
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-06 18:30 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-11-06
     Ever confirmed|0                           |1
           Keywords|                            |needs-bisection
             Status|UNCONFIRMED                 |NEW

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
ccp3 does:
Visiting statement:
# RANGE [irange] short int [1909, 1909][31001, 31001] NONZERO 0x7fff
_19 = (short intD.25) _18;
which is likely CONSTANT
Match-and-simplified (short int) _18 to 1909
Lattice value changed to CONSTANT 1909.  Adding SSA edges to worklist.
marking stmt to be not simulated again

That is due to rhs side of the divisor being a constant ...
Someone else has to look into why it is one.

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (2 preceding siblings ...)
  2022-11-06 18:30 ` pinskia at gcc dot gnu.org
@ 2022-11-06 21:51 ` franckbehaghel_gcc at protonmail dot com
  2022-11-07  7:03 ` rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: franckbehaghel_gcc at protonmail dot com @ 2022-11-06 21:51 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Franck Behaghel <franckbehaghel_gcc at protonmail dot com> ---
Not sure that would help but disabling those pair of passes :
 -fdisable-tree-ccp3 -fdisable-tree-ccp4
  or -fdisable-tree-ccp4  -fdisable-tree-dom2
  or -fdisable-tree-dom2 -fdisable-tree-dom3

removes the issue.

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (3 preceding siblings ...)
  2022-11-06 21:51 ` franckbehaghel_gcc at protonmail dot com
@ 2022-11-07  7:03 ` rguenth at gcc dot gnu.org
  2022-11-07  7:57 ` aldyh at gcc dot gnu.org
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: rguenth at gcc dot gnu.org @ 2022-11-07  7:03 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |aldyh at gcc dot gnu.org
           Priority|P3                          |P1

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (4 preceding siblings ...)
  2022-11-07  7:03 ` rguenth at gcc dot gnu.org
@ 2022-11-07  7:57 ` aldyh at gcc dot gnu.org
  2022-11-07  9:18 ` aldyh at gcc dot gnu.org
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: aldyh at gcc dot gnu.org @ 2022-11-07  7:57 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
This is an issue with the TRUNC_DIV_EXPR range-op entry optimizing divisions by
powers of 2 into right shifts.  We're right shifting the mask by the shift
amount.

operator_div::fold_range():
...
...
  tree t;
  if (rh.singleton_p (&t))
    {
      wide_int wi = wi::to_wide (t);
      int shift = wi::exact_log2 (wi);
      if (shift != -1)
        {
          wide_int nz = lh.get_nonzero_bits ();
          nz = wi::rshift (nz, shift, TYPE_SIGN (type));
          r.set_nonzero_bits (nz);
        }
    }

The operands are:
[irange] int [-256, -255] NONZERO 0xffffff01
[irange] int [8, 8] NONZERO 0x8

Result before optimization:
[irange] int [-32, -31] NONZERO 0xffffffe1

Result after the optimization:
[irange] int [-32, -31] NONZERO 0xffffffe0

I'll take a look.

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (5 preceding siblings ...)
  2022-11-07  7:57 ` aldyh at gcc dot gnu.org
@ 2022-11-07  9:18 ` aldyh at gcc dot gnu.org
  2022-11-07 11:42 ` cvs-commit at gcc dot gnu.org
  2022-11-07 11:43 ` aldyh at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: aldyh at gcc dot gnu.org @ 2022-11-07  9:18 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
Created attachment 53841
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53841&action=edit
untested

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (6 preceding siblings ...)
  2022-11-07  9:18 ` aldyh at gcc dot gnu.org
@ 2022-11-07 11:42 ` cvs-commit at gcc dot gnu.org
  2022-11-07 11:43 ` aldyh at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2022-11-07 11:42 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Aldy Hernandez <aldyh@gcc.gnu.org>:

https://gcc.gnu.org/g:3bff15c1c9fb3eb0bb042717e072476ec2d6d88c

commit r13-3752-g3bff15c1c9fb3eb0bb042717e072476ec2d6d88c
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Mon Nov 7 08:40:12 2022 +0100

    [range-op] Restrict division by power of 2 optimization to positive
numbers.

    The problem here is that we are transforming a division by a power of
    2 into a right shift, and using this to shift the maybe nonzero bits.
    This gives the wrong result when the number being divided is negative.

    In the testcase we are dividing this by 8:

            [irange] int [-256, -255] NONZERO 0xffffff01

    and coming up with:

            [irange] int [-32, -31] NONZERO 0xffffffe0

    The maybe nonzero bits are wrong as -31 has the LSB set (0xffffffe1)
    whereas the bitmask says the lower 4 bits are off.

            PR tree-optimization/107541

    gcc/ChangeLog:

            * range-op.cc (operator_div::fold_range): Restrict power of 2
            optimization to positive numbers.

    gcc/testsuite/ChangeLog:

            * gcc.dg/tree-ssa/pr107541.c: New test.

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

* [Bug tree-optimization/107541] [13 Regression] wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu
  2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
                   ` (7 preceding siblings ...)
  2022-11-07 11:42 ` cvs-commit at gcc dot gnu.org
@ 2022-11-07 11:43 ` aldyh at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: aldyh at gcc dot gnu.org @ 2022-11-07 11:43 UTC (permalink / raw)
  To: gcc-bugs

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

Aldy Hernandez <aldyh at gcc dot gnu.org> changed:

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

--- Comment #7 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
fixed

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

end of thread, other threads:[~2022-11-07 11:43 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-06 12:56 [Bug tree-optimization/107541] New: wrong code at -O1, -O2 and -O3 on x86_64-linux-gnu zhendong.su at inf dot ethz.ch
2022-11-06 18:20 ` [Bug tree-optimization/107541] [13 Regression] " pinskia at gcc dot gnu.org
2022-11-06 18:28 ` franckbehaghel_gcc at protonmail dot com
2022-11-06 18:30 ` pinskia at gcc dot gnu.org
2022-11-06 21:51 ` franckbehaghel_gcc at protonmail dot com
2022-11-07  7:03 ` rguenth at gcc dot gnu.org
2022-11-07  7:57 ` aldyh at gcc dot gnu.org
2022-11-07  9:18 ` aldyh at gcc dot gnu.org
2022-11-07 11:42 ` cvs-commit at gcc dot gnu.org
2022-11-07 11:43 ` aldyh 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).