On 06/16/2016 05:06 AM, Ilya Enkovich wrote:
Hi,

This patch fixes incorrect comparison vectorization for booleans.
The problem is that regular comparison which works for scalars
doesn't work for vectors due to different binary representation.
Also this never works for scalar masks.

This patch replaces such comparisons with bitwise operations
which work correctly for both vector and scalar masks.

Bootstrapped and regtested on x86_64-unknown-linux-gnu.  Is it
OK for trunk?  What should be done for gcc-6-branch?  Port this
patch or just restrict vectorization for comparison of booleans?

Thanks,
Ilya
--
gcc/

2016-06-15  Ilya Enkovich  <ilya.enkov...@intel.com>

        PR middle-end/71488
        * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Support
        comparison of boolean vectors.
        * tree-vect-stmts.c (vectorizable_comparison): Vectorize comparison
        of boolean vectors using bitwise operations.

gcc/testsuite/

2016-06-15  Ilya Enkovich  <ilya.enkov...@intel.com>

        PR middle-end/71488
        * g++.dg/pr71488.C: New test.
        * gcc.dg/vect/vect-bool-cmp.c: New test.
OK. Given this is a code generation bug, I'll support porting this patch to the gcc-6 branch. Is there any reason to think that porting out be more risky than usual? It looks pretty simple to me, am I missing some subtle dependency?

jeff

Reply via email to