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