144 Commits

Author SHA1 Message Date
Justin Viiret
ec223e3622 Always init NFAContext::cached_br
Now that it's on stack, this should be initialised. Silences a warning
from valgrind.
2016-03-01 11:36:22 +11:00
Matthew Barr
90ea5b6010 Correct asserts 2016-03-01 11:36:22 +11:00
Xiang Wang
a7daa70942 Castle: exclusive analysis for multiple subcastle chunks
Apply clique analysis to subcastle chunks if the number of
subcastles is large and check the status of each chunk
separately at runtime.
2016-03-01 11:36:10 +11:00
Justin Viiret
1619d975c6 limex_runtime.h: scratch header no longer needed 2016-03-01 11:34:57 +11:00
Justin Viiret
c3860a9f29 NFA API: Remove unused scratch ptr from struct mq 2016-03-01 11:34:38 +11:00
Justin Viiret
58f9617f66 NFA API: Remove nfaBlockExecReverse scratch arg
Scratch is no longer used by this function's implementations.
2016-03-01 11:34:38 +11:00
Justin Viiret
3e002f8181 NFA: Move NFAContext to stack (from scratch) 2016-03-01 11:34:38 +11:00
Justin Viiret
7b54856642 Rose: allow block-mode merge of small prefixes
Previously, we disallowed the merging of all Rose prefixes in block mode
where the literal sets are not identical.

This change allows merging if the prefix graphs to be merged are very
small, as a small performance improvement for cases with lots of tiny
prefixes.

This check is deliberately conservative: graphs must have some common
vertices, and the result of the merge must not give up any
accelerability.
2016-03-01 11:34:26 +11:00
Justin Viiret
28f379d738 Rose: remove alignment req for anchored DFA state 2016-03-01 11:32:01 +11:00
Justin Viiret
621dfbebb7 nfaCheckFinalState: define return value
Make nfaCheckFinalState return MO_HALT_MATCHING when the user instructs
us (via the callback return value) to halt matching. In the caller,
check this value and stop matching if told.
2016-03-01 11:28:03 +11:00
Anatoly Burakov
843ca0e7cc Don't look for accel friends for multibyte acceleration 2016-03-01 11:27:36 +11:00
Anatoly Burakov
87424713a7 Multibyte acceleration compile side 2016-03-01 11:21:39 +11:00
Anatoly Burakov
081b3ef369 Multibyte truffle runtime 2016-03-01 11:21:39 +11:00
Anatoly Burakov
47b17ade27 Multibyte shufti runtime 2016-03-01 11:21:39 +11:00
Anatoly Burakov
dd2ec6bdac Multibyte vermicelli runtime 2016-03-01 11:21:39 +11:00
Anatoly Burakov
77ff826bbf Adding bitmatchers 2016-03-01 11:21:39 +11:00
Anatoly Burakov
68f6849687 Adding AVX2 version of truffle 2016-03-01 11:21:39 +11:00
Alex Coyte
e065c4d60b make nfaExecCastle0_QR() more efficent
1. Reverse scan for the last escape and only process later events.
2. Only scheck subcastles which may expire for staleness
2016-03-01 11:13:22 +11:00
Alex Coyte
05beadf52f Introduce REPEAT_ALWAYS model for {0,} castle repeats
As Castle guards the repeats, no more state is needed for these repeats
2016-03-01 11:10:20 +11:00
Xiang Wang
7bcd2b07c9 simplify max clique analysis 2015-12-07 09:38:33 +11:00
Justin Viiret
748d46c124 CastleProto: track next top explicitly
Repeats may be removed (e.g. by pruning in role aliasing passes)
leaving "holes" in the top map. Track the next top to use explicitly,
rather than using repeats.size().
2015-12-07 09:38:32 +11:00
Justin Viiret
8427d83780 CastleProto: track mapping of reports to tops
This allows us to speed up report-based queries, like dedupe checking.
2015-12-07 09:38:32 +11:00
Justin Viiret
da23e8306a assignDkeys: use flat_set<ReportID>, not set 2015-12-07 09:38:32 +11:00
Justin Viiret
8dac64d1dc findMinWidth, findMaxWidth: width for a given top
Currently only implemented for Castle suffixes.
2015-12-07 09:38:32 +11:00
Justin Viiret
b87590ce9d castle: simplify find_next_top
Tops are no longer sparse in CastleProto, so the linear scan for holes
isn't necessary.
2015-12-07 09:38:32 +11:00
Justin Viiret
2a2576e907 Introduce copy_bytes for writing into bytecode
Protects memcpy from nullptr sources, which triggers failures in GCC's
UB sanitizer.
2015-11-18 15:26:16 +11:00
Justin Viiret
cf3ddd9e88 repeatStoreSparseOptimalP: make diff a u32
As delta is a u32, we know diff will always fit within a u32 as well.
Silences a warning from Coverity.
2015-11-18 15:26:11 +11:00
Justin Viiret
62776b615b nfa_api_queue: debug printf format fix 2015-11-10 14:36:38 +11:00
Justin Viiret
863ea1b2b2 mpv_dump: correct hex escapes in printf format 2015-11-10 14:36:38 +11:00
Justin Viiret
fb834114e5 limex_dump: use 'override' keyword in subclass 2015-11-10 14:36:38 +11:00
Justin Viiret
46ad39f253 Add inlined sparseLastTop
This allows the code to be inlined into other sparse optimal repeat
functions.
2015-11-10 14:36:38 +11:00
Justin Viiret
2603be3924 storeInitialRingTopPatch: fix large delta bug
Check for staleness up front, so that it is safe to use u32 values to
handle adding more tops.

