From 1584da90254bd7601a86a258779f08ba4a4ac905 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Tue, 10 Jan 2017 10:07:12 +1100 Subject: [PATCH] rose: don't accel noodle engines --- src/rose/rose_build_matchers.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/rose/rose_build_matchers.cpp b/src/rose/rose_build_matchers.cpp index 2e7305f7..dfbde375 100644 --- a/src/rose/rose_build_matchers.cpp +++ b/src/rose/rose_build_matchers.cpp @@ -37,6 +37,7 @@ #include "rose_build_lit_accel.h" #include "rose_build_width.h" #include "hwlm/hwlm_build.h" +#include "hwlm/hwlm_internal.h" #include "hwlm/hwlm_literal.h" #include "nfa/castlecompile.h" #include "nfa/nfa_api_queue.h" @@ -811,6 +812,20 @@ void MatcherProto::insert(const MatcherProto &a) { history_required = max(history_required, a.history_required); } +static +void buildAccel(const RoseBuildImpl &build, const MatcherProto &mp, + HWLM &hwlm) { + if (!build.cc.grey.hamsterAccelForward) { + return; + } + + if (hwlm.type == HWLM_ENGINE_NOOD) { + return; + } + + buildForwardAccel(&hwlm, mp.accel_lits, build.getInitialGroups()); +} + aligned_unique_ptr buildFloatingMatcher(const RoseBuildImpl &build, size_t longLitLengthThreshold, const map &final_to_frag_map, @@ -835,9 +850,7 @@ buildFloatingMatcher(const RoseBuildImpl &build, size_t longLitLengthThreshold, throw CompileError("Unable to generate bytecode."); } - if (build.cc.grey.hamsterAccelForward) { - buildForwardAccel(hwlm.get(), mp.accel_lits, build.getInitialGroups()); - } + buildAccel(build, mp, *hwlm); if (build.cc.streaming) { DEBUG_PRINTF("history_required=%zu\n", mp.history_required); @@ -903,9 +916,7 @@ buildSmallBlockMatcher(const RoseBuildImpl &build, throw CompileError("Unable to generate bytecode."); } - if (build.cc.grey.hamsterAccelForward) { - buildForwardAccel(hwlm.get(), mp.accel_lits, build.getInitialGroups()); - } + buildAccel(build, mp, *hwlm); *sbsize = hwlmSize(hwlm.get()); assert(*sbsize); @@ -934,9 +945,7 @@ buildEodAnchoredMatcher(const RoseBuildImpl &build, throw CompileError("Unable to generate bytecode."); } - if (build.cc.grey.hamsterAccelForward) { - buildForwardAccel(hwlm.get(), mp.accel_lits, build.getInitialGroups()); - } + buildAccel(build, mp, *hwlm); *esize = hwlmSize(hwlm.get()); assert(*esize);