Skip to content

Commit

Permalink
tracing/filter: Optimize short ciruit check
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed Feb 8, 2011
1 parent 61e9dea commit 5571927
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions kernel/trace/trace_events_filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 5571927

Please sign in to comment.