Adds LargeGap unit tests.
2015-11-10 14:36:38 +11:00
Justin Viiret
a083bcfa8d repeat: use u32 arithmetic explicitly
In some ring-based models, we know that if the ring is not stale, then
all our bounds should fit within 32-bits. This change makes these
explicitly u32 rather than implicitly narrowing later on.
2015-11-10 14:36:38 +11:00
Justin Viiret
ae7dbc2472 repeatRecurTable: no need for u64a return type 2015-11-10 14:36:38 +11:00
Xiang Wang
e8bfe5478b Optimize max clique analysis
Use vectors of state ids to avoid the overhead of subgraph copies
2015-11-10 14:36:38 +11:00
Alex Coyte
89660e30b6 raw_som_dfa: initialize members in constructor 2015-11-10 14:36:14 +11:00
Justin Viiret
4311775b43 LimEx NFA: unify flush br/estate behaviour
Make the GPR NFA models only clear cached_estate conditionally based on
cached_br, as per the SIMD models.
2015-11-10 14:36:14 +11:00
Justin Viiret
b5e290e985 LimEx NFA: no need to zero estate cache in STREAM
We believe that we have solved the issues that required zeroing of the
exception state in STREAM_FN and REV_STREAM_FN nowadays.
2015-11-10 14:36:14 +11:00
Justin Viiret
01498fa8a5 LimEx NFA: no need to zero init cached_esucc
All of the "exception cache" members are guarded by cached_esucc.
2015-11-10 14:25:05 +11:00
Alex Coyte
a255e6b678 add asserts to make bounds on alphaShift clear 2015-11-10 14:25:05 +11:00
Justin Viiret
cea914e18e Add q_last_type() queue function
Analogous to q_cur_type(), asserts that queue indices are within a valid
range.
2015-11-10 14:25:04 +11:00
Justin Viiret
55b357f7d1 Remove enum mqe_event and use u32 for queue events
We were using intermediate values int he enum and casting back and forth
with a u32; it is cleaner to just use a u32 and define some special
values.

Silences ICC warning #188: enumerated type mixed with another type.
2015-10-30 11:28:37 +11:00
Justin Viiret
b59491d0db Custom NFA_API_NO_IMPL variant for zombie_status
Silences ICC warning #188: enumerated type mixed with another type.
2015-10-30 11:28:37 +11:00
Matthew Barr
904e436f11 Initial commit of Hyperscan 2015-10-20 09:13:35 +11:00