| /* { dg-require-effective-target vect_double } */ |
| |
| #include "tree-vect.h" |
| |
| extern long int lrint (double); |
| extern void abort (void); |
| long int a[64]; |
| double b[64]; |
| |
| __attribute__((noinline, noclone)) void |
| f1 (int n) |
| { |
| int i; |
| for (i = 0; i < n; i++) |
| { |
| a[4 * i + 0] = lrint (b[4 * i + 0]) + 1; |
| a[4 * i + 1] = lrint (b[4 * i + 1]) + 2; |
| a[4 * i + 2] = lrint (b[4 * i + 2]) + 3; |
| a[4 * i + 3] = lrint (b[4 * i + 3]) + 4; |
| } |
| } |
| |
| __attribute__((noinline, noclone)) void |
| f2 (int n) |
| { |
| int i; |
| for (i = 0; i < 2 * n; i++) |
| { |
| a[2 * i + 0] = lrint (b[2 * i + 0]) + 1; |
| a[2 * i + 1] = lrint (b[2 * i + 1]) + 2; |
| } |
| } |
| |
| __attribute__((noinline, noclone)) void |
| f3 (void) |
| { |
| int i; |
| for (i = 0; i < 64; i++) |
| a[i] = lrint (b[i]) + 1; |
| } |
| |
| __attribute__((noinline, noclone)) void |
| f4 (int n) |
| { |
| int i; |
| for (i = 0; i < n; i++) |
| { |
| a[4 * i + 0] = lrint (b[4 * i + 0]); |
| a[4 * i + 1] = lrint (b[4 * i + 1]); |
| a[4 * i + 2] = lrint (b[4 * i + 2]); |
| a[4 * i + 3] = lrint (b[4 * i + 3]); |
| } |
| } |
| |
| __attribute__((noinline, noclone)) void |
| f5 (int n) |
| { |
| int i; |
| for (i = 0; i < 2 * n; i++) |
| { |
| a[2 * i + 0] = lrint (b[2 * i + 0]); |
| a[2 * i + 1] = lrint (b[2 * i + 1]); |
| } |
| } |
| |
| __attribute__((noinline, noclone)) void |
| f6 (void) |
| { |
| int i; |
| for (i = 0; i < 64; i++) |
| a[i] = lrint (b[i]); |
| } |
| |
| __attribute__((noinline, noclone)) int |
| main1 () |
| { |
| int i; |
| |
| for (i = 0; i < 64; i++) |
| { |
| asm (""); |
| b[i] = ((i & 1) ? -4 * i : 4 * i) + 0.25; |
| } |
| f1 (16); |
| for (i = 0; i < 64; i++) |
| if (a[i] != ((i & 1) ? -4 * i : 4 * i) + 1 + (i & 3)) |
| abort (); |
| else |
| a[i] = 131.25; |
| f2 (16); |
| for (i = 0; i < 64; i++) |
| if (a[i] != ((i & 1) ? -4 * i : 4 * i) + 1 + (i & 1)) |
| abort (); |
| else |
| a[i] = 131.25; |
| f3 (); |
| for (i = 0; i < 64; i++) |
| if (a[i] != ((i & 1) ? -4 * i : 4 * i) + 1) |
| abort (); |
| else |
| a[i] = 131.25; |
| f4 (16); |
| for (i = 0; i < 64; i++) |
| if (a[i] != ((i & 1) ? -4 * i : 4 * i)) |
| abort (); |
| else |
| a[i] = 131.25; |
| f5 (16); |
| for (i = 0; i < 64; i++) |
| if (a[i] != ((i & 1) ? -4 * i : 4 * i)) |
| abort (); |
| else |
| a[i] = 131.25; |
| f6 (); |
| for (i = 0; i < 64; i++) |
| if (a[i] != ((i & 1) ? -4 * i : 4 * i)) |
| abort (); |
| return 0; |
| } |
| |
| int |
| main () |
| { |
| check_vect (); |
| return main1 (); |
| } |
| |
| /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 6 "vect" { target vect_call_lrint } } } */ |
| /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "vect" { target vect_call_lrint } } } */ |