1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32" } */
       3  
       4  #include "riscv_vector.h"
       5  
       6  /* The for loop body should not have vsetvl instruction.  */
       7  void f (void * restrict in, void * restrict out, int n, int cond)
       8  {
       9    if (cond == 1)
      10      {
      11        vbool64_t v = *(vbool64_t*)(in + 100);
      12        *(vbool64_t*)(out + 100) = v;
      13      }
      14    else if (cond == 2)
      15      {
      16        vbool64_t v = *(vbool64_t*)(in + 200);
      17        *(vbool64_t*)(out + 200) = v;
      18      }
      19    else if (cond == 3)
      20      {
      21        vbool64_t v = *(vbool64_t*)(in + 300);
      22        *(vbool64_t*)(out + 300) = v;
      23      }
      24    else
      25      {
      26        vbool64_t v = *(vbool64_t*)(in + 400);
      27        *(vbool64_t*)(out + 400) = v;
      28      }
      29    for (int i = 0; i < n; i++)
      30      {
      31        vbool64_t v = *(vbool64_t*)(in + i);
      32        *(vbool64_t*)(out + i) = v;
      33      }
      34  }
      35  
      36  void f2 (void * restrict in, void * restrict out, int n, int cond)
      37  {
      38    if (cond == 1)
      39      {
      40        vbool32_t v = *(vbool32_t*)(in + 100);
      41        *(vbool32_t*)(out + 100) = v;
      42      }
      43    else if (cond == 2)
      44      {
      45        vbool32_t v = *(vbool32_t*)(in + 200);
      46        *(vbool32_t*)(out + 200) = v;
      47      }
      48    else if (cond == 3)
      49      {
      50        vbool32_t v = *(vbool32_t*)(in + 300);
      51        *(vbool32_t*)(out + 300) = v;
      52      }
      53    else
      54      {
      55        vbool32_t v = *(vbool32_t*)(in + 400);
      56        *(vbool32_t*)(out + 400) = v;
      57      }
      58    for (int i = 0; i < n; i++)
      59      {
      60        vbool32_t v = *(vbool32_t*)(in + i);
      61        *(vbool32_t*)(out + i) = v;
      62      }
      63  }
      64  
      65  void f3 (void * restrict in, void * restrict out, int n, int cond)
      66  {
      67    if (cond == 1)
      68      {
      69        vbool16_t v = *(vbool16_t*)(in + 100);
      70        *(vbool16_t*)(out + 100) = v;
      71      }
      72    else if (cond == 2)
      73      {
      74        vbool16_t v = *(vbool16_t*)(in + 200);
      75        *(vbool16_t*)(out + 200) = v;
      76      }
      77    else if (cond == 3)
      78      {
      79        vbool16_t v = *(vbool16_t*)(in + 300);
      80        *(vbool16_t*)(out + 300) = v;
      81      }
      82    else
      83      {
      84        vbool16_t v = *(vbool16_t*)(in + 400);
      85        *(vbool16_t*)(out + 400) = v;
      86      }
      87    for (int i = 0; i < n; i++)
      88      {
      89        vbool16_t v = *(vbool16_t*)(in + i);
      90        *(vbool16_t*)(out + i) = v;
      91      }
      92  }
      93  
      94  void f4 (void * restrict in, void * restrict out, int n, int cond)
      95  {
      96    if (cond == 1)
      97      {
      98        vbool8_t v = *(vbool8_t*)(in + 100);
      99        *(vbool8_t*)(out + 100) = v;
     100      }
     101    else if (cond == 2)
     102      {
     103        vbool8_t v = *(vbool8_t*)(in + 200);
     104        *(vbool8_t*)(out + 200) = v;
     105      }
     106    else if (cond == 3)
     107      {
     108        vbool8_t v = *(vbool8_t*)(in + 300);
     109        *(vbool8_t*)(out + 300) = v;
     110      }
     111    else
     112      {
     113        vbool8_t v = *(vbool8_t*)(in + 400);
     114        *(vbool8_t*)(out + 400) = v;
     115      }
     116    for (int i = 0; i < n; i++)
     117      {
     118        vbool8_t v = *(vbool8_t*)(in + i);
     119        *(vbool8_t*)(out + i) = v;
     120      }
     121  }
     122  
     123  void f5 (void * restrict in, void * restrict out, int n, int cond)
     124  {
     125    if (cond == 1)
     126      {
     127        vbool4_t v = *(vbool4_t*)(in + 100);
     128        *(vbool4_t*)(out + 100) = v;
     129      }
     130    else if (cond == 2)
     131      {
     132        vbool4_t v = *(vbool4_t*)(in + 200);
     133        *(vbool4_t*)(out + 200) = v;
     134      }
     135    else if (cond == 3)
     136      {
     137        vbool4_t v = *(vbool4_t*)(in + 300);
     138        *(vbool4_t*)(out + 300) = v;
     139      }
     140    else
     141      {
     142        vbool4_t v = *(vbool4_t*)(in + 400);
     143        *(vbool4_t*)(out + 400) = v;
     144      }
     145    for (int i = 0; i < n; i++)
     146      {
     147        vbool4_t v = *(vbool4_t*)(in + i);
     148        *(vbool4_t*)(out + i) = v;
     149      }
     150  }
     151  
     152  void f6 (void * restrict in, void * restrict out, int n, int cond)
     153  {
     154    if (cond == 1)
     155      {
     156        vbool2_t v = *(vbool2_t*)(in + 100);
     157        *(vbool2_t*)(out + 100) = v;
     158      }
     159    else if (cond == 2)
     160      {
     161        vbool2_t v = *(vbool2_t*)(in + 200);
     162        *(vbool2_t*)(out + 200) = v;
     163      }
     164    else if (cond == 3)
     165      {
     166        vbool2_t v = *(vbool2_t*)(in + 300);
     167        *(vbool2_t*)(out + 300) = v;
     168      }
     169    else
     170      {
     171        vbool2_t v = *(vbool2_t*)(in + 400);
     172        *(vbool2_t*)(out + 400) = v;
     173      }
     174    for (int i = 0; i < n; i++)
     175      {
     176        vbool2_t v = *(vbool2_t*)(in + i);
     177        *(vbool2_t*)(out + i) = v;
     178      }
     179  }
     180  
     181  void f7 (void * restrict in, void * restrict out, int n, int cond)
     182  {
     183    if (cond == 1)
     184      {
     185        vbool1_t v = *(vbool1_t*)(in + 100);
     186        *(vbool1_t*)(out + 100) = v;
     187      }
     188    else if (cond == 2)
     189      {
     190        vbool1_t v = *(vbool1_t*)(in + 200);
     191        *(vbool1_t*)(out + 200) = v;
     192      }
     193    else if (cond == 3)
     194      {
     195        vbool1_t v = *(vbool1_t*)(in + 300);
     196        *(vbool1_t*)(out + 300) = v;
     197      }
     198    else
     199      {
     200        vbool1_t v = *(vbool1_t*)(in + 400);
     201        *(vbool1_t*)(out + 400) = v;
     202      }
     203    for (int i = 0; i < n; i++)
     204      {
     205        vbool1_t v = *(vbool1_t*)(in + i);
     206        *(vbool1_t*)(out + i) = v;
     207      }
     208  }
     209  
     210  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
     211  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
     212  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
     213  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
     214  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
     215  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
     216  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
     217  /* { dg-final { scan-assembler-times {ble\t[a-x0-9]+,zero,.L[0-9]+\s+\.L[0-9]+\:\s+vlm\.v\s+v[0-9]+,0\([a-x0-9]+\)} 7 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */