[Abe wrote:]
Ideally, I/we fix the above problem -- and the rest of the regressions in the 
new if converter --

[Alan wrote:]
OK, what are these regressions?

Each of these files` test cases currently fails to be autovectorized:

  gcc/testsuite/gcc.dg/vect/pr61194.c
  gcc/testsuite/gcc.dg/vect/vect-mask-load-1.c
  gcc/testsuite/gcc.dg/vect/vect-mask-loadstore-1.c
  gcc/testsuite/gcc.target/i386/avx2-gather-6.c
  gcc/testsuite/gcc.target/i386/avx2-vect-aggressive-1.c
  gcc/testsuite/gcc.target/i386/avx2-vect-aggressive.c


[Alan wrote:]
Well, any array access could introduce an extra fault (unless it's dominated by 
another equivalent (read/write) access)...?

I respectfully disagree.  Given code such as this:

  for (unsigned short index = 1; index < 9; ++index)
    array[index] = index;


... and assuming that "array" is an _array_ variable, i.e. it is _not_ a 
[re-assignable] pointer, it should be
clear IMO to all human readers that this code will not segfault, and if any 
compiler cannot also correctly arrive
at the conclusion "this array access is always good", then that compiler needs 
to get better at analysis IMO.

AFAIK, value range propagation [in the above example, for "index"] has been in 
GCC for many years...

  http://www.airs.com/dnovillo/Papers/gcc2005.pdf

  https://gcc.gnu.org/ml/gcc-patches/2000-07/msg00968.html

  
http://gcc.1065356.n5.nabble.com/Value-range-propagation-pass-in-4-0-1-RC1-or-not-td660293.html

[and I`m sure there are many more]

Regards,

Abe

Reply via email to