From: Alex Coyte Date: Tue, 12 Jul 2016 04:01:51 +0000 (+1000) Subject: minor eager prefixes improvements X-Git-Tag: v4.3.0^2~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=981b59fd053c002b67e81e23d07fd5e102b6d8fb;p=thirdparty%2Fvectorscan.git minor eager prefixes improvements - count eager prefixes as always run engine when comparing with smwr - only check if a prefix is vacuous after adding back literal fragments --- diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index b8301dbd..37e6ae13 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -1274,9 +1274,6 @@ bool checkSuitableForEager(bool is_prefix, const left_id &left, if (proper_out_degree(g.startDs, g)) { return false; /* not purely anchored */ } - if (is_match_vertex(g.start, g)) { - return false; /* vacuous (todo: handle?) */ - } ei.new_graph = cloneHolder(*left.graph()); auto gg = ei.new_graph; @@ -1284,6 +1281,10 @@ bool checkSuitableForEager(bool is_prefix, const left_id &left, ei.lag_adjust = decreaseLag(build, *gg, succs); + if (is_match_vertex(gg->start, *gg)) { + return false; /* should not still be vacuous as lag decreased */ + } + if (!can_die_early(*gg, EAGER_DIE_BEFORE_LIMIT)) { DEBUG_PRINTF("not eager as stuck alive\n"); return false; diff --git a/src/rose/rose_build_misc.cpp b/src/rose/rose_build_misc.cpp index 186f4d16..f7d49cbe 100644 --- a/src/rose/rose_build_misc.cpp +++ b/src/rose/rose_build_misc.cpp @@ -1234,6 +1234,11 @@ u32 roseQuality(const RoseEngine *t) { always_run++; } + if (t->eagerIterOffset) { + /* eager prefixes are always run */ + always_run++; + } + const HWLM *ftable = getFLiteralMatcher(t); if (ftable) { /* TODO: ignore conditional ftables, or ftables beyond smwr region */