vect: Add testcases for unsigned conversions [PR110018]

Also test convresions with unsigned types.

	PR target/110018

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr110018-1.c: Use explicit signed types.
	* gcc.target/i386/pr110018-2.c: New test.
This commit is contained in:
Uros Bizjak 2023-06-21 16:34:39 +02:00
parent b375c5340b
commit b9401c3a32
2 changed files with 104 additions and 10 deletions

View file

@ -4,14 +4,14 @@
/* { dg-final { scan-assembler-times {(?n)vcvt[dqw]*2p[dsh]} 5 } } */
void
foo (double* __restrict a, char* b)
foo (double* __restrict a, signed char* b)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo1 (float* __restrict a, char* b)
foo1 (float* __restrict a, signed char* b)
{
a[0] = b[0];
a[1] = b[1];
@ -20,7 +20,7 @@ foo1 (float* __restrict a, char* b)
}
void
foo2 (_Float16* __restrict a, char* b)
foo2 (_Float16* __restrict a, signed char* b)
{
a[0] = b[0];
a[1] = b[1];
@ -33,14 +33,14 @@ foo2 (_Float16* __restrict a, char* b)
}
void
foo3 (double* __restrict a, short* b)
foo3 (double* __restrict a, signed short* b)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo4 (float* __restrict a, char* b)
foo4 (float* __restrict a, signed char* b)
{
a[0] = b[0];
a[1] = b[1];
@ -49,14 +49,14 @@ foo4 (float* __restrict a, char* b)
}
void
foo5 (double* __restrict b, char* a)
foo5 (double* __restrict b, signed char* a)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo6 (float* __restrict b, char* a)
foo6 (float* __restrict b, signed char* a)
{
a[0] = b[0];
a[1] = b[1];
@ -65,7 +65,7 @@ foo6 (float* __restrict b, char* a)
}
void
foo7 (_Float16* __restrict b, char* a)
foo7 (_Float16* __restrict b, signed char* a)
{
a[0] = b[0];
a[1] = b[1];
@ -78,14 +78,14 @@ foo7 (_Float16* __restrict b, char* a)
}
void
foo8 (double* __restrict b, short* a)
foo8 (double* __restrict b, signed short* a)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo9 (float* __restrict b, char* a)
foo9 (float* __restrict b, signed char* a)
{
a[0] = b[0];
a[1] = b[1];

View file

@ -0,0 +1,94 @@
/* { dg-do compile } */
/* { dg-options "-mavx512fp16 -mavx512vl -O2 -mavx512dq" } */
/* { dg-final { scan-assembler-times {(?n)vcvttp[dsh]2[dqw]} 5 } } */
/* { dg-final { scan-assembler-times {(?n)vcvt[dqw]*2p[dsh]} 5 } } */
void
foo (double* __restrict a, unsigned char* b)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo1 (float* __restrict a, unsigned char* b)
{
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
a[3] = b[3];
}
void
foo2 (_Float16* __restrict a, unsigned char* b)
{
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
a[3] = b[3];
a[4] = b[4];
a[5] = b[5];
a[6] = b[6];
a[7] = b[7];
}
void
foo3 (double* __restrict a, unsigned short* b)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo4 (float* __restrict a, unsigned char* b)
{
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
a[3] = b[3];
}
void
foo5 (double* __restrict b, unsigned char* a)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo6 (float* __restrict b, unsigned char* a)
{
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
a[3] = b[3];
}
void
foo7 (_Float16* __restrict b, unsigned char* a)
{
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
a[3] = b[3];
a[4] = b[4];
a[5] = b[5];
a[6] = b[6];
a[7] = b[7];
}
void
foo8 (double* __restrict b, unsigned short* a)
{
a[0] = b[0];
a[1] = b[1];
}
void
foo9 (float* __restrict b, unsigned char* a)
{
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
a[3] = b[3];
}