| /* { 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 (void) |
| { |
| a[0] = lrint (b[0]) + 1; |
| a[1] = lrint (b[1]) + 2; |
| a[2] = lrint (b[2]) + 3; |
| a[3] = lrint (b[3]) + 4; |
| a[4] = lrint (b[4]) + 5; |
| a[5] = lrint (b[5]) + 6; |
| a[6] = lrint (b[6]) + 7; |
| a[7] = lrint (b[7]) + 8; |
| } |
| |
| __attribute__((noinline, noclone)) void |
| f2 (void) |
| { |
| a[0] = lrint (b[0]); |
| a[1] = lrint (b[1]); |
| a[2] = lrint (b[2]); |
| a[3] = lrint (b[3]); |
| a[4] = lrint (b[4]); |
| a[5] = lrint (b[5]); |
| a[6] = lrint (b[6]); |
| a[7] = lrint (b[7]); |
| } |
| |
| __attribute__((noinline, noclone)) int |
| main1 () |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| { |
| asm (""); |
| b[i] = ((i & 1) ? -4 * i : 4 * i) + 0.25; |
| } |
| f1 (); |
| for (i = 0; i < 8; i++) |
| if (a[i] != ((i & 1) ? -4 * i : 4 * i) + 1 + i) |
| abort (); |
| else |
| a[i] = 131.25; |
| f2 (); |
| for (i = 0; i < 8; 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 "optimized: basic block" 2 "slp2" { target vect_call_lrint } } } */ |