The match checks are called inside the search loops, between the
transitions; -O3 inlines them and is unchanged, at -O2 they are not.
Flatten the search functions so the loops hold no call.

Signed-off-by: Sun Yuechi <[email protected]>
---
 lib/acl/acl_run_rvv.h | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/acl/acl_run_rvv.h b/lib/acl/acl_run_rvv.h
index 1d6fdff045..c4daf10224 100644
--- a/lib/acl/acl_run_rvv.h
+++ b/lib/acl/acl_run_rvv.h
@@ -182,9 +182,11 @@ transition_vec(vuint32m1_t v_next_input, const uint64_t 
*trans,
 }
 
 /*
- * Execute trie traversal with 8 traversals in parallel
+ * Execute trie traversal with 8 traversals in parallel.
+ * Flattened: a vector value live across a call is spilled, and the
+ * frame is then addressed through vlenb.
  */
-static inline int
+static inline __rte_flatten int
 search_rvv_8(const struct rte_acl_ctx *ctx, const uint8_t **data,
        uint32_t *results, uint32_t total_packets, uint32_t categories)
 {
@@ -270,7 +272,7 @@ search_rvv_8(const struct rte_acl_ctx *ctx, const uint8_t 
**data,
 /*
  * Execute trie traversal with 4 traversals in parallel
  */
-static inline int
+static inline __rte_flatten int
 search_rvv_4(const struct rte_acl_ctx *ctx, const uint8_t **data,
        uint32_t *results, uint32_t total_packets, uint32_t categories)
 {
-- 
2.56.0

Reply via email to