10BC0 Merge pull request #17201 from eric-wieser/NPY_CPU_DISPATCH_CALL-expr · numpy/numpy@263b293 · GitHub
[go: up one dir, main page]

Skip to content

Commit 263b293

Browse files
authored
Merge pull request #17201 from eric-wieser/NPY_CPU_DISPATCH_CALL-expr
MAINT: Make the `NPY_CPU_DISPATCH_CALL` macros expressions not statements
2 parents 459991a + 5dbc66e commit 263b293

File tree

3 files changed

+25
-20
lines changed

3 files changed

+25
-20
lines changed

numpy/core/code_generators/generate_umath.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ def make_arrays(funcdict):
10421042
#ifndef NPY_DISABLE_OPTIMIZATION
10431043
#include "{dname}.dispatch.h"
10441044
#endif
1045-
NPY_CPU_DISPATCH_CALL_XB({name}_functions[{k}] = {tname}_{name})
1045+
NPY_CPU_DISPATCH_CALL_XB({name}_functions[{k}] = {tname}_{name});
10461046
""").format(
10471047
dname=dname, name=name, tname=tname, k=k
10481048
))

numpy/core/src/common/npy_cpu_dispatch.h

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -217,44 +217,49 @@
217217
* func_type the_callee(const int *src, int *dst, func_type *cb)
218218
* {
219219
* // direct call
220-
* NPY_CPU_DISPATCH_CALL(dispatch_me, (src, dst))
220+
* NPY_CPU_DISPATCH_CALL(dispatch_me, (src, dst));
221221
* // assign the pointer
222-
* NPY_CPU_DISPATCH_CALL(*cb = dispatch_me)
222+
* *cb = NPY_CPU_DISPATCH_CALL(dispatch_me);
223+
* // or
224+
* NPY_CPU_DISPATCH_CALL(*cb = dispatch_me);
223225
* // return the pointer
224-
* NPY_CPU_DISPATCH_CALL(return dispatch_me)
226+
* return NPY_CPU_DISPATCH_CALL(dispatch_me);
225227
* }
226228
*/
227229
#define NPY_CPU_DISPATCH_CALL(...) \
228-
if (0) {/*DUMMY*/} \
229230
NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_CB_, __VA_ARGS__) \
230231
NPY__CPU_DISPATCH_BASELINE_CALL(NPY_CPU_DISPATCH_CALL_BASE_CB_, __VA_ARGS__)
231232
// Preprocessor callbacks
232233
#define NPY_CPU_DISPATCH_CALL_CB_(TESTED_FEATURES, TARGET_NAME, LEFT, ...) \
233-
else if (TESTED_FEATURES) { NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__; }
234+
(TESTED_FEATURES) ? (NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__) :
234235
#define NPY_CPU_DISPATCH_CALL_BASE_CB_(LEFT, ...) \
235-
else { LEFT __VA_ARGS__; }
236+
(LEFT __VA_ARGS__)
236237
/**
237238
* Macro NPY_CPU_DISPATCH_CALL_XB(LEFT, ...)
238239
*
239-
* Same as `NPY_CPU_DISPATCH_DECLARE` but exclude the baseline declration even
240-
* if it was provided within the configration statments.
240+
* Same as `NPY_CPU_DISPATCH_DECLARE` but exclude the baseline declaration even
241+
* if it was provided within the configration statements.
242+
* Returns void.
241243
*/
244+
#define NPY_CPU_DISPATCH_CALL_XB_CB_(TESTED_FEATURES, TARGET_NAME, LEFT, ...) \
245+
(TESTED_FEATURES) ? (void) (NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__) :
242246
#define NPY_CPU_DISPATCH_CALL_XB(...) \
243-
if (0) {/*DUMMY*/} \
244-
NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_CB_, __VA_ARGS__)
247+
NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_XB_CB_, __VA_ARGS__) \
248+
((void) 0 /* discarded expression value */)
245249
/**
246250
* Macro NPY_CPU_DISPATCH_CALL_ALL(LEFT, ...)
247251
*
248252
* Same as `NPY_CPU_DISPATCH_CALL` but dispatching all the required optimizations for
249253
* the exported functions and variables instead of highest interested one.
254+
* Returns void.
250255
*/
251256
#define NPY_CPU_DISPATCH_CALL_ALL(...) \
252-
NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_ALL_CB_, __VA_ARGS__) \
253-
NPY__CPU_DISPATCH_BASELINE_CALL(NPY_CPU_DISPATCH_CALL_ALL_BASE_CB_, __VA_ARGS__)
257+
(NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_ALL_CB_, __VA_ARGS__) \
258+
NPY__CPU_DISPATCH_BASELINE_CALL(NPY_CPU_DISPATCH_CALL_ALL_BASE_CB_, __VA_ARGS__))
254259
// Preprocessor callbacks
255260
#define NPY_CPU_DISPATCH_CALL_ALL_CB_(TESTED_FEATURES, TARGET_NAME, LEFT, ...) \
256-
if (TESTED_FEATURES) { NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__; }
261+
((TESTED_FEATURES) ? (NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__) : (void) 0),
257262
#define NPY_CPU_DISPATCH_CALL_ALL_BASE_CB_(LEFT, ...) \
258-
{ LEFT __VA_ARGS__; }
263+
( LEFT __VA_ARGS__ )
259264

260265
#endif // NPY_CPU_DISPATCH_H_

numpy/core/src/umath/_umath_tests.c.src

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -588,11 +588,11 @@ static PyObject *
588588
UMath_Tests_test_dispatch(PyObject *NPY_UNUSED(dummy), PyObject *NPY_UNUSED(dummy2))
589589
{
590590
const char *highest_func, *highest_var;
591-
NPY_CPU_DISPATCH_CALL(highest_func = _umath_tests_dispatch_func, ())
592-
NPY_CPU_DISPATCH_CALL(highest_var = _umath_tests_dispatch_var)
591+
NPY_CPU_DISPATCH_CALL(highest_func = _umath_tests_dispatch_func, ());
592+
NPY_CPU_DISPATCH_CALL(highest_var = _umath_tests_dispatch_var);
593593
const char *highest_func_xb = "nobase", *highest_var_xb = "nobase";
594-
NPY_CPU_DISPATCH_CALL_XB(highest_func_xb = _umath_tests_dispatch_func, ())
595-
NPY_CPU_DISPATCH_CALL_XB(highest_var_xb = _umath_tests_dispatch_var)
594+
NPY_CPU_DISPATCH_CALL_XB(highest_func_xb = _umath_tests_dispatch_func, ());
595+
NPY_CPU_DISPATCH_CALL_XB(highest_var_xb = _umath_tests_dispatch_var);
596596

597597
PyObject *dict = PyDict_New(), *item;
598598
if (dict == NULL) {
@@ -610,7 +610,7 @@ UMath_Tests_test_dispatch(PyObject *NPY_UNUSED(dummy), PyObject *NPY_UNUSED(dumm
610610
if (item == NULL || PyDict_SetItemString(dict, "all", item) < 0) {
611611
goto err;
612612
}
613-
NPY_CPU_DISPATCH_CALL_ALL(_umath_tests_dispatch_attach, (item))
613+
NPY_CPU_DISPATCH_CALL_ALL(_umath_tests_dispatch_attach, (item));
614614
if (PyErr_Occurred()) {
615615
goto err;
616616
}

0 commit comments

Comments
 (0)
0