tracing/filter: Optimize short ciruit check
The test if we should break out early for OR and AND operations can be optimized by comparing the current result with (pred->op == OP_OR) That is if the result is true and the op is an OP_OR, or if the result is false and the op is not an OP_OR (thus an OP_AND) we can break out early in either case. Otherwise we continue processing. Cc: Tom Zanussi <tzanussi@gmail.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Родитель
61e9dea20e
Коммит
5571927418
|
@ -426,9 +426,15 @@ int filter_match_preds(struct event_filter *filter, void *rec)
|
|||
pred->parent, &move);
|
||||
continue;
|
||||
case MOVE_UP_FROM_LEFT:
|
||||
/* Check for short circuits */
|
||||
if ((match && pred->op == OP_OR) ||
|
||||
(!match && pred->op == OP_AND)) {
|
||||
/*
|
||||
* Check for short circuits.
|
||||
*
|
||||
* Optimization: !!match == (pred->op == OP_OR)
|
||||
* is the same as:
|
||||
* if ((match && pred->op == OP_OR) ||
|
||||
* (!match && pred->op == OP_AND))
|
||||
*/
|
||||
if (!!match == (pred->op == OP_OR)) {
|
||||
if (pred == root)
|
||||
break;
|
||||
pred = get_pred_parent(pred, preds,
|
||||
|
|
Загрузка…
Ссылка в новой задаче