1  /* { dg-do compile} */
       2  /* { dg-options "-O2 -mavx512fp16 -mavx512vl" } */
       3  
       4  #include <immintrin.h>
       5  __m128h
       6  __attribute__ ((noinline, noclone))
       7  vadd128 (__m128h a, __m128h b)
       8  {
       9    return a + b;
      10  }
      11  
      12  __m256h
      13  __attribute__ ((noinline, noclone))
      14  vadd256 (__m256h a, __m256h b)
      15  {
      16    return a + b;
      17  }
      18  
      19  __m128h
      20  __attribute__ ((noinline, noclone))
      21  vsub128 (__m128h a, __m128h b)
      22  {
      23    return a - b;
      24  }
      25  
      26  __m256h
      27  __attribute__ ((noinline, noclone))
      28  vsub256 (__m256h a, __m256h b)
      29  {
      30    return a - b;
      31  }
      32  
      33  __m128h
      34  __attribute__ ((noinline, noclone))
      35  vmul128 (__m128h a, __m128h b)
      36  {
      37    return a * b;
      38  }
      39  
      40  __m256h
      41  __attribute__ ((noinline, noclone))
      42  vmul256 (__m256h a, __m256h b)
      43  {
      44    return a * b;
      45  }
      46  
      47  __m128h
      48  __attribute__ ((noinline, noclone))
      49  vdiv128 (__m128h a, __m128h b)
      50  {
      51    return a / b;
      52  }
      53  
      54  __m256h
      55  __attribute__ ((noinline, noclone))
      56  vdiv256 (__m256h a, __m256h b)
      57  {
      58    return a / b;
      59  }
      60  
      61  /* { dg-final { scan-assembler-times "vaddph\[ \\t\]+\[^\n\r\]*%xmm\[01\]" 1 } } */
      62  /* { dg-final { scan-assembler-times "vaddph\[ \\t\]+\[^\n\r\]*%ymm\[01\]" 1 } } */
      63  /* { dg-final { scan-assembler-times "vsubph\[ \\t\]+\[^\n\r\]*%xmm\[01\]" 1 } } */
      64  /* { dg-final { scan-assembler-times "vsubph\[ \\t\]+\[^\n\r\]*%ymm\[01\]" 1 } } */
      65  /* { dg-final { scan-assembler-times "vmulph\[ \\t\]+\[^\n\r\]*%xmm\[01\]" 1 } } */
      66  /* { dg-final { scan-assembler-times "vmulph\[ \\t\]+\[^\n\r\]*%ymm\[01\]" 1 } } */
      67  /* { dg-final { scan-assembler-times "vdivph\[ \\t\]+\[^\n\r\]*%xmm\[01\]" 1 } } */
      68  /* { dg-final { scan-assembler-times "vdivph\[ \\t\]+\[^\n\r\]*%ymm\[01\]" 1 } } */