1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */
       3  
       4  #include "riscv_vector.h"
       5  
       6  void f (int * restrict in, int * restrict out, int n, int cond)
       7  {
       8    if (cond == 1)
       9      {
      10        vbool64_t v = *(vbool64_t*)(in + 100);
      11        *(vbool64_t*)(out + 100) = v;
      12      }
      13    else
      14      {
      15        if (cond == 2)
      16          {
      17            vbool64_t v = *(vbool64_t*)(in + 200);
      18            *(vbool64_t*)(out + 200) = v;
      19            out[1000] = 8000;
      20          }
      21      }
      22    for (int i = 0; i < n; i++)
      23      {
      24        vbool64_t v = *(vbool64_t*)(in + i);
      25        *(vbool64_t*)(out + i) = v;
      26      }
      27  }
      28  
      29  void f2 (int * restrict in, int * restrict out, int n, int cond)
      30  {
      31    if (cond == 1)
      32      {
      33        vbool32_t v = *(vbool32_t*)(in + 100);
      34        *(vbool32_t*)(out + 100) = v;
      35      }
      36    else
      37      {
      38        if (cond == 2)
      39          {
      40            vbool32_t v = *(vbool32_t*)(in + 200);
      41            *(vbool32_t*)(out + 200) = v;
      42            out[1000] = 8000;
      43          }
      44      }
      45    for (int i = 0; i < n; i++)
      46      {
      47        vbool32_t v = *(vbool32_t*)(in + i);
      48        *(vbool32_t*)(out + i) = v;
      49      }
      50  }
      51  
      52  void f3 (int * restrict in, int * restrict out, int n, int cond)
      53  {
      54    if (cond == 1)
      55      {
      56        vbool16_t v = *(vbool16_t*)(in + 100);
      57        *(vbool16_t*)(out + 100) = v;
      58      }
      59    else
      60      {
      61        if (cond == 2)
      62          {
      63            vbool16_t v = *(vbool16_t*)(in + 200);
      64            *(vbool16_t*)(out + 200) = v;
      65            out[1000] = 8000;
      66          }
      67      }
      68    for (int i = 0; i < n; i++)
      69      {
      70        vbool16_t v = *(vbool16_t*)(in + i);
      71        *(vbool16_t*)(out + i) = v;
      72      }
      73  }
      74  
      75  void f4 (int * restrict in, int * restrict out, int n, int cond)
      76  {
      77    if (cond == 1)
      78      {
      79        vbool8_t v = *(vbool8_t*)(in + 100);
      80        *(vbool8_t*)(out + 100) = v;
      81      }
      82    else
      83      {
      84        if (cond == 2)
      85          {
      86            vbool8_t v = *(vbool8_t*)(in + 200);
      87            *(vbool8_t*)(out + 200) = v;
      88            out[1000] = 8000;
      89          }
      90      }
      91    for (int i = 0; i < n; i++)
      92      {
      93        vbool8_t v = *(vbool8_t*)(in + i);
      94        *(vbool8_t*)(out + i) = v;
      95      }
      96  }
      97  
      98  void f5 (int * restrict in, int * restrict out, int n, int cond)
      99  {
     100    if (cond == 1)
     101      {
     102        vbool4_t v = *(vbool4_t*)(in + 100);
     103        *(vbool4_t*)(out + 100) = v;
     104      }
     105    else
     106      {
     107        if (cond == 2)
     108          {
     109            vbool4_t v = *(vbool4_t*)(in + 200);
     110            *(vbool4_t*)(out + 200) = v;
     111            out[1000] = 8000;
     112          }
     113      }
     114    for (int i = 0; i < n; i++)
     115      {
     116        vbool4_t v = *(vbool4_t*)(in + i);
     117        *(vbool4_t*)(out + i) = v;
     118      }
     119  }
     120  
     121  void f6 (int * restrict in, int * restrict out, int n, int cond)
     122  {
     123    if (cond == 1)
     124      {
     125        vbool2_t v = *(vbool2_t*)(in + 100);
     126        *(vbool2_t*)(out + 100) = v;
     127      }
     128    else
     129      {
     130        if (cond == 2)
     131          {
     132            vbool2_t v = *(vbool2_t*)(in + 200);
     133            *(vbool2_t*)(out + 200) = v;
     134            out[1000] = 8000;
     135          }
     136      }
     137    for (int i = 0; i < n; i++)
     138      {
     139        vbool2_t v = *(vbool2_t*)(in + i);
     140        *(vbool2_t*)(out + i) = v;
     141      }
     142  }
     143  
     144  void f7 (int * restrict in, int * restrict out, int n, int cond)
     145  {
     146    if (cond == 1)
     147      {
     148        vbool1_t v = *(vbool1_t*)(in + 100);
     149        *(vbool1_t*)(out + 100) = v;
     150      }
     151    else
     152      {
     153        if (cond == 2)
     154          {
     155            vbool1_t v = *(vbool1_t*)(in + 200);
     156            *(vbool1_t*)(out + 200) = v;
     157            out[1000] = 8000;
     158          }
     159      }
     160    for (int i = 0; i < n; i++)
     161      {
     162        vbool1_t v = *(vbool1_t*)(in + i);
     163        *(vbool1_t*)(out + i) = v;
     164      }
     165  }
     166  
     167  /* { 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" } } } } */
     168  /* { 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" } } } } */
     169  /* { 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" } } } } */
     170  /* { 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" } } } } */
     171  /* { 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" } } } } */
     172  /* { 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" } } } } */
     173  /* { 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" } } } } */
     174  /* { 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" } } } } */
     175  /* { 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][0-9]\:} 1 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
     176  /* { 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][0-9]\:} 1 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
     177  /* { 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][0-9]\:} 1 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
     178  /* { 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][0-9]\:} 1 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
     179  /* { 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][0-9]\:} 1 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
     180  /* { 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][0-9]\:} 1 { target { no-opts "-O0"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */