rtx expand (function_expander &e) const override
{
- return e.use_exact_insn (code_for_pred_fault_load (e.vector_mode ()));
+ return e.use_contiguous_load_insn
+ (code_for_pred_fault_load (e.vector_mode ()));
}
};
/* The RVV floating-point only support dynamic rounding mode in the
FRM register. */
- if (opno != insn_data[icode].n_generator_args)
+ if (base->may_require_frm_p ()
+ && opno < insn_data[icode].n_generator_args)
add_input_operand (Pmode, gen_int_mode (riscv_vector::FRM_DYN, Pmode));
return generate_insn (icode);
/* The RVV floating-point only support dynamic rounding mode in the
FRM register. */
- if (opno != insn_data[icode].n_generator_args)
+ if (base->may_require_frm_p ()
+ && opno < insn_data[icode].n_generator_args)
add_input_operand (Pmode, gen_int_mode (riscv_vector::FRM_DYN, Pmode));
return generate_insn (icode);
/* The RVV floating-point only support dynamic rounding mode in the
FRM register. */
- if (opno != insn_data[icode].n_generator_args)
+ if (base->may_require_frm_p ()
+ && opno < insn_data[icode].n_generator_args)
add_input_operand (Pmode, gen_int_mode (riscv_vector::FRM_DYN, Pmode));
return generate_insn (icode);
(reg:SI VL_REGNUM)
(reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
(unspec:VT
- [(match_operand 3 "pmode_reg_or_0_operand" " rJ, rJ, rJ")
+ [(match_operand:VT 3 "memory_operand" " m, m, m")
(mem:BLK (scratch))] UNSPEC_VLEFF)
(match_operand:VT 2 "vector_merge_operand" " 0, vu, vu")))
(set (reg:SI VL_REGNUM)
[(match_dup 3) (mem:BLK (scratch))] UNSPEC_VLEFF)
(match_dup 2))] UNSPEC_MODIFY_VL))]
"TARGET_VECTOR"
- "vlseg<nf>e<sew>ff.v\t%0,(%z3)%p1"
+ "vlseg<nf>e<sew>ff.v\t%0,%3%p1"
[(set_attr "type" "vlsegdff")
(set_attr "mode" "<MODE>")])
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "riscv_vector.h"
+int a;
+long b, c;
+void d() { __riscv_vlseg2e32ff_v_i32mf2x2(&a, &c, b); } /* { dg-error "invalid argument to built-in function" } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "riscv_vector.h"
+int a;
+long b, c;
+void d() { vint32mf2x2_t v = __riscv_vlseg2e32ff_v_i32mf2x2(&a, &c, b); }