On Thu, Sep 14, 2017 at 2:10 PM, Shalnov, Sergey <sergey.shal...@intel.com> wrote: > Hi, > GCC has the option "mprefer-avx128" to use 128-bit AVX registers instead of > 256-bit AVX registers in the auto-vectorizer. > This patch enables the command line option "mprefer-avx256" that reduces > 512-bit registers usage in "march=skylake-avx512" mode. > This is the initial implementation of the option. Currently, 512-bit > registers might appears in some cases. I have a plan to continue fix the > cases where 512-bit registers are appear. > Sergey > > 2017-09-14 Sergey Shalnov sergey.shal...@intel.com > * config/i386/i386.opt (mprefer-avx256): New flag. > * config/i386/i386.c (ix86_preferred_simd_mode): Prefer 256-bit AVX modes > when the flag -mprefer-avx256 is on.
Please rewrite integer mode handling in ix86_preferred_simd_mode to some consistent form, like: case E_QImode: if (TARGET_AVX512BW && !TARGET_PREFER_AVX256) return V64QImode; else if (TARGET_AVX && !TARGET_PREFER_AVX128) return V32QImode; else return V16QImode; ... and ix86_autovectorize_vector_sizes to some more readable form, like: static unsigned int ix86_autovectorize_vector_sizes (void) { unsigned int bytesizes = 16; if (TARGET_AVX && !TARGET_PREFER_AVX128) bytesizes |= 32; if (TARGET_AVX512F && !TARGET_PREFER_AVX256) bytesizes |= 64; return bytesizes; } Uros.