]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V: Add ashiftrt operand 2 for vector avg_floor and avg_ceil
authorPan Li <pan2.li@intel.com>
Sat, 19 Jul 2025 09:17:11 +0000 (17:17 +0800)
committerPan Li <pan2.li@intel.com>
Sun, 20 Jul 2025 02:03:41 +0000 (10:03 +0800)
According to the semantics of the avg_floor and avg_ceil as below:

floor: op0 = (narrow) (((wide) op1 + (wide) op2) >> 1);
ceil:  op0 = (narrow) (((wide) op1 + (wide) op2 + 1) >> 1);

Aka we have (const_int 1) as the op2 of the ashiftrt but seems missed.
Thus, add it back to align the definition.

The below test suites are passed for this patch.
* The rv64gcv fully regression test.

gcc/ChangeLog:

* config/riscv/autovec.md: Add (const_int 1) as the op2 of
ashiftrt.

Signed-off-by: Pan Li <pan2.li@intel.com>
gcc/config/riscv/autovec.md

index da5d0e34d0ab07ad3ac15aadbfd3b03315b9b919..1fff8ac2fc462db6f5ffa16bf83b998cf6da1687 100644 (file)
       (sign_extend:VWEXTI
        (match_operand:<V_DOUBLE_TRUNC> 1 "register_operand"))
       (sign_extend:VWEXTI
-       (match_operand:<V_DOUBLE_TRUNC> 2 "register_operand"))))))]
+       (match_operand:<V_DOUBLE_TRUNC> 2 "register_operand")))
+     (const_int 1))))]
   "TARGET_VECTOR"
   {
     insn_code icode = code_for_pred (UNSPEC_VAADD, <V_DOUBLE_TRUNC>mode);
        (match_operand:<V_DOUBLE_TRUNC> 1 "register_operand"))
        (sign_extend:VWEXTI
        (match_operand:<V_DOUBLE_TRUNC> 2 "register_operand")))
-      (const_int 1)))))]
+      (const_int 1))
+     (const_int 1))))]
   "TARGET_VECTOR"
   {
     insn_code icode = code_for_pred (UNSPEC_VAADD, <V_DOUBLE_TRUNC>mode);