| /* { dg-add-options vect_early_break } */ |
| /* { dg-require-effective-target vect_early_break_hw } */ |
| /* { dg-require-effective-target vect_int } */ |
| |
| /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ |
| |
| #include "tree-vect.h" |
| |
| #ifndef N |
| #define N 30 |
| #endif |
| |
| #ifndef IDX |
| #define IDX 1 |
| #endif |
| |
| int n_earlyclobbers; |
| |
| typedef void* rtx; |
| rtx reload_earlyclobbers[N] = {0}; |
| |
| rtx foo = (void*)0xbadf00d; |
| |
| int |
| __attribute__((noinline, noipa)) |
| earlyclobber_operand_p (rtx x) |
| { |
| int i; |
| |
| for (i = 0; i < n_earlyclobbers; i++) |
| if (reload_earlyclobbers[i] == x) |
| return 1; |
| |
| return 0; |
| } |
| |
| extern void abort (); |
| |
| int main () |
| { |
| check_vect (); |
| |
| n_earlyclobbers = IDX; |
| if (earlyclobber_operand_p (foo)) |
| abort (); |
| |
| return 0; |
| } |