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