(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
riscv/
rvv/
vsetvl/
vlmax_miss_default-14.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    if (cond == 1)
      10      {
      11        vbool64_t v = *(vbool64_t*)(in + 100);
      12        *(vbool64_t*)(out + 100) = v;
      13      }
      14    else if (cond == 2)
      15      {
      16        vbool64_t v = *(vbool64_t*)(in + 200);
      17        *(vbool64_t*)(out + 200) = v;
      18      }
      19    else if (cond == 3)
      20      {
      21        vbool64_t v = *(vbool64_t*)(in + 300);
      22        *(vbool64_t*)(out + 300) = v;
      23      }
      24    for (int i = 0; i < n; i++)
      25      {
      26        vbool64_t v = *(vbool64_t*)(in + i);
      27        *(vbool64_t*)(out + i) = v;
      28      }
      29  }
      30  
      31  void f2 (void * restrict in, void * restrict out, int n, int cond)
      32  {
      33    if (cond == 1)
      34      {
      35        vbool32_t v = *(vbool32_t*)(in + 100);
      36        *(vbool32_t*)(out + 100) = v;
      37      }
      38    else if (cond == 2)
      39      {
      40        vbool32_t v = *(vbool32_t*)(in + 200);
      41        *(vbool32_t*)(out + 200) = v;
      42      }
      43    else if (cond == 3)
      44      {
      45        vbool32_t v = *(vbool32_t*)(in + 300);
      46        *(vbool32_t*)(out + 300) = v;
      47      }
      48    for (int i = 0; i < n; i++)
      49      {
      50        vbool32_t v = *(vbool32_t*)(in + i);
      51        *(vbool32_t*)(out + i) = v;
      52      }
      53  }
      54  
      55  void f3 (void * restrict in, void * restrict out, int n, int cond)
      56  {
      57    if (cond == 1)
      58      {
      59        vbool16_t v = *(vbool16_t*)(in + 100);
      60        *(vbool16_t*)(out + 100) = v;
      61      }
      62    else if (cond == 2)
      63      {
      64        vbool16_t v = *(vbool16_t*)(in + 200);
      65        *(vbool16_t*)(out + 200) = v;
      66      }
      67    else if (cond == 3)
      68      {
      69        vbool16_t v = *(vbool16_t*)(in + 300);
      70        *(vbool16_t*)(out + 300) = v;
      71      }
      72    for (int i = 0; i < n; i++)
      73      {
      74        vbool16_t v = *(vbool16_t*)(in + i);
      75        *(vbool16_t*)(out + i) = v;
      76      }
      77  }
      78  
      79  void f4 (void * restrict in, void * restrict out, int n, int cond)
      80  {
      81    if (cond == 1)
      82      {
      83        vbool8_t v = *(vbool8_t*)(in + 100);
      84        *(vbool8_t*)(out + 100) = v;
      85      }
      86    else if (cond == 2)
      87      {
      88        vbool8_t v = *(vbool8_t*)(in + 200);
      89        *(vbool8_t*)(out + 200) = v;
      90      }
      91    else if (cond == 3)
      92      {
      93        vbool8_t v = *(vbool8_t*)(in + 300);
      94        *(vbool8_t*)(out + 300) = v;
      95      }
      96    for (int i = 0; i < n; i++)
      97      {
      98        vbool8_t v = *(vbool8_t*)(in + i);
      99        *(vbool8_t*)(out + i) = v;
     100      }
     101  }
     102  
     103  void f5 (void * restrict in, void * restrict out, int n, int cond)
     104  {
     105    if (cond == 1)
     106      {
     107        vbool4_t v = *(vbool4_t*)(in + 100);
     108        *(vbool4_t*)(out + 100) = v;
     109      }
     110    else if (cond == 2)
     111      {
     112        vbool4_t v = *(vbool4_t*)(in + 200);
     113        *(vbool4_t*)(out + 200) = v;
     114      }
     115    else if (cond == 3)
     116      {
     117        vbool4_t v = *(vbool4_t*)(in + 300);
     118        *(vbool4_t*)(out + 300) = v;
     119      }
     120    for (int i = 0; i < n; i++)
     121      {
     122        vbool4_t v = *(vbool4_t*)(in + i);
     123        *(vbool4_t*)(out + i) = v;
     124      }
     125  }
     126  
     127  void f6 (void * restrict in, void * restrict out, int n, int cond)
     128  {
     129    if (cond == 1)
     130      {
     131        vbool2_t v = *(vbool2_t*)(in + 100);
     132        *(vbool2_t*)(out + 100) = v;
     133      }
     134    else if (cond == 2)
     135      {
     136        vbool2_t v = *(vbool2_t*)(in + 200);
     137        *(vbool2_t*)(out + 200) = v;
     138      }
     139    else if (cond == 3)
     140      {
     141        vbool2_t v = *(vbool2_t*)(in + 300);
     142        *(vbool2_t*)(out + 300) = v;
     143      }
     144    for (int i = 0; i < n; i++)
     145      {
     146        vbool2_t v = *(vbool2_t*)(in + i);
     147        *(vbool2_t*)(out + i) = v;
     148      }
     149  }
     150  
     151  void f7 (void * restrict in, void * restrict out, int n, int cond)
     152  {
     153    if (cond == 1)
     154      {
     155        vbool1_t v = *(vbool1_t*)(in + 100);
     156        *(vbool1_t*)(out + 100) = v;
     157      }
     158    else if (cond == 2)
     159      {
     160        vbool1_t v = *(vbool1_t*)(in + 200);
     161        *(vbool1_t*)(out + 200) = v;
     162      }
     163    else if (cond == 3)
     164      {
     165        vbool1_t v = *(vbool1_t*)(in + 300);
     166        *(vbool1_t*)(out + 300) = v;
     167      }
     168    for (int i = 0; i < n; i++)
     169      {
     170        vbool1_t v = *(vbool1_t*)(in + i);
     171        *(vbool1_t*)(out + i) = v;
     172      }
     173  }
     174  
     175  /* { 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" } } } } */
     176  /* { 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" } } } } */
     177  /* { 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" } } } } */
     178  /* { 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" } } } } */
     179  /* { 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" } } } } */
     180  /* { 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" } } } } */
     181  /* { 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" } } } } */
     182  
     183