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