blob: 8f0240bf5f7585b3098ddb23fef981270b0d7c73 [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-save-temps -O2 -ftree-vectorize -fno-inline -fno-vect-cost-model" } */
#pragma GCC target "+nosve"
#define N 1024
#define FUNC_DEF(__a) \
void \
foo##__a (float *a, int *b) \
{ \
int i; \
for (i = 0; i < N; i++) \
b[i] = a[i] * __a##.0f; \
}
FUNC_DEF (4)
FUNC_DEF (8)
FUNC_DEF (16)
int ints[N];
float floats[N];
void
reset_ints (int *arr)
{
int i;
for (i = 0; i < N; i++)
arr[i] = 0;
}
void
check_result (int *is, int n)
{
int i;
for (i = 0; i < N; i++)
if (is[i] != i * n)
__builtin_abort ();
}
#define FUNC_CHECK(__a) \
do \
{ \
reset_ints (ints); \
foo##__a (floats, ints); \
check_result (ints, __a); \
} while (0)
int
main (void)
{
int i;
for (i = 0; i < N; i++)
floats[i] = (float) i;
FUNC_CHECK (4);
FUNC_CHECK (8);
FUNC_CHECK (16);
return 0;
}
/* { dg-final { scan-assembler-not "fmul\tv\[0-9\]*.*" } } */
/* { dg-final { scan-assembler-times "fcvtzs\tv\[0-9\].4s, v\[0-9\].4s*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tv\[0-9\].4s, v\[0-9\].4s*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tv\[0-9\].4s, v\[0-9\].4s*.*#4" 1 } } */