> +/* Return true it is whole register-register move. */
> +bool
> +whole_reg_to_reg_move_p (rtx *ops, machine_mode mode)
> +{
> + if (register_operand (ops[0], mode)
> + && register_operand (ops[3], mode)
> + && satisfies_constraint_vu (ops[2])
> + && satisfies_constraint_Wc1 (ops
While working on fixing a bug, I notice this following code has redundant move:
#include "riscv_vector.h"
void
f (float x, float y, void *out)
{
float f[4] = { x, x, x, y };
vfloat32m1_t v = __riscv_vle32_v_f32m1 (f, 4);
__riscv_vse32_v_f32m1 (out, v, 4);
}
Before this patch:
f:
vs