(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
pr102868.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target powerpc_vsx_ok } */
       3  /* { dg-options "-O2 -mvsx" } */
       4  
       5  #include <altivec.h>
       6  vector float b = {0.0f, 0.0f, 0.0f, 0.0f};
       7  
       8  
       9  vector float foo1 (vector float x)
      10  {
      11    vector int c = {0, 1, 4, 5};
      12    return __builtin_shuffle (x, b, c);
      13  }
      14  
      15  vector float foo2 (vector float x)
      16  {
      17    vector int c = {2, 3, 4, 5};
      18    return __builtin_shuffle (x, b, c);
      19  }
      20  
      21  vector float foo3 (vector float x)
      22  {
      23    vector int c = {0, 1, 6, 7};
      24    return __builtin_shuffle (x, b, c);
      25  }
      26  
      27  vector float foo4 (vector float x)
      28  {
      29    vector int c = {2, 3, 6, 7};
      30    return __builtin_shuffle (x, b, c);
      31  }
      32  
      33  vector unsigned char foo5 (vector unsigned char x)
      34  {
      35    vector unsigned char c = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7};
      36    return __builtin_shuffle (x, c);
      37  }
      38  
      39  vector unsigned char foo6 (vector unsigned char x)
      40  {
      41    vector unsigned char c = {8, 9, 10, 11, 12, 13, 14, 15, 8, 9, 10, 11, 12, 13, 14, 15};
      42    return __builtin_shuffle (x, c);
      43  }
      44  
      45  vector unsigned char foo7 (vector unsigned char x)
      46  {
      47    vector unsigned char c = {8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7};
      48    return __builtin_shuffle (x, c);
      49  }
      50  
      51  /* { dg-final { scan-assembler-times {\mxxpermdi\M} 7 { target has_arch_pwr9 } } } */
      52  /* { dg-final { scan-assembler-times {\mxxpermdi\M} 7 { target { {! has_arch_pwr9} && be } } } } */
      53  /* { dg-final { scan-assembler-times {\mxxpermdi\M} 11 { target { {! has_arch_pwr9} && le } } } } */