(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
riscv/
rvv/
vsetvl/
vlmax_single_block-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32" } */
       3  
       4  /* Test insert-vsetvl PASS whether it's able to eliminate vsetvl for same vtype in VLMAX.  */
       5  
       6  #include "riscv_vector.h"
       7  
       8  void foo1 (void * restrict in, void * restrict out)
       9  {
      10    vbool64_t v1 = *(vbool64_t*)(in + 1);
      11    vbool64_t v2 = *(vbool64_t*)(in + 2);
      12    vbool64_t v3 = *(vbool64_t*)(in + 3);
      13    vbool64_t v4 = *(vbool64_t*)(in + 4);
      14    vbool64_t v5 = *(vbool64_t*)(in + 5);
      15    vbool64_t v6 = *(vbool64_t*)(in + 6);
      16    vbool64_t v7 = *(vbool64_t*)(in + 7);
      17    vbool64_t v8 = *(vbool64_t*)(in + 8);
      18    *(vbool64_t*)(out + 1) = v1;
      19    *(vbool64_t*)(out + 2) = v2;
      20    *(vbool64_t*)(out + 3) = v3;
      21    *(vbool64_t*)(out + 4) = v4;
      22    *(vbool64_t*)(out + 5) = v5;
      23    *(vbool64_t*)(out + 6) = v6;
      24    *(vbool64_t*)(out + 7) = v7;
      25    *(vbool64_t*)(out + 8) = v8;
      26  }
      27  
      28  void foo2 (void * restrict in, void * restrict out)
      29  {
      30    vbool32_t v1 = *(vbool32_t*)(in + 1);
      31    vbool32_t v2 = *(vbool32_t*)(in + 2);
      32    vbool32_t v3 = *(vbool32_t*)(in + 3);
      33    vbool32_t v4 = *(vbool32_t*)(in + 4);
      34    vbool32_t v5 = *(vbool32_t*)(in + 5);
      35    vbool32_t v6 = *(vbool32_t*)(in + 6);
      36    vbool32_t v7 = *(vbool32_t*)(in + 7);
      37    vbool32_t v8 = *(vbool32_t*)(in + 8);
      38    *(vbool32_t*)(out + 1) = v1;
      39    *(vbool32_t*)(out + 2) = v2;
      40    *(vbool32_t*)(out + 3) = v3;
      41    *(vbool32_t*)(out + 4) = v4;
      42    *(vbool32_t*)(out + 5) = v5;
      43    *(vbool32_t*)(out + 6) = v6;
      44    *(vbool32_t*)(out + 7) = v7;
      45    *(vbool32_t*)(out + 8) = v8;
      46  }
      47  
      48  void foo3 (void * restrict in, void * restrict out)
      49  {
      50    vbool16_t v1 = *(vbool16_t*)(in + 1);
      51    vbool16_t v2 = *(vbool16_t*)(in + 2);
      52    vbool16_t v3 = *(vbool16_t*)(in + 3);
      53    vbool16_t v4 = *(vbool16_t*)(in + 4);
      54    vbool16_t v5 = *(vbool16_t*)(in + 5);
      55    vbool16_t v6 = *(vbool16_t*)(in + 6);
      56    vbool16_t v7 = *(vbool16_t*)(in + 7);
      57    vbool16_t v8 = *(vbool16_t*)(in + 8);
      58    *(vbool16_t*)(out + 1) = v1;
      59    *(vbool16_t*)(out + 2) = v2;
      60    *(vbool16_t*)(out + 3) = v3;
      61    *(vbool16_t*)(out + 4) = v4;
      62    *(vbool16_t*)(out + 5) = v5;
      63    *(vbool16_t*)(out + 6) = v6;
      64    *(vbool16_t*)(out + 7) = v7;
      65    *(vbool16_t*)(out + 8) = v8;
      66  }
      67  
      68  void foo4 (void * restrict in, void * restrict out)
      69  {
      70    vbool8_t v1 = *(vbool8_t*)(in + 1);
      71    vbool8_t v2 = *(vbool8_t*)(in + 2);
      72    vbool8_t v3 = *(vbool8_t*)(in + 3);
      73    vbool8_t v4 = *(vbool8_t*)(in + 4);
      74    vbool8_t v5 = *(vbool8_t*)(in + 5);
      75    vbool8_t v6 = *(vbool8_t*)(in + 6);
      76    vbool8_t v7 = *(vbool8_t*)(in + 7);
      77    vbool8_t v8 = *(vbool8_t*)(in + 8);
      78    *(vbool8_t*)(out + 1) = v1;
      79    *(vbool8_t*)(out + 2) = v2;
      80    *(vbool8_t*)(out + 3) = v3;
      81    *(vbool8_t*)(out + 4) = v4;
      82    *(vbool8_t*)(out + 5) = v5;
      83    *(vbool8_t*)(out + 6) = v6;
      84    *(vbool8_t*)(out + 7) = v7;
      85    *(vbool8_t*)(out + 8) = v8;
      86  }
      87  
      88  void foo5 (void * restrict in, void * restrict out)
      89  {
      90    vbool4_t v1 = *(vbool4_t*)(in + 1);
      91    vbool4_t v2 = *(vbool4_t*)(in + 2);
      92    vbool4_t v3 = *(vbool4_t*)(in + 3);
      93    vbool4_t v4 = *(vbool4_t*)(in + 4);
      94    vbool4_t v5 = *(vbool4_t*)(in + 5);
      95    vbool4_t v6 = *(vbool4_t*)(in + 6);
      96    vbool4_t v7 = *(vbool4_t*)(in + 7);
      97    vbool4_t v8 = *(vbool4_t*)(in + 8);
      98    *(vbool4_t*)(out + 1) = v1;
      99    *(vbool4_t*)(out + 2) = v2;
     100    *(vbool4_t*)(out + 3) = v3;
     101    *(vbool4_t*)(out + 4) = v4;
     102    *(vbool4_t*)(out + 5) = v5;
     103    *(vbool4_t*)(out + 6) = v6;
     104    *(vbool4_t*)(out + 7) = v7;
     105    *(vbool4_t*)(out + 8) = v8;
     106  }
     107  
     108  void foo6 (void * restrict in, void * restrict out)
     109  {
     110    vbool2_t v1 = *(vbool2_t*)(in + 1);
     111    vbool2_t v2 = *(vbool2_t*)(in + 2);
     112    vbool2_t v3 = *(vbool2_t*)(in + 3);
     113    vbool2_t v4 = *(vbool2_t*)(in + 4);
     114    vbool2_t v5 = *(vbool2_t*)(in + 5);
     115    vbool2_t v6 = *(vbool2_t*)(in + 6);
     116    vbool2_t v7 = *(vbool2_t*)(in + 7);
     117    vbool2_t v8 = *(vbool2_t*)(in + 8);
     118    *(vbool2_t*)(out + 1) = v1;
     119    *(vbool2_t*)(out + 2) = v2;
     120    *(vbool2_t*)(out + 3) = v3;
     121    *(vbool2_t*)(out + 4) = v4;
     122    *(vbool2_t*)(out + 5) = v5;
     123    *(vbool2_t*)(out + 6) = v6;
     124    *(vbool2_t*)(out + 7) = v7;
     125    *(vbool2_t*)(out + 8) = v8;
     126  }
     127  
     128  void foo7 (void * restrict in, void * restrict out)
     129  {
     130    vbool1_t v1 = *(vbool1_t*)(in + 1);
     131    vbool1_t v2 = *(vbool1_t*)(in + 2);
     132    vbool1_t v3 = *(vbool1_t*)(in + 3);
     133    vbool1_t v4 = *(vbool1_t*)(in + 4);
     134    vbool1_t v5 = *(vbool1_t*)(in + 5);
     135    vbool1_t v6 = *(vbool1_t*)(in + 6);
     136    vbool1_t v7 = *(vbool1_t*)(in + 7);
     137    vbool1_t v8 = *(vbool1_t*)(in + 8);
     138    *(vbool1_t*)(out + 1) = v1;
     139    *(vbool1_t*)(out + 2) = v2;
     140    *(vbool1_t*)(out + 3) = v3;
     141    *(vbool1_t*)(out + 4) = v4;
     142    *(vbool1_t*)(out + 5) = v5;
     143    *(vbool1_t*)(out + 6) = v6;
     144    *(vbool1_t*)(out + 7) = v7;
     145    *(vbool1_t*)(out + 8) = v8;
     146  }
     147  
     148  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" } } } } */
     149  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" } } } } */
     150  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" } } } } */
     151  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" } } } } */
     152  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" } } } } */
     153  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" } } } } */
     154  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" } } } } */