Re: [PATCH 3/3] coccinelle: misc: minmax: improve performance when no candidate exists
From: Sang-Heon Jeon
Date: Sun Jul 26 2026 - 12:29:09 EST
On Mon, Jul 27, 2026 at 1:11 AM Julia Lawall <julia.lawall@xxxxxxxx> wrote:
>
>
>
> On Sat, 25 Jul 2026, Sang-Heon Jeon wrote:
>
> > 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.
>
> Applied.
>
> I also added "candidate" rules for minif and maxif, removed the outer
> parentheses on rmax etc, and disabled some isomorphisms that caused the
> introduction of useless variants of the conditional tests.
Thanks for the additional improvements!
> julia
>
>
> >
> > Signed-off-by: Sang-Heon Jeon <ekffu200098@xxxxxxxxx>
> > ---
> > 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
> >
> >
Best Regards,
Sang-Heon Jeon