| /* { dg-do run } */ |
| /* { dg-require-effective-target arm_neon_hw } */ |
| /* { dg-options "-O2" } */ |
| /* { dg-add-options arm_neon } */ |
| /* Check that the arm_final_prescan_insn ccfsm code does not try to |
| * conditionally execute NEON instructions. */ |
| #include <arm_neon.h> |
| #include <stdlib.h> |
| |
| int __attribute__((noinline)) |
| foo(uint32x2_t a, uint32_t *p, uint32_t *q) |
| { |
| if (p != q) |
| /* This vst1 instruction could be conditional, except that NEON |
| instructions are never conditional in ARM mode. */ |
| vst1_u32(p, a); |
| return 0; |
| } |
| |
| int |
| main() |
| { |
| uint32x2_t v; |
| uint32_t a[2] = {1, 42}; |
| v = vld1_u32(a); |
| v = vadd_u32(v, v); |
| foo(v, a, a); |
| if (a[0] != 1 || a[1] != 42) |
| abort(); |
| exit(0); |
| } |