OpenMP: Support complex/float in && and || reduction
C/C++ permit logical AND and logical OR also with floating-point or complex arguments by doing an unequal zero comparison; the result is an 'int' with value one or zero. Hence, those are also permitted as reduction variable, even though it is not the most sensible thing to do. gcc/c/ChangeLog: * c-typeck.c (c_finish_omp_clauses): Accept float + complex for || and && reductions. gcc/cp/ChangeLog: * semantics.c (finish_omp_reduction_clause): Accept float + complex for || and && reductions. gcc/ChangeLog: * omp-low.c (lower_rec_input_clauses, lower_reduction_clauses): Handle && and || with floating-point and complex arguments. gcc/testsuite/ChangeLog: * gcc.dg/gomp/clause-1.c: Use 'reduction(&:..)' instead of '...(&&:..)'. libgomp/ChangeLog: * testsuite/libgomp.c-c++-common/reduction-1.c: New test. * testsuite/libgomp.c-c++-common/reduction-2.c: New test. * testsuite/libgomp.c-c++-common/reduction-3.c: New test.
Showing
- gcc/c/c-typeck.c 2 additions, 8 deletionsgcc/c/c-typeck.c
- gcc/cp/semantics.c 2 additions, 6 deletionsgcc/cp/semantics.c
- gcc/omp-low.c 81 additions, 6 deletionsgcc/omp-low.c
- gcc/testsuite/gcc.dg/gomp/clause-1.c 1 addition, 1 deletiongcc/testsuite/gcc.dg/gomp/clause-1.c
- libgomp/testsuite/libgomp.c-c++-common/reduction-1.c 192 additions, 0 deletionslibgomp/testsuite/libgomp.c-c++-common/reduction-1.c
- libgomp/testsuite/libgomp.c-c++-common/reduction-2.c 192 additions, 0 deletionslibgomp/testsuite/libgomp.c-c++-common/reduction-2.c
- libgomp/testsuite/libgomp.c-c++-common/reduction-3.c 192 additions, 0 deletionslibgomp/testsuite/libgomp.c-c++-common/reduction-3.c
- libgomp/testsuite/libgomp.c-c++-common/reduction-4.c 194 additions, 0 deletionslibgomp/testsuite/libgomp.c-c++-common/reduction-4.c
Loading
Please register or sign in to comment