summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorSang-Heon Jeon <ekffu200098@gmail.com>2026-07-25 20:32:41 +0900
committerJulia Lawall <Julia.Lawall@inria.fr>2026-08-23 22:12:09 +0200
commitb32cf68d78a1f2a05797ec2a969b80a9472f45a7 (patch)
tree6f8f2e4008be0874e367db5c8b86b3404dbdd943 /scripts
parentbf2fe566a8cbd3671b816223eec8fadd18ec8d77 (diff)
downloadlinux-next-b32cf68d78a1f2a05797ec2a969b80a9472f45a7.tar.gz
linux-next-b32cf68d78a1f2a05797ec2a969b80a9472f45a7.zip
coccinelle: misc: minmax: improve performance when no candidate exists
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> Signed-off-by: Julia Lawall <Julia.Lawall@inria.fr>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/coccinelle/misc/minmax.cocci24
1 files 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 = {<=, <};