https://gcc.gnu.org/g:04ee1f788ceaa4c7f777ff3b9441ae076191439c

commit r15-443-g04ee1f788ceaa4c7f777ff3b9441ae076191439c
Author: Jeff Law <j...@ventanamicro.com>
Date:   Mon May 13 21:42:38 2024 -0600

    Revert "[PATCH v2 1/3] RISC-V: movmem for RISCV with V extension"
    
    This reverts commit df15eb15b5f820321c81efc75f0af13ff8c0dd5b.

Diff:
---
 gcc/config/riscv/riscv.md                          | 23 ---------
 gcc/testsuite/gcc.target/riscv/rvv/base/movmem-1.c | 59 ----------------------
 2 files changed, 82 deletions(-)

diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md
index 696d911a7e95..4d6de9925572 100644
--- a/gcc/config/riscv/riscv.md
+++ b/gcc/config/riscv/riscv.md
@@ -2608,29 +2608,6 @@
     FAIL;
 })
 
-;; Inlining general memmove is a pessimisation as we can't avoid having to
-;; decide which direction to go at runtime, which can be costly.  Until we
-;; can benchmark implementations on real V hardware implement a conservative
-;; approach of inlining cases which can be performed with a single vector
-;; load + store.  For tiny moves, fallback to scalar.
-(define_expand "movmem<mode>"
-  [(parallel [(set (match_operand:BLK 0 "general_operand")
-                  (match_operand:BLK 1 "general_operand"))
-             (use (match_operand:P 2 "const_int_operand"))
-             (use (match_operand:SI 3 "const_int_operand"))])]
-  "TARGET_VECTOR"
-{
-  if (CONST_INT_P (operands[2])
-      && INTVAL (operands[2]) >= TARGET_MIN_VLEN / 8
-      && INTVAL (operands[2]) <= TARGET_MIN_VLEN
-      && riscv_vector::expand_block_move (operands[0],
-                                         operands[1],
-                                         operands[2]))
-    DONE;
-  else
-    FAIL;
-})
-
 ;; Expand in-line code to clear the instruction cache between operand[0] and
 ;; operand[1].
 (define_expand "clear_cache"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/movmem-1.c 
b/gcc/testsuite/gcc.target/riscv/rvv/base/movmem-1.c
deleted file mode 100644
index b930241ae5d9..000000000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/movmem-1.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* { dg-do compile } */
-/* { dg-add-options riscv_v } */
-/* { dg-additional-options "-O3" } */
-/* { dg-final { check-function-bodies "**" "" } } */
-
-#include <string.h>
-
-#define MIN_VECTOR_BYTES (__riscv_v_min_vlen/8)
-
-/* tiny memmoves should not be vectorised
-** f1:
-**  li\s+a2,15
-**  tail\s+memmove
-*/
-char * f1 (char *a, char const *b)
-{
-  return memmove (a, b, 15);
-}
-
-/* vectorise+inline minimum vector register width with LMUL=1
-** f2:
-**  (
-**  vsetivli\s+zero,16,e8,m1,ta,ma
-**  |
-**  li\s+[ta][0-7],\d+
-**  vsetvli\s+zero,[ta][0-7],e8,m1,ta,ma
-**  )
-**  vle8\.v\s+v\d+,0\(a1\)
-**  vse8\.v\s+v\d+,0\(a0\)
-**  ret
-*/
-char * f2 (char *a, char const *b)
-{
-  return memmove (a, b, MIN_VECTOR_BYTES);
-}
-
-/* vectorise+inline up to LMUL=8
-** f3:
-**  li\s+[ta][0-7],\d+
-**  vsetvli\s+zero,[ta][0-7],e8,m8,ta,ma
-**  vle8\.v\s+v\d+,0\(a1\)
-**  vse8\.v\s+v\d+,0\(a0\)
-**  ret
-*/
-char * f3 (char *a, char const *b)
-{
-  return memmove (a, b, MIN_VECTOR_BYTES*8);
-}
-
-/* don't vectorise if the move is too large for one operation
-** f4:
-**  li\s+a2,\d+
-**  tail\s+memmove
-*/
-char * f4 (char *a, char const *b)
-{
-  return memmove (a, b, MIN_VECTOR_BYTES*8+1);
-}
-

Reply via email to