]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
internal-fn: Do not force vcond_mask operands to reg.
authorRobin Dapp <rdapp@ventanamicro.com>
Fri, 10 May 2024 10:44:44 +0000 (12:44 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Fri, 17 May 2024 20:31:42 +0000 (22:31 +0200)
In order to directly use constants this patch removes force_regs
in the vcond_mask expander.

gcc/ChangeLog:

PR middle-end/113474

* internal-fn.cc (expand_vec_cond_mask_optab_fn):  Remove
force_regs.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/pr113474.c: New test.

gcc/internal-fn.cc
gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113474.c [new file with mode: 0644]

index 73045ca8c8c1bf2ed209876faac7eef825006ba5..9c09026793fa33115f78d194fa6a87e5591e2313 100644 (file)
@@ -3165,9 +3165,6 @@ expand_vec_cond_mask_optab_fn (internal_fn, gcall *stmt, convert_optab optab)
   rtx_op1 = expand_normal (op1);
   rtx_op2 = expand_normal (op2);
 
-  mask = force_reg (mask_mode, mask);
-  rtx_op1 = force_reg (mode, rtx_op1);
-
   rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
   create_output_operand (&ops[0], target, mode);
   create_input_operand (&ops[1], rtx_op1, mode);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113474.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113474.c
new file mode 100644 (file)
index 0000000..0364bf9
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile { target riscv_v } }  */
+/* { dg-additional-options "-std=c99" }  */
+
+void
+foo (int n, int **a)
+{
+  int b;
+  for (b = 0; b < n; b++)
+    for (long e = 8; e > 0; e--)
+      a[b][e] = a[b][e] == 15;
+}
+
+/* { dg-final { scan-assembler "vmerge.vim" } }  */