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      vbool64_t v = *(vbool64_t*)(in + 500);
      10      *(vbool64_t*)(out + 500) = v;
      11    } else if (n == 1) {
      12      vbool64_t v = *(vbool64_t*)(in + 600);
      13      *(vbool64_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      vbool64_t v = *(vbool64_t*)(in + 900 + i);
      27      *(vbool64_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      vbool32_t v = *(vbool32_t*)(in + 500);
      35      *(vbool32_t*)(out + 500) = v;
      36    } else if (n == 1) {
      37      vbool32_t v = *(vbool32_t*)(in + 600);
      38      *(vbool32_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      vbool32_t v = *(vbool32_t*)(in + 900 + i);
      52      *(vbool32_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      vbool16_t v = *(vbool16_t*)(in + 500);
      60      *(vbool16_t*)(out + 500) = v;
      61    } else if (n == 1) {
      62      vbool16_t v = *(vbool16_t*)(in + 600);
      63      *(vbool16_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      vbool16_t v = *(vbool16_t*)(in + 900 + i);
      77      *(vbool16_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      vbool8_t v = *(vbool8_t*)(in + 500);
      85      *(vbool8_t*)(out + 500) = v;
      86    } else if (n == 1) {
      87      vbool8_t v = *(vbool8_t*)(in + 600);
      88      *(vbool8_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      vbool8_t v = *(vbool8_t*)(in + 900 + i);
     102      *(vbool8_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      vbool4_t v = *(vbool4_t*)(in + 500);
     110      *(vbool4_t*)(out + 500) = v;
     111    } else if (n == 1) {
     112      vbool4_t v = *(vbool4_t*)(in + 600);
     113      *(vbool4_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      vbool4_t v = *(vbool4_t*)(in + 900 + i);
     127      *(vbool4_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      vbool2_t v = *(vbool2_t*)(in + 500);
     135      *(vbool2_t*)(out + 500) = v;
     136    } else if (n == 1) {
     137      vbool2_t v = *(vbool2_t*)(in + 600);
     138      *(vbool2_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      vbool2_t v = *(vbool2_t*)(in + 900 + i);
     152      *(vbool2_t*)(out + 900 + i) = v;
     153    }
     154  }
     155  
     156  void f7 (int8_t * restrict in, int8_t * restrict out, int n)
     157  {
     158    if (n == 0) {
     159      vbool1_t v = *(vbool1_t*)(in + 500);
     160      *(vbool1_t*)(out + 500) = v;
     161    } else if (n == 1) {
     162      vbool1_t v = *(vbool1_t*)(in + 600);
     163      *(vbool1_t*)(out + 600) = v;
     164    }
     165  
     166    for (int i = 0 ; i < n * n; i++)
     167      out[i] = out[i] + out[i];
     168    
     169    for (int i = 0 ; i < n * n * n; i++)
     170      out[i] = out[i] * out[i];
     171  
     172    for (int i = 0 ; i < n * n * n * n; i++)
     173      out[i] = out[i] * out[i];
     174    
     175    for (int i = 0 ; i < n * n * n * n; i++) {
     176      vbool1_t v = *(vbool1_t*)(in + 900 + i);
     177      *(vbool1_t*)(out + 900 + i) = v;
     178    }
     179  }
     180  
     181  /* { 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" } } } } */
     182  /* { 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" } } } } */
     183  /* { 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" } } } } */
     184  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\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" } } } } */
     185  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\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" } } } } */
     186  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\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" } } } } */
     187  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\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" } } } } */
     188  /* { 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" } } } } */
     189  /* { 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" } } } } */
     190  /* { 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" } } } } */
     191  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\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" } } } } */
     192  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\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" } } } } */
     193  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\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" } } } } */
     194  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\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" } } } } */