slp: Add Tests for complex mul, mls and mla"

This adds the initial tests for the complex mul, mls and mla.
These will be enabled in the commits that add the optabs.

Committed as obvious variations of existing tests.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/complex/complex-mla-template.c: New test.
	* gcc.dg/vect/complex/complex-mls-template.c: New test.
	* gcc.dg/vect/complex/complex-mul-template.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c: New test.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mla-double.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mla-float.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mla-half-float.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mls-double.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mls-float.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mls-half-float.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mul-double.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mul-float.c: New test.
	* gcc.dg/vect/complex/fast-math-complex-mul-half-float.c: New test.
This commit is contained in:
Tamar Christina 2021-01-14 21:01:15 +00:00
parent b50df1e749
commit 59832db9a7
21 changed files with 423 additions and 0 deletions

View File

@ -0,0 +1,101 @@
#include <complex.h>
void fma0 (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += a[i] * b[i];
}
void fma90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += a[i] * (b[i] * I);
}
void fma180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += a[i] * (b[i] * I * I);
}
void fma270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += a[i] * (b[i] * I * I * I);
}
void fma90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += (a[i] * I) * b[i];
}
void fma180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += (a[i] * I * I) * b[i];
}
void fma270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += (a[i] * I * I * I) * b[i];
}
void fmaconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += ~a[i] * b[i];
}
void fmaconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += a[i] * ~b[i];
}
void fmaconjboth (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += ~a[i] * ~b[i];
}
void fma_elem (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += a[i] * b;
}
void fma_elemconjfst (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += ~a[i] * b;
}
void fma_elemconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += a[i] * ~b;
}
void fma_elemconjboth (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i+=0; i < N; i++)
c[i] += ~a[i] * ~b;
}

View File

@ -0,0 +1,101 @@
#include <complex.h>
void fms0 (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= a[i] * b[i];
}
void fms90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= a[i] * (b[i] * I);
}
void fms180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= a[i] * (b[i] * I * I);
}
void fms270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= a[i] * (b[i] * I * I * I);
}
void fms90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= (a[i] * I) * b[i];
}
void fms180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= (a[i] * I * I) * b[i];
}
void fms270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= (a[i] * I * I * I) * b[i];
}
void fmsconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= ~a[i] * b[i];
}
void fmsconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= a[i] * ~b[i];
}
void fmsconjboth (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= ~a[i] * ~b[i];
}
void fms_elem (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= a[i] * b;
}
void fms_elemconjfst (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= ~a[i] * b;
}
void fms_elemconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= a[i] * ~b;
}
void fms_elemconjboth (_Complex TYPE a[restrict N], _Complex TYPE b,
_Complex TYPE c[restrict N])
{
for (int i-=0; i < N; i++)
c[i] -= ~a[i] * ~b;
}

View File

@ -0,0 +1,71 @@
#include <complex.h>
void mul0 (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = a[i] * b[i];
}
void mul90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = a[i] * (b[i] * I);
}
void mul180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = a[i] * (b[i] * I * I);
}
void mul270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = a[i] * (b[i] * I * I * I);
}
void mul90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = (a[i] * I) * b[i];
}
void mul180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = (a[i] * I * I) * b[i];
}
void mul270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = (a[i] * I * I * I) * b[i];
}
void mulconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = ~a[i] * b[i];
}
void mulconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = a[i] * ~b[i];
}
void mulconjboth (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
_Complex TYPE c[restrict N])
{
for (int i=0; i < N; i++)
c[i] = ~a[i] * ~b[i];
}

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_double } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE double
#define N 16
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_float } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE float
#define N 16
#include "complex-mla-template.c"

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_half } */
/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE _Float16
#define N 16
#include "complex-mla-template.c"

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_double } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE double
#define N 16
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_float } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE float
#define N 16
#include "complex-mla-template.c"

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_half } */
/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE _Float16
#define N 16
#include "complex-mla-template.c"

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_double } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE double
#define N 16
#include "complex-mul-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_float } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE float
#define N 16
#include "complex-mul-template.c"

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_half } */
/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE _Float16
#define N 16
#include "complex-mul-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_double } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE double
#define N 200
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_float } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE float
#define N 200
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_half } */
/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE _Float16
#define N 200
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_double } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE double
#define N 200
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_float } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE float
#define N 200
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_half } */
/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE _Float16
#define N 200
#include "complex-mla-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_double } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE double
#define N 200
#include "complex-mul-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_float } */
/* { dg-add-options arm_v8_3a_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE float
#define N 200
#include "complex-mul-template.c"

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_complex_add_half } */
/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
/* { dg-add-options arm_v8_1m_mve_fp } */
#define TYPE _Float16
#define N 200
#include "complex-mul-template.c"