Viewing file: pr103581.c (1.54 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-additional-options "-mavx2 -mtune-ctrl=use_gather" { target avx2_runtime } } */
#include "tree-vect.h"
#define MASKGATHER(SUFF, TYPE1, TYPE2) \ TYPE1 * __attribute__((noipa)) \ maskgather ## SUFF (int n, TYPE2 *indices, TYPE1 *data) \ { \ TYPE1 *out = __builtin_malloc (sizeof (TYPE1) * n); \ for (int i = 0; i < n; ++i) \ { \ TYPE2 d = indices[i]; \ if (d > 1) \ out[i] = data[d]; \ } \ return out; \ }
MASKGATHER(udiusi, unsigned long long, unsigned int) MASKGATHER(usiusi, unsigned int, unsigned int) MASKGATHER(udiudi, unsigned long long, unsigned long long) MASKGATHER(usiudi, unsigned int, unsigned long long)
int main() { check_vect ();
unsigned int idx4[32], data4[32]; unsigned long long idx8[32], data8[32]; for (int i = 0; i < 32; ++i) { idx4[i] = i; idx8[i] = i; data4[i] = i; data8[i] = i; } unsigned long long *resudiusi = maskgatherudiusi (16, idx4, data8); unsigned int *resusiusi = maskgatherusiusi (16, idx4, data4); unsigned long long *resudiudi = maskgatherudiudi (16, idx8, data8); unsigned int *resusiudi = maskgatherusiudi (16, idx8, data4); for (int i = 0; i < 16; ++i) { unsigned int d = idx4[i]; if (d > 1) { if (resudiusi[i] != data4[d]) __builtin_abort (); if (resudiudi[i] != data4[d]) __builtin_abort (); if (resusiudi[i] != data4[d]) __builtin_abort (); if (resusiusi[i] != data4[d]) __builtin_abort (); } } return 0; }
|