(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
riscv/
rvv/
vsetvl/
vlmax_bb_prop-4.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    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    } else {
      15      vbool64_t v = *(vbool64_t*)(in + 700);
      16      *(vbool64_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      vbool64_t v = *(vbool64_t*)(in + 900 + i);
      30      *(vbool64_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      vbool32_t v = *(vbool32_t*)(in + 500);
      38      *(vbool32_t*)(out + 500) = v;
      39    } else if (n == 1) {
      40      vbool32_t v = *(vbool32_t*)(in + 600);
      41      *(vbool32_t*)(out + 600) = v;
      42    } else {
      43      vbool32_t v = *(vbool32_t*)(in + 700);
      44      *(vbool32_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      vbool32_t v = *(vbool32_t*)(in + 900 + i);
      58      *(vbool32_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      vbool16_t v = *(vbool16_t*)(in + 500);
      66      *(vbool16_t*)(out + 500) = v;
      67    } else if (n == 1) {
      68      vbool16_t v = *(vbool16_t*)(in + 600);
      69      *(vbool16_t*)(out + 600) = v;
      70    } else {
      71      vbool16_t v = *(vbool16_t*)(in + 700);
      72      *(vbool16_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      vbool16_t v = *(vbool16_t*)(in + 900 + i);
      86      *(vbool16_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      vbool8_t v = *(vbool8_t*)(in + 500);
      94      *(vbool8_t*)(out + 500) = v;
      95    } else if (n == 1) {
      96      vbool8_t v = *(vbool8_t*)(in + 600);
      97      *(vbool8_t*)(out + 600) = v;
      98    } else {
      99      vbool8_t v = *(vbool8_t*)(in + 700);
     100      *(vbool8_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      vbool8_t v = *(vbool8_t*)(in + 900 + i);
     114      *(vbool8_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      vbool4_t v = *(vbool4_t*)(in + 500);
     122      *(vbool4_t*)(out + 500) = v;
     123    } else if (n == 1) {
     124      vbool4_t v = *(vbool4_t*)(in + 600);
     125      *(vbool4_t*)(out + 600) = v;
     126    } else {
     127      vbool4_t v = *(vbool4_t*)(in + 700);
     128      *(vbool4_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      vbool4_t v = *(vbool4_t*)(in + 900 + i);
     142      *(vbool4_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      vbool2_t v = *(vbool2_t*)(in + 500);
     150      *(vbool2_t*)(out + 500) = v;
     151    } else if (n == 1) {
     152      vbool2_t v = *(vbool2_t*)(in + 600);
     153      *(vbool2_t*)(out + 600) = v;
     154    } else {
     155      vbool2_t v = *(vbool2_t*)(in + 700);
     156      *(vbool2_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      vbool2_t v = *(vbool2_t*)(in + 900 + i);
     170      *(vbool2_t*)(out + 900 + i) = v;
     171    }
     172  }
     173  
     174  void f7 (int8_t * restrict in, int8_t * restrict out, int n)
     175  {
     176    if (n == 0) {
     177      vbool1_t v = *(vbool1_t*)(in + 500);
     178      *(vbool1_t*)(out + 500) = v;
     179    } else if (n == 1) {
     180      vbool1_t v = *(vbool1_t*)(in + 600);
     181      *(vbool1_t*)(out + 600) = v;
     182    } else {
     183      vbool1_t v = *(vbool1_t*)(in + 700);
     184      *(vbool1_t*)(out + 700) = v;
     185    }
     186  
     187    for (int i = 0 ; i < n * n; i++)
     188      out[i] = out[i] + out[i];
     189    
     190    for (int i = 0 ; i < n * n * n; i++)
     191      out[i] = out[i] * out[i];
     192  
     193    for (int i = 0 ; i < n * n * n * n; i++)
     194      out[i] = out[i] * out[i];
     195    
     196    for (int i = 0 ; i < n * n * n * n; i++) {
     197      vbool1_t v = *(vbool1_t*)(in + 900 + i);
     198      *(vbool1_t*)(out + 900 + i) = v;
     199    }
     200  }
     201  
     202  /* { 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" } } } } */
     203  /* { 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" } } } } */
     204  /* { 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" } } } } */
     205  /* { 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 "-O2" } } } } */
     206  /* { 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 "-O2" } } } } */
     207  /* { 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 "-O2" } } } } */
     208  /* { 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 "-O2" } } } } */
     209  /* { dg-final { scan-assembler-times {add\ta[0-7],a[0-7],a[0-7]\s+\.L[0-9][0-9]\:\s+vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 6 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-O2" } } } } */
     210  /* { dg-final { scan-assembler-times {add\ta[0-7],a[0-7],a[0-7]\s+\.L[0-9][0-9][0-9]\:\s+vlm\.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" } } } } */