(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr102464-copysign-1.c
       1  /* PR target/102464.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -mavx512fp16 -mavx512vl -ftree-vectorize -mfpmath=sse -fdump-tree-optimized" } */
       4  
       5  #include<math.h>
       6  void foo1 (_Float16* __restrict a, _Float16* b, _Float16* c)
       7  {
       8    for (int i = 0; i != 8; i++)
       9      a[i] = copysignf (b[i], c[i]);
      10  }
      11  
      12  void foo2 (_Float16* __restrict a, _Float16* b, _Float16* c)
      13  {
      14    for (int i = 0; i != 8; i++)
      15      a[i] = copysign (b[i], c[i]);
      16  }
      17  
      18  void foo3 (_Float16* __restrict a, _Float16* b, _Float16* c)
      19  {
      20    for (int i = 0; i != 8; i++)
      21      a[i] = copysignl (b[i], c[i]);
      22  }
      23  
      24  void foo4 (float* __restrict a, float* b, float* c)
      25  {
      26    for (int i = 0; i != 4; i++)
      27      a[i] = copysign (b[i], c[i]);
      28  }
      29  
      30  void foo5 (float* __restrict a, float* b, float* c)
      31  {
      32    for (int i = 0; i != 4; i++)
      33      a[i] = copysignl (b[i], c[i]);
      34  }
      35  
      36  void foo6 (double* __restrict a, double* b, double* c)
      37  {
      38    for (int i = 0; i != 4; i++)
      39      a[i] = copysignl (b[i], c[i]);
      40  }
      41  
      42  void foo7 (_Float16* __restrict a, _Float16* b, _Float16* c)
      43  {
      44    a[0] = copysignf (b[0], c[0]);
      45  }
      46  
      47  void foo8 (_Float16* __restrict a, _Float16* b, _Float16* c)
      48  {
      49    a[0] = copysign (b[0], c[0]);
      50  }
      51  
      52  void foo9 (_Float16* __restrict a, _Float16* b, _Float16* c)
      53  {
      54    a[0] = copysignl (b[0], c[0]);
      55  }
      56  
      57  void foo10 (float* __restrict a, float* b, float* c)
      58  {
      59    a[0] = copysign (b[0], c[0]);
      60  }
      61  
      62  void foo11 (float* __restrict a, float* b, float* c)
      63  {
      64    a[0] = copysignl (b[0], c[0]);
      65  }
      66  
      67  void foo12 (double* __restrict a, double* b, double* c)
      68  {
      69    a[0] = copysignl (b[0], c[0]);
      70  }
      71  
      72  /* { dg-final { scan-assembler-not "vcvtsh2s\[sd\]" } } */
      73  /* { dg-final { scan-assembler-not "vcvtss2sd" } } */
      74  /* { dg-final { scan-assembler-not "fld" } } */
      75  /* { dg-final { scan-assembler-not "vcvtph2p\[sd\]" } } */
      76  /* { dg-final { scan-assembler-not "vcvtps2pd" } } */
      77  /* { dg-final { scan-assembler-not "extendhfxf" } } */
      78  /* { dg-final { scan-assembler-not "\\\{1to8\\\}" } } */
      79  /* { dg-final { scan-tree-dump-times "\.COPYSIGN" 12 "optimized" } } */
      80  /* { dg-final { scan-assembler-times "vpternlog" 12 } } */