2 /* { dg-require-weak "" } */
3 /* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } } */
4 /* { dg-skip-if "No undefined weak" { nvptx-*-* } } */
5 /* { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */
6 /* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */
7 /* { dg-additional-options "--param vect-epilogues-nomask=1 -mavx2" { target avx2_runtime } } */
12 extern int posix_memalign(void **memptr
, __SIZE_TYPE__ alignment
, __SIZE_TYPE__ size
) __attribute__((weak
));
13 extern void free (void *);
15 void __attribute__((noinline
))
16 test_citer (int * __restrict__ a
,
22 a
= (int *)__builtin_assume_aligned (a
, ALIGN
);
23 b
= (int *)__builtin_assume_aligned (b
, ALIGN
);
24 c
= (int *)__builtin_assume_aligned (c
, ALIGN
);
26 for (i
= 0; i
< SIZE
; i
++)
30 void __attribute__((noinline
))
31 test_viter (int * __restrict__ a
,
38 a
= (int *)__builtin_assume_aligned (a
, ALIGN
);
39 b
= (int *)__builtin_assume_aligned (b
, ALIGN
);
40 c
= (int *)__builtin_assume_aligned (c
, ALIGN
);
42 for (i
= 0; i
< size
; i
++)
46 void __attribute__((noinline
))
47 init_data (int * __restrict__ a
,
52 for (int i
= 0; i
< size
; i
++)
57 asm volatile("": : :"memory");
59 a
[size
] = b
[size
] = c
[size
] = size
;
63 void __attribute__((noinline
))
71 if (posix_memalign ((void **)&a
, ALIGN
, (SIZE
+ 1) * sizeof (int)) != 0)
73 if (posix_memalign ((void **)&b
, ALIGN
, (SIZE
+ 1) * sizeof (int)) != 0)
75 if (posix_memalign ((void **)&c
, ALIGN
, (SIZE
+ 1) * sizeof (int)) != 0)
78 init_data (a
, b
, c
, SIZE
);
80 for (i
= 0; i
< SIZE
; i
++)
81 if (c
[i
] != a
[i
] + b
[i
])
83 if (a
[SIZE
] != SIZE
|| b
[SIZE
] != SIZE
|| c
[SIZE
] != SIZE
)
86 init_data (a
, b
, c
, SIZE
);
87 test_viter (a
, b
, c
, SIZE
);
88 for (i
= 0; i
< SIZE
; i
++)
89 if (c
[i
] != a
[i
] + b
[i
])
91 if (a
[SIZE
] != SIZE
|| b
[SIZE
] != SIZE
|| c
[SIZE
] != SIZE
)
100 main (int argc
, const char **argv
)
109 /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 2 "vect" { target avx2_runtime } } } */
110 /* { dg-final { scan-tree-dump-times "LOOP EPILOGUE VECTORIZED \\(VS=16\\)" 2 "vect" { target avx2_runtime } } } */