| /* This file is distributed under the University of Illinois Open Source |
| License. See license.txt for details. */ |
| |
| /* { dg-additional-options "--param vect-epilogues-nomask=0" } */ |
| /* { dg-require-effective-target vect_float } */ |
| |
| #include "tsvc.h" |
| |
| real_t s4116(struct args_t * func_args) |
| { |
| // indirect addressing |
| // more complicated sparse sdot |
| // gather is required |
| |
| struct{int * __restrict__ a;int b;int c;} * x = func_args->arg_info; |
| int * __restrict__ ip = x->a; |
| int j = x->b; |
| int inc = x->c; |
| |
| initialise_arrays(__func__); |
| |
| real_t sum; |
| int off; |
| for (int nl = 0; nl < 100*iterations; nl++) { |
| sum = 0.; |
| for (int i = 0; i < LEN_2D-1; i++) { |
| off = inc + i; |
| sum += a[off] * aa[j-1][ip[i]]; |
| } |
| dummy(a, b, c, d, e, aa, bb, cc, 0.); |
| } |
| |
| return sum; |
| } |
| |
| int main (int argc, char **argv) |
| { |
| int n1 = 1; |
| int n3 = 1; |
| int* ip; |
| real_t s1,s2; |
| init(&ip, &s1, &s2); |
| |
| run(&s4116, "s4116", &(struct{int * a; int b; int c;}){ip, LEN_2D/2, n1}); |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ |