vsetvl_info &header_info = block_info.get_entry_info ();
vsetvl_info &footer_info = block_info.get_exit_info ();
- if (header_info.valid_p ()
- && (anticipated_exp_p (header_info) || block_info.full_available))
+ if (header_info.valid_p () && anticipated_exp_p (header_info))
bitmap_set_bit (m_antloc[bb_index],
get_expr_index (m_exprs, header_info));
info.set_delete ();
}
+ /* Remove vsetvl infos if all precessors are available to the block. */
+ for (const bb_info *bb : crtl->ssa->bbs ())
+ {
+ vsetvl_block_info &block_info = get_block_info (bb);
+ if (block_info.empty_p () || !block_info.full_available)
+ continue;
+
+ vsetvl_info &info = block_info.get_entry_info ();
+ info.set_delete ();
+ }
+
for (const bb_info *bb : crtl->ssa->bbs ())
{
vsetvl_block_info &block_info = get_block_info (bb);
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+int printf(char *, ...);
+int a, l, i, p, q, t, n, o;
+int *volatile c;
+static int j;
+static struct pack_1_struct d;
+long e;
+char m = 5;
+short s;
+
+#pragma pack(1)
+struct pack_1_struct {
+ long c;
+ int d;
+ int e;
+ int f;
+ int g;
+ int h;
+ int i;
+} h, r = {1}, *f = &h, *volatile g;
+
+void add_em_up(int count, ...) {
+ __builtin_va_list ap;
+ __builtin_va_start(ap, count);
+ __builtin_va_end(ap);
+}
+
+int main() {
+ int u;
+ j = 0;
+
+ for (; j < 9; ++j) {
+ u = ++t ? a : 0;
+ if (u) {
+ int *v = &d.d;
+ *v = g || e;
+ *c = 0;
+ *f = h;
+ }
+ s = l && c;
+ o = i;
+ d.f || (p = 0);
+ q |= n;
+ }
+
+ r = *f;
+
+ add_em_up(1, 1);
+
+ printf("%d\n", m);
+}
+
+/* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-not {vsetivli} } } */
+/* { dg-final { scan-assembler-times {vsetvli\tzero,\s*[a-x0-9]+,\s*e8,\s*m8,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
+/* { dg-final { scan-assembler-times {li\t[a-x0-9]+,\s*32} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+int a = 0;
+int p, q, r, x = 230;
+short d;
+int e[256];
+static struct f w;
+int *c = &r;
+
+short y(short z) {
+ return z * d;
+}
+
+#pragma pack(1)
+struct f {
+ int g;
+ short h;
+ int j;
+ char k;
+ char l;
+ long m;
+ long n;
+ int o;
+} s = {1}, v, t, *u = &v, *b = &s;
+
+void add_em_up(int count, ...) {
+ __builtin_va_list ap;
+ __builtin_va_start(ap, count);
+ __builtin_va_end(ap);
+}
+
+int main() {
+ int i = 0;
+ for (; i < 256; i++)
+ e[i] = i;
+
+ p = 0;
+ for (; p <= 0; p++) {
+ *c = 4;
+ *u = t;
+ x |= y(6 >= q);
+ }
+
+ *b = w;
+
+ add_em_up(1, 1);
+
+ if (a != 0)
+ return 1;
+ if (q != 0)
+ return 2;
+ if (p != 1)
+ return 3;
+ if (r != 4)
+ return 4;
+ if (x != 0xE6)
+ return 5;
+ if (d != 0)
+ return 6;
+
+ return 0;
+}
+
+/* { dg-final { scan-assembler-times {vsetvli} 1 } } */
+/* { dg-final { scan-assembler-times {vsetivli} 1 } } */
+/* { dg-final { scan-assembler-times {vsetivli\tzero,\s*4,\s*e32,\s*m1,\s*t[au],\s*m[au]} 1 } } */
+/* { dg-final { scan-assembler-times {vsetvli\tzero,\s*[a-x0-9]+,\s*e8,\s*m8,\s*t[au],\s*m[au]} 1 } } */
+/* { dg-final { scan-assembler-times {li\t[a-x0-9]+,\s*32} 1 } } */