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