[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAK7LNATYEGuBvDDyFG98dZPb2nT+Us1w0_Y6dDjG17SK9XyLCA@mail.gmail.com>
Date: Tue, 22 May 2018 23:23:10 +0900
From: Masahiro Yamada <yamada.masahiro@...ionext.com>
To: Julia Lawall <Julia.Lawall@...6.fr>
Cc: kernel-janitors@...r.kernel.org,
Gilles Muller <Gilles.Muller@...6.fr>,
Nicolas Palix <nicolas.palix@...g.fr>,
Michal Marek <michal.lkml@...kovi.net>, cocci@...teme.lip6.fr,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] coccinelle: deref_null: improve performance
2018-05-21 15:58 GMT+09:00 Julia Lawall <Julia.Lawall@...6.fr>:
> Move rules looking for some special cases of safe dereferences before
> the collection of NULL-tested values. The special cases are fairly
> rare, but somewhat costly to find, because isomorphisms create many
> variants of the rules. There is thus no need to search for them over
> and over for each NULL tested expression. Collecting them just once
> is sufficient and more efficient.
>
> Signed-off-by: Julia Lawall <Julia.Lawall@...6.fr>
>
> ---
> scripts/coccinelle/null/deref_null.cocci | 40 +++++++++++++++----------------
> 1 file changed, 20 insertions(+), 20 deletions(-)
Applied to linux-kbuild. Thanks!
> diff --git a/scripts/coccinelle/null/deref_null.cocci b/scripts/coccinelle/null/deref_null.cocci
> index b16ccb7..cbc6184 100644
> --- a/scripts/coccinelle/null/deref_null.cocci
> +++ b/scripts/coccinelle/null/deref_null.cocci
> @@ -14,18 +14,10 @@ virtual context
> virtual org
> virtual report
>
> -@ifm@
> -expression *E;
> -statement S1,S2;
> -position p1;
> -@@
> -
> -if@p1 ((E == NULL && ...) || ...) S1 else S2
> -
> // The following two rules are separate, because both can match a single
> // expression in different ways
> @pr1 expression@
> -expression *ifm.E;
> +expression E;
> identifier f;
> position p1;
> @@
> @@ -33,7 +25,7 @@ position p1;
> (E != NULL && ...) ? <+...E->f@.....+> : ...
>
> @pr2 expression@
> -expression *ifm.E;
> +expression E;
> identifier f;
> position p2;
> @@
> @@ -46,6 +38,14 @@ position p2;
> sizeof(<+...E->f@.....+>)
> )
>
> +@ifm@
> +expression *E;
> +statement S1,S2;
> +position p1;
> +@@
> +
> +if@p1 ((E == NULL && ...) || ...) S1 else S2
> +
> // For org and report modes
>
> @r depends on !context && (org || report) exists@
> @@ -212,16 +212,8 @@ else S3
> // The following three rules are duplicates of ifm, pr1 and pr2 respectively.
> // It is need because the previous rule as already made a "change".
>
> -@...1 depends on context && !org && !report@
> -expression *E;
> -statement S1,S2;
> -position p1;
> -@@
> -
> -if@p1 ((E == NULL && ...) || ...) S1 else S2
> -
> @pr11 depends on context && !org && !report expression@
> -expression *ifm1.E;
> +expression E;
> identifier f;
> position p1;
> @@
> @@ -229,7 +221,7 @@ position p1;
> (E != NULL && ...) ? <+...E->f@.....+> : ...
>
> @pr12 depends on context && !org && !report expression@
> -expression *ifm1.E;
> +expression E;
> identifier f;
> position p2;
> @@
> @@ -242,6 +234,14 @@ position p2;
> sizeof(<+...E->f@.....+>)
> )
>
> +@...1 depends on context && !org && !report@
> +expression *E;
> +statement S1,S2;
> +position p1;
> +@@
> +
> +if@p1 ((E == NULL && ...) || ...) S1 else S2
> +
> @depends on context && !org && !report exists@
> expression subE <= ifm1.E;
> expression *ifm1.E;
>
--
Best Regards
Masahiro Yamada
Powered by blists - more mailing lists