// $ spatch -sp_file cpu_func_to_cpu_funcs.cocci cpu_func_to_cpu_funcs_test.c /////////////////////////////////////////////////////////////////////////////// // There is no need to specify STARPU_MULTIPLE_CPU_IMPLEMENTATIONS any more. // // XXX : We must find a way to make sure cpu_funcs is NULL-terminated. // /////////////////////////////////////////////////////////////////////////////// @@ identifier cl; @@ struct starpu_codelet cl = { - .cpu_func = STARPU_MULTIPLE_CPU_IMPLEMENTATIONS, .cpu_funcs = { ... - } + ,NULL} }; //////////////////////////////////////////////////////////////////////////////// // The previous rule may have added "NULL" twice in the initialization of the // // cpu_funcs field. Let's take care of that. // //////////////////////////////////////////////////////////////////////////////// @@ identifier cl; @@ struct starpu_codelet cl = { .cpu_funcs = { ..., NULL - ,NULL } }; //////////////////////////////////////////////////// // Find all the codelets using the cpu_func field // //////////////////////////////////////////////////// @cpu_func@ expression f; identifier cl; @@ struct starpu_codelet cl = { .cpu_func = f }; /////////////////////////////////////////////////////////////////// // Find all the codelets that define both cpu_func and cpu_funcs // /////////////////////////////////////////////////////////////////// @cpu_funcs depends on cpu_func@ expression cpu_func.f; identifier cpu_func.cl; @@ struct starpu_codelet cl = { .cpu_funcs = { f, NULL } }; ////////////////////////////////////////////////////////////////////////////// // For codelets that define cpu_func but not cpu_funcs, remove cpu_func and // // add cpu_funcs // ////////////////////////////////////////////////////////////////////////////// @depends on !cpu_funcs@ identifier cpu_func.cl; expression cpu_func.f; @@ struct starpu_codelet cl = { - .cpu_func = f + .cpu_funcs = { f, NULL } }; ///////////////////////////////////////////////////////////////// // If both cpu_func and cpu_funcs are defined, remove cpu_func // ///////////////////////////////////////////////////////////////// @depends on cpu_funcs@ identifier cpu_func.cl; expression cpu_func.f; @@ struct starpu_codelet cl = { - .cpu_func = f };