blob: 045f143fb930f293433ce00197664a4f697d9003 [file]
/* { 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;
}
}