Viewing file: vect-bool-cmp.c (6.09 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR tree-optimization/71488 */ /* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_pack_trunc } */ /* { dg-additional-options "-msse4" { target sse4_runtime } } */
#include "tree-vect.h"
int i1, i2;
void __attribute__((noclone,noinline)) fn1 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) > (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn2 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) > (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn3 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) > (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn4 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) >= (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn5 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) >= (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn6 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) >= (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn7 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) < (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn8 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) < (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn9 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) < (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn10 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) <= (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn11 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) <= (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn12 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) <= (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn13 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) == (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn14 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) == (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn15 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) == (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn16 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) != (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn17 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) != (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
void __attribute__((noclone,noinline)) fn18 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size) { int i;
for (i = 0; i < size; i++) p1[i] = ((p2[i] == 0) != (unsigned)(p3[i] == 0)) + (p2[i] == 0); }
int eq (int i1, int i2) { return i1 == i2; } int ne (int i1, int i2) { return i1 != i2; } int lt (int i1, int i2) { return i1 < i2; } int le (int i1, int i2) { return i1 <= i2; } int gt (int i1, int i2) { return i1 > i2; } int ge (int i1, int i2) { return i1 >= i2; }
typedef int (*cmp_fn)(int, int);
void check (int *p, cmp_fn fn) { int i;
for (i = 0; i < 32; i++) { int t1 = ((i % 4) > 1) == 0; int t2 = (i % 2) == 0; int res = fn (t1, t2) + t1; if (p[i] != res) __builtin_abort (); } }
int main (int argc, char **argv) { int i1[32], i2[32], res[32]; short s2[32]; long long l2[32]; int i;
check_vect ();
for (i = 0; i < 32; i++) { l2[i] = i2[i] = s2[i] = i % 2; i1[i] = (i % 4) > 1; asm ("":::"memory"); }
fn1 (res, i1, i2, 32); check (res, gt); fn2 (res, i1, s2, 32); check (res, gt); fn3 (res, i1, l2, 32); check (res, gt);
fn4 (res, i1, i2, 32); check (res, ge); fn5 (res, i1, s2, 32); check (res, ge); fn6 (res, i1, l2, 32); check (res, ge);
fn7 (res, i1, i2, 32); check (res, lt); fn8 (res, i1, s2, 32); check (res, lt); fn9 (res, i1, l2, 32); check (res, lt);
fn10 (res, i1, i2, 32); check (res, le); fn11 (res, i1, s2, 32); check (res, le); fn12 (res, i1, l2, 32); check (res, le);
fn13 (res, i1, i2, 32); check (res, eq); fn14 (res, i1, s2, 32); check (res, eq); fn15 (res, i1, l2, 32); check (res, eq);
fn16 (res, i1, i2, 32); check (res, ne); fn17 (res, i1, s2, 32); check (res, ne); fn18 (res, i1, l2, 32); check (res, ne); }
/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 18 "vect" { target sse4_runtime } } } */
|