http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58122

Anthony Foiani <anthony.foiani at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |anthony.foiani at gmail dot com

--- Comment #2 from Anthony Foiani <anthony.foiani at gmail dot com> ---
Using this build of 4.8.1:

  $ /usr/local/gcc-4.8.1/bin/gcc -v
  Using built-in specs.
  COLLECT_GCC=/usr/local/gcc-4.8.1/bin/gcc
 
COLLECT_LTO_WRAPPER=/usr/local/gcc-4.8.1/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper
  Target: x86_64-unknown-linux-gnu
  Configured with: ../gcc-4.8.1/configure --prefix=/usr/local/gcc-4.8.1
--with-local-prefix=/usr/local/gcc-4.8.1/local --enable-languages=c,c++
--enable-threads --disable-multilib
  Thread model: posix
  gcc version 4.8.1 (GCC) 

With this test case (thanks for the nudge, Oleg!)

  #include <stdint.h>

  uint64_t test()
  {
      uint64_t rv = 0;
      uint32_t i;
      for ( i = 0; i < ITERS; ++i )
          rv += i;
      return rv;
  }

I did a quick loop to find where it switched from precomputing to looping. 
Interestingly, it was at 71 (precomputed) to 72 (loop) iterations:

  $ for i in {1..100} ;
  do
    /usr/local/gcc-4.8.1/bin/gcc -O3 -S test.c -DITERS=$i ;
    if grep -q jne test.s ;
    then 
      echo "$i: loop" ;
    else 
      echo "$i: precomputed" ;
    fi ;
  done
  1: precomputed
  2: precomputed
  3: precomputed
  4: precomputed
  5: precomputed
  ...
  70: precomputed
  71: precomputed
  72: loop
  73: loop

Curious whether the 17/71 difference from Oleg's SH environment is a
typo/transposition, or if it's a difference in native word size, or something
else.

For whatever it's worth, this bug is not something that is affecting me; it was
just a question brought up on the IRC channel.  So I don't have any priority to
assign to it, other than that it seems a regression in
quality-of-implementation since 4.7.  (Although, as I asked in my original
e-mail, it might be that 4.8 is just more cautious about looping, so the
correct flags could restore the desired performance.)

Thanks,
Tony

Reply via email to