From: Sang-Heon Jeon <ekffu200098@gmail.com>
To: Julia Lawall <Julia.Lawall@inria.fr>,
Nicolas Palix <nicolas.palix@imag.fr>
Cc: cocci@inria.fr, linux-kernel@vger.kernel.org
Subject: [cocci] [PATCH 3/3] coccinelle: misc: minmax: improve performance when no candidate exists
Date: Sat, 25 Jul 2026 20:32:41 +0900 [thread overview]
Message-ID: <20260725113303.691676-4-ekffu200098@gmail.com> (raw)
In-Reply-To: <20260725113303.691676-1-ekffu200098@gmail.com>
The rules that report an opencoded min() or max() search every
function body, even when the file contains nothing to find.
To avoid this, collect the candidates first and run the search only
when one exists. A candidate is any conditional expression whose
condition is a comparison.
Every opencoded min() or max() is also a candidate, so the same
opportunities are reported as before and the output does not
change. A report-mode run over every .c file in the tree produces
identical output.
Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
---
scripts/coccinelle/misc/minmax.cocci | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/scripts/coccinelle/misc/minmax.cocci b/scripts/coccinelle/misc/minmax.cocci
index ca4830ae3042..93c074b9439f 100644
--- a/scripts/coccinelle/misc/minmax.cocci
+++ b/scripts/coccinelle/misc/minmax.cocci
@@ -17,7 +17,21 @@ virtual org
virtual context
virtual patch
-@rmax depends on !patch@
+@max_candidate@
+expression E1, E2, E3, E4;
+binary operator cmp = {>, >=};
+@@
+
+ (E1 cmp E2 ? E3 : E4)
+
+@min_candidate@
+expression E1, E2, E3, E4;
+binary operator cmp = {<, <=};
+@@
+
+ (E1 cmp E2 ? E3 : E4)
+
+@rmax depends on !patch && max_candidate@
identifier func;
expression x, y;
binary operator cmp = {>, >=};
@@ -51,7 +65,7 @@ func(...)
}
// Ignore errcode returns.
-@errcode@
+@errcode depends on min_candidate@
position p;
identifier func;
expression x;
@@ -65,7 +79,7 @@ func(...)
...>
}
-@rmin depends on !patch@
+@rmin depends on !patch && min_candidate@
identifier func;
expression x, y;
binary operator cmp = {<, <=};
@@ -98,7 +112,7 @@ func(...)
...>
}
-@pmax depends on patch@
+@pmax depends on patch && max_candidate@
identifier func;
expression x, y;
binary operator cmp = {>=, >};
@@ -131,7 +145,7 @@ func(...)
...>
}
-@pmin depends on patch@
+@pmin depends on patch && min_candidate@
identifier func;
expression x, y;
binary operator cmp = {<=, <};
--
2.43.0
WARNING: multiple messages have this Message-ID (diff)
From: Sang-Heon Jeon <ekffu200098@gmail.com>
To: Julia Lawall <Julia.Lawall@inria.fr>,
Nicolas Palix <nicolas.palix@imag.fr>
Cc: cocci@inria.fr, linux-kernel@vger.kernel.org
Subject: [PATCH 3/3] coccinelle: misc: minmax: improve performance when no candidate exists
Date: Sat, 25 Jul 2026 20:32:41 +0900 [thread overview]
Message-ID: <20260725113303.691676-4-ekffu200098@gmail.com> (raw)
In-Reply-To: <20260725113303.691676-1-ekffu200098@gmail.com>
The rules that report an opencoded min() or max() search every
function body, even when the file contains nothing to find.
To avoid this, collect the candidates first and run the search only
when one exists. A candidate is any conditional expression whose
condition is a comparison.
Every opencoded min() or max() is also a candidate, so the same
opportunities are reported as before and the output does not
change. A report-mode run over every .c file in the tree produces
identical output.
Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
---
scripts/coccinelle/misc/minmax.cocci | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/scripts/coccinelle/misc/minmax.cocci b/scripts/coccinelle/misc/minmax.cocci
index ca4830ae3042..93c074b9439f 100644
--- a/scripts/coccinelle/misc/minmax.cocci
+++ b/scripts/coccinelle/misc/minmax.cocci
@@ -17,7 +17,21 @@ virtual org
virtual context
virtual patch
-@rmax depends on !patch@
+@max_candidate@
+expression E1, E2, E3, E4;
+binary operator cmp = {>, >=};
+@@
+
+ (E1 cmp E2 ? E3 : E4)
+
+@min_candidate@
+expression E1, E2, E3, E4;
+binary operator cmp = {<, <=};
+@@
+
+ (E1 cmp E2 ? E3 : E4)
+
+@rmax depends on !patch && max_candidate@
identifier func;
expression x, y;
binary operator cmp = {>, >=};
@@ -51,7 +65,7 @@ func(...)
}
// Ignore errcode returns.
-@errcode@
+@errcode depends on min_candidate@
position p;
identifier func;
expression x;
@@ -65,7 +79,7 @@ func(...)
...>
}
-@rmin depends on !patch@
+@rmin depends on !patch && min_candidate@
identifier func;
expression x, y;
binary operator cmp = {<, <=};
@@ -98,7 +112,7 @@ func(...)
...>
}
-@pmax depends on patch@
+@pmax depends on patch && max_candidate@
identifier func;
expression x, y;
binary operator cmp = {>=, >};
@@ -131,7 +145,7 @@ func(...)
...>
}
-@pmin depends on patch@
+@pmin depends on patch && min_candidate@
identifier func;
expression x, y;
binary operator cmp = {<=, <};
--
2.43.0
next prev parent reply other threads:[~2026-07-25 11:44 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-25 11:32 [cocci] [PATCH 0/3] coccinelle: improve performance of mini_lock, double_lock and minmax Sang-Heon Jeon
2026-07-25 11:32 ` Sang-Heon Jeon
2026-07-25 11:32 ` [cocci] [PATCH 1/3] coccinelle: mini_lock: improve performance when searching loops Sang-Heon Jeon
2026-07-25 11:32 ` Sang-Heon Jeon
2026-07-25 11:32 ` [cocci] [PATCH 2/3] coccinelle: double_lock: improve performance when no double lock exists Sang-Heon Jeon
2026-07-25 11:32 ` Sang-Heon Jeon
2026-07-25 11:32 ` Sang-Heon Jeon [this message]
2026-07-25 11:32 ` [PATCH 3/3] coccinelle: misc: minmax: improve performance when no candidate exists Sang-Heon Jeon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260725113303.691676-4-ekffu200098@gmail.com \
--to=ekffu200098@gmail.com \
--cc=Julia.Lawall@inria.fr \
--cc=cocci@inria.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.palix@imag.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.