(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
pr104698-2.c
       1  /* { dg-require-effective-target int128     } */
       2  /* { dg-require-effective-target power10_ok } */
       3  /* { dg-options "-mdejagnu-cpu=power10 -O2" } */
       4  
       5  /* PR target/104694 involved GCC generating vextsd2q to convent long long to
       6     __int128_t when the long long value was in the GPR register.  This test
       7     verifies that if the result is in the Altivec registers, we still want to
       8     generate vextsd2q.  We use __int128_t to indicate that we want the result of
       9     the conversion to be in an Altivec register. */
      10  
      11  void do_div_1 (__int128_t *p, __int128_t *q, long long r)
      12  {
      13    *p = *q / r;		/* mtvsrdd, vextsd2q, vdivsq.  */
      14  }
      15  
      16  /* Test the optimization in vsx.md to use lxvrdx instead of ld and mtvsrdd if
      17     the value is coming from memory.  */
      18  
      19  void do_div_2 (__int128_t *p, __int128_t *q, long long *r)
      20  {
      21    *p = *q / r[2];	/* lxvrdx, vextsd2q, vdivsq.  */
      22  }
      23  
      24  /* { dg-final { scan-assembler-not   {\mld\M}         } } */
      25  /* { dg-final { scan-assembler-not   {\mmfvsrd\M}     } } */
      26  /* { dg-final { scan-assembler-not   {\mmfvsrld\M}    } } */
      27  /* { dg-final { scan-assembler-not   {\msradi\M}      } } */
      28  /* { dg-final { scan-assembler-times {\mlxv\M}      2 } } */
      29  /* { dg-final { scan-assembler-times {\mlxvrdx\M}   1 } } */
      30  /* { dg-final { scan-assembler-times {\mmtvsrdd\M}  1 } } */
      31  /* { dg-final { scan-assembler-times {\mstxv\M}     2 } } */
      32  /* { dg-final { scan-assembler-times {\mvdivsq\M}   2 } } */
      33  /* { dg-final { scan-assembler-times {\mvextsd2q\M} 2 } } */