| /* { dg-do compile } */ |
| /* { dg-require-effective-target vect_early_break } */ |
| /* { dg-require-effective-target arm_arch_v8a_hard_ok } */ |
| /* { dg-options "-O3 -fno-schedule-insns -fno-reorder-blocks -fno-schedule-insns2" } */ |
| /* { dg-add-options arm_arch_v8a_hard } */ |
| /* { dg-final { check-function-bodies "**" "" "" } } */ |
| |
| #define N 640 |
| int a[N] = {0}; |
| int b[N] = {0}; |
| |
| /* |
| ** f1: |
| ** ... |
| ** vcgt.s32 q[0-9]+, q[0-9]+, #0 |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vmov r[0-9]+, s[0-9]+ @ int |
| ** ( |
| ** cmp r[0-9]+, #0 |
| ** b(ne|eq) \.L[0-9]+ |
| ** | |
| ** cbn?z r[0-9]+, \.L.+ |
| ** ) |
| ** ... |
| */ |
| void f1 () |
| { |
| for (int i = 0; i < N; i++) |
| { |
| b[i] += a[i]; |
| if (a[i] > 0) |
| break; |
| } |
| } |
| |
| /* |
| ** f2: |
| ** ... |
| ** vcge.s32 q[0-9]+, q[0-9]+, #0 |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vmov r[0-9]+, s[0-9]+ @ int |
| ** ( |
| ** cmp r[0-9]+, #0 |
| ** b(ne|eq) \.L[0-9]+ |
| ** | |
| ** cbn?z r[0-9]+, \.L.+ |
| ** ) |
| ** ... |
| */ |
| void f2 () |
| { |
| for (int i = 0; i < N; i++) |
| { |
| b[i] += a[i]; |
| if (a[i] >= 0) |
| break; |
| } |
| } |
| |
| /* |
| ** f3: |
| ** ... |
| ** vceq.i32 q[0-9]+, q[0-9]+, #0 |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vmov r[0-9]+, s[0-9]+ @ int |
| ** ( |
| ** cmp r[0-9]+, #0 |
| ** b(ne|eq) \.L[0-9]+ |
| ** | |
| ** cbn?z r[0-9]+, \.L.+ |
| ** ) |
| ** ... |
| */ |
| void f3 () |
| { |
| for (int i = 0; i < N; i++) |
| { |
| b[i] += a[i]; |
| if (a[i] == 0) |
| break; |
| } |
| } |
| |
| /* |
| ** f4: |
| ** ... |
| ** vceq.i32 q[0-9]+, q[0-9]+, #0 |
| ** vmvn q[0-9]+, q[0-9]+ |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vmov r[0-9]+, s[0-9]+ @ int |
| ** ( |
| ** cmp r[0-9]+, #0 |
| ** b(ne|eq) \.L[0-9]+ |
| ** | |
| ** cbn?z r[0-9]+, \.L.+ |
| ** ) |
| ** ... |
| */ |
| void f4 () |
| { |
| for (int i = 0; i < N; i++) |
| { |
| b[i] += a[i]; |
| if (a[i] != 0) |
| break; |
| } |
| } |
| |
| /* |
| ** f5: |
| ** ... |
| ** vclt.s32 q[0-9]+, q[0-9]+, #0 |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vmov r[0-9]+, s[0-9]+ @ int |
| ** ( |
| ** cmp r[0-9]+, #0 |
| ** b(ne|eq) \.L[0-9]+ |
| ** | |
| ** cbn?z r[0-9]+, \.L.+ |
| ** ) |
| ** ... |
| */ |
| void f5 () |
| { |
| for (int i = 0; i < N; i++) |
| { |
| b[i] += a[i]; |
| if (a[i] < 0) |
| break; |
| } |
| } |
| |
| /* |
| ** f6: |
| ** ... |
| ** vcle.s32 q[0-9]+, q[0-9]+, #0 |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vpmax.u32 d[0-9]+, d[0-9]+, d[0-9]+ |
| ** vmov r[0-9]+, s[0-9]+ @ int |
| ** ( |
| ** cmp r[0-9]+, #0 |
| ** b(ne|eq) \.L[0-9]+ |
| ** | |
| ** cbn?z r[0-9]+, \.L.+ |
| ** ) |
| ** ... |
| */ |
| void f6 () |
| { |
| for (int i = 0; i < N; i++) |
| { |
| b[i] += a[i]; |
| if (a[i] <= 0) |
| break; |
| } |
| } |
| |