(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
riscv/
rvv/
vsetvl/
vlmax_phi-28.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32" } */
       3  
       4  #include "riscv_vector.h"
       5  
       6  /* The for loop body should not have vsetvl instruction.  */
       7  void f (void * restrict in, void * restrict out, int n, int cond)
       8  {
       9    switch (cond)
      10    {
      11    case 1:{
      12      vbool64_t v = *(vbool64_t*)(in + 100);
      13      *(vbool64_t*)(out + 100) = v;
      14      break;
      15    }
      16    case 2:{
      17      vbool64_t v = *(vbool64_t*)(in + 200);
      18      *(vbool64_t*)(out + 100) = v;
      19      break;
      20    }
      21    case 3:{
      22      vbool64_t v = *(vbool64_t*)(in + 300);
      23      *(vbool64_t*)(out + 100) = v;
      24      break;
      25    }
      26    default:{
      27      vbool64_t v = *(vbool64_t*)(in + 400);
      28      *(vbool64_t*)(out + 400) = v;
      29      break;
      30    }
      31    }
      32    for (int i = 0; i < n; i++)
      33      {
      34        vbool64_t v = *(vbool64_t*)(in + i);
      35        *(vbool64_t*)(out + i) = v;
      36      }
      37  }
      38  
      39  void f2 (void * restrict in, void * restrict out, int n, int cond)
      40  {
      41    switch (cond)
      42    {
      43    case 1:{
      44      vbool32_t v = *(vbool32_t*)(in + 100);
      45      *(vbool32_t*)(out + 100) = v;
      46      break;
      47    }
      48    case 2:{
      49      vbool32_t v = *(vbool32_t*)(in + 200);
      50      *(vbool32_t*)(out + 100) = v;
      51      break;
      52    }
      53    case 3:{
      54      vbool32_t v = *(vbool32_t*)(in + 300);
      55      *(vbool32_t*)(out + 100) = v;
      56      break;
      57    }
      58    default:{
      59      vbool32_t v = *(vbool32_t*)(in + 400);
      60      *(vbool32_t*)(out + 400) = v;
      61      break;
      62    }
      63    }
      64    for (int i = 0; i < n; i++)
      65      {
      66        vbool32_t v = *(vbool32_t*)(in + i);
      67        *(vbool32_t*)(out + i) = v;
      68      }
      69  }
      70  
      71  void f3 (void * restrict in, void * restrict out, int n, int cond)
      72  {
      73    switch (cond)
      74    {
      75    case 1:{
      76      vbool16_t v = *(vbool16_t*)(in + 100);
      77      *(vbool16_t*)(out + 100) = v;
      78      break;
      79    }
      80    case 2:{
      81      vbool16_t v = *(vbool16_t*)(in + 200);
      82      *(vbool16_t*)(out + 100) = v;
      83      break;
      84    }
      85    case 3:{
      86      vbool16_t v = *(vbool16_t*)(in + 300);
      87      *(vbool16_t*)(out + 100) = v;
      88      break;
      89    }
      90    default:{
      91      vbool16_t v = *(vbool16_t*)(in + 400);
      92      *(vbool16_t*)(out + 400) = v;
      93      break;
      94    }
      95    }
      96    for (int i = 0; i < n; i++)
      97      {
      98        vbool16_t v = *(vbool16_t*)(in + i);
      99        *(vbool16_t*)(out + i) = v;
     100      }
     101  }
     102  
     103  void f4 (void * restrict in, void * restrict out, int n, int cond)
     104  {
     105    switch (cond)
     106    {
     107    case 1:{
     108      vbool8_t v = *(vbool8_t*)(in + 100);
     109      *(vbool8_t*)(out + 100) = v;
     110      break;
     111    }
     112    case 2:{
     113      vbool8_t v = *(vbool8_t*)(in + 200);
     114      *(vbool8_t*)(out + 100) = v;
     115      break;
     116    }
     117    case 3:{
     118      vbool8_t v = *(vbool8_t*)(in + 300);
     119      *(vbool8_t*)(out + 100) = v;
     120      break;
     121    }
     122    default:{
     123      vbool8_t v = *(vbool8_t*)(in + 400);
     124      *(vbool8_t*)(out + 400) = v;
     125      break;
     126    }
     127    }
     128    for (int i = 0; i < n; i++)
     129      {
     130        vbool8_t v = *(vbool8_t*)(in + i);
     131        *(vbool8_t*)(out + i) = v;
     132      }
     133  }
     134  
     135  void f5 (void * restrict in, void * restrict out, int n, int cond)
     136  {
     137    switch (cond)
     138    {
     139    case 1:{
     140      vbool4_t v = *(vbool4_t*)(in + 100);
     141      *(vbool4_t*)(out + 100) = v;
     142      break;
     143    }
     144    case 2:{
     145      vbool4_t v = *(vbool4_t*)(in + 200);
     146      *(vbool4_t*)(out + 100) = v;
     147      break;
     148    }
     149    case 3:{
     150      vbool4_t v = *(vbool4_t*)(in + 300);
     151      *(vbool4_t*)(out + 100) = v;
     152      break;
     153    }
     154    default:{
     155      vbool4_t v = *(vbool4_t*)(in + 400);
     156      *(vbool4_t*)(out + 400) = v;
     157      break;
     158    }
     159    }
     160    for (int i = 0; i < n; i++)
     161      {
     162        vbool4_t v = *(vbool4_t*)(in + i);
     163        *(vbool4_t*)(out + i) = v;
     164      }
     165  }
     166  
     167  void f6 (void * restrict in, void * restrict out, int n, int cond)
     168  {
     169    switch (cond)
     170    {
     171    case 1:{
     172      vbool2_t v = *(vbool2_t*)(in + 100);
     173      *(vbool2_t*)(out + 100) = v;
     174      break;
     175    }
     176    case 2:{
     177      vbool2_t v = *(vbool2_t*)(in + 200);
     178      *(vbool2_t*)(out + 100) = v;
     179      break;
     180    }
     181    case 3:{
     182      vbool2_t v = *(vbool2_t*)(in + 300);
     183      *(vbool2_t*)(out + 100) = v;
     184      break;
     185    }
     186    default:{
     187      vbool2_t v = *(vbool2_t*)(in + 400);
     188      *(vbool2_t*)(out + 400) = v;
     189      break;
     190    }
     191    }
     192    for (int i = 0; i < n; i++)
     193      {
     194        vbool2_t v = *(vbool2_t*)(in + i);
     195        *(vbool2_t*)(out + i) = v;
     196      }
     197  }
     198  
     199  void f7 (void * restrict in, void * restrict out, int n, int cond)
     200  {
     201    switch (cond)
     202    {
     203    case 1:{
     204      vbool1_t v = *(vbool1_t*)(in + 100);
     205      *(vbool1_t*)(out + 100) = v;
     206      break;
     207    }
     208    case 2:{
     209      vbool1_t v = *(vbool1_t*)(in + 200);
     210      *(vbool1_t*)(out + 100) = v;
     211      break;
     212    }
     213    case 3:{
     214      vbool1_t v = *(vbool1_t*)(in + 300);
     215      *(vbool1_t*)(out + 100) = v;
     216      break;
     217    }
     218    default:{
     219      vbool1_t v = *(vbool1_t*)(in + 400);
     220      *(vbool1_t*)(out + 400) = v;
     221      break;
     222    }
     223    }
     224    for (int i = 0; i < n; i++)
     225      {
     226        vbool1_t v = *(vbool1_t*)(in + i);
     227        *(vbool1_t*)(out + i) = v;
     228      }
     229  }
     230  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */
     231  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */
     232  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */
     233  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */
     234  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */
     235  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */
     236  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */
     237  /* { dg-final { scan-assembler-times {ble\t[a-x0-9]+,zero,.L[0-9]+\s*\.L[0-9]+\:\s*vlm\.v\s*v[0-9]+,0\([a-x0-9]+\)} 7 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto"  } } } } */