Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mpi: Add MPI_LOGICAL{1,2,4,8,16} and MPI_TYPECLASS_LOGICAL #6949

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions confdb/aclocal_datatype.m4
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,8 @@ AC_DEFUN([PAC_SET_MPI_DATATYPE_ALIAS], [

dnl
dnl PAC_F77_CHECK_FIXED_REAL(size) and PAC_F77_CHECK_FIXED_INTEGER(size)
dnl Map fixed-size Fortran types, e.g. REAL*4, to equivallent C types.
dnl If no equivallent C types exist, set corresponding sizeof value to 0.
dnl Map fixed-size Fortran types, e.g. REAL*4, to equivalent C types.
dnl If no equivalent C types exist, set corresponding sizeof value to 0.
dnl
AC_DEFUN([PAC_F77_CHECK_FIXED_REAL], [
get_c_float_type $1
Expand All @@ -183,3 +183,18 @@ AC_DEFUN([PAC_F77_CHECK_FIXED_INTEGER], [
fi
])

dnl
dnl PAC_F77_CHECK_FIXED_LOGICAL(size)
dnl Map fixed-size Fortran LOGICAL types, e.g. LOGICAL*1, to equivalent C types.
dnl If no equivalent C types exist, set corresponding sizeof value to 0.
dnl
AC_DEFUN([PAC_F77_CHECK_FIXED_LOGICAL], [
get_c_int_type $1
if test "$pac_retval" = "unavailable" ; then
eval pac_cv_f77_sizeof_logical$1=0
else
eval pac_cv_f77_sizeof_logical$1=$1
AC_DEFINE_UNQUOTED(MPIR_LOGICAL$1_CTYPE,$pac_retval,[C type to use for MPI_LOGICAL$1])
fi
])

38 changes: 37 additions & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2998,6 +2998,26 @@ if test "$enable_f77" = yes ; then
# mpir_get_fsize at run time.
# For the size-defined types (e.g., integer*2), we assume that if the
# compiler allows it, it has the stated size.
AC_CACHE_CHECK([whether logical*1 is supported],pac_cv_fort_logical1,[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ logical*1 i])],
pac_cv_fort_logical1=yes,
pac_cv_fort_logical1=no)])
AC_CACHE_CHECK([whether logical*2 is supported],pac_cv_fort_logical2,[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ logical*2 i])],
pac_cv_fort_logical2=yes,
pac_cv_fort_logical2=no)])
AC_CACHE_CHECK([whether logical*4 is supported],pac_cv_fort_logical4,[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ logical*4 i])],
pac_cv_fort_logical4=yes,
pac_cv_fort_logical4=no)])
AC_CACHE_CHECK([whether logical*8 is supported],pac_cv_fort_logical8,[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ logical*8 i])],
pac_cv_fort_logical8=yes,
pac_cv_fort_logical8=no)])
AC_CACHE_CHECK([whether logical*16 is supported],pac_cv_fort_logical16,[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ logical*16 i])],
pac_cv_fort_logical16=yes,
pac_cv_fort_logical16=no)])
AC_CACHE_CHECK([whether integer*1 is supported],pac_cv_fort_integer1,[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ integer*1 i])],
pac_cv_fort_integer1=yes,
Expand Down Expand Up @@ -3082,6 +3102,12 @@ if test "$enable_f77" = yes ; then
PAC_F77_CHECK_FIXED_INTEGER(8)
PAC_F77_CHECK_FIXED_INTEGER(16)

PAC_F77_CHECK_FIXED_LOGICAL(1)
PAC_F77_CHECK_FIXED_LOGICAL(2)
PAC_F77_CHECK_FIXED_LOGICAL(4)
PAC_F77_CHECK_FIXED_LOGICAL(8)
PAC_F77_CHECK_FIXED_LOGICAL(16)

# We also need to check the size of MPI_Aint vs MPI_Fint, and
# define AINT_LARGER_THAN_FINT if aint is larger (this
# affects code in MPI_Address)
Expand Down Expand Up @@ -3227,10 +3253,15 @@ else

# set following sizes to 0 will disable the corresponding datatype
pac_cv_f77_sizeof_character=0
pac_cv_f77_sizeof_logical=0
pac_cv_f77_sizeof_integer=0
pac_cv_f77_sizeof_real=0
pac_cv_f77_sizeof_double_precision=0
pac_cv_f77_sizeof_logical=0
pac_cv_f77_sizeof_logical1=0
pac_cv_f77_sizeof_logical2=0
pac_cv_f77_sizeof_logical4=0
pac_cv_f77_sizeof_logical8=0
pac_cv_f77_sizeof_logical16=0
pac_cv_f77_sizeof_integer1=0
pac_cv_f77_sizeof_integer2=0
pac_cv_f77_sizeof_integer4=0
Expand Down Expand Up @@ -3568,6 +3599,11 @@ PAC_SET_MPI_TYPE(43, MPI_AINT_DATATYPE, $MPI_SIZEOF_AINT)
PAC_SET_MPI_TYPE(44, MPI_OFFSET_DATATYPE, $MPI_SIZEOF_OFFSET)
PAC_SET_MPI_TYPE(45, MPI_COUNT_DATATYPE, $MPI_SIZEOF_COUNT)
PAC_SET_MPI_TYPE(46, MPIX_C_FLOAT16, 2)
PAC_SET_MPI_TYPE(47, MPI_LOGICAL1, $pac_cv_f77_sizeof_logical1)
PAC_SET_MPI_TYPE(48, MPI_LOGICAL2, $pac_cv_f77_sizeof_logical2)
PAC_SET_MPI_TYPE(49, MPI_LOGICAL4, $pac_cv_f77_sizeof_logical4)
PAC_SET_MPI_TYPE(4a, MPI_LOGICAL8, $pac_cv_f77_sizeof_logical8)
PAC_SET_MPI_TYPE(4b, MPI_LOGICAL16, $pac_cv_f77_sizeof_logical16)
AC_MSG_RESULT([done])

# aliases
Expand Down
7 changes: 6 additions & 1 deletion doc/mansrc/mpiconsts.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,12 @@ standard.
- MPI_DOUBLE_COMPLEX - 'complex*16' (or 'complex*32') where supported.

The following datatypes are optional
+I MPI_INTEGER1 - 'integer*1' if supported
+I MPI_LOGICAL1 - 'logical*1' if supported
. MPI_LOGICAL2 - 'logical*2' if supported
. MPI_LOGICAL4 - 'logical*4' if supported
. MPI_LOGICAL8 - 'logical*8' if supported
. MPI_LOGICAL16 - 'logical*16' if supported
. MPI_INTEGER1 - 'integer*1' if supported
. MPI_INTEGER2 - 'integer*2' if supported
. MPI_INTEGER4 - 'integer*4' if supported
. MPI_INTEGER8 - 'integer*8' if supported
Expand Down
6 changes: 6 additions & 0 deletions src/include/mpi.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,11 @@ typedef int MPI_Datatype;
#define MPI_INTEGER4 ((MPI_Datatype)@MPI_INTEGER4@)
#define MPI_INTEGER8 ((MPI_Datatype)@MPI_INTEGER8@)
#define MPI_INTEGER16 ((MPI_Datatype)@MPI_INTEGER16@)
#define MPIX_LOGICAL1 ((MPI_Datatype)@MPI_LOGICAL1@)
#define MPIX_LOGICAL2 ((MPI_Datatype)@MPI_LOGICAL2@)
#define MPIX_LOGICAL4 ((MPI_Datatype)@MPI_LOGICAL4@)
#define MPIX_LOGICAL8 ((MPI_Datatype)@MPI_LOGICAL8@)
#define MPIX_LOGICAL16 ((MPI_Datatype)@MPI_LOGICAL16@)

/* C99 fixed-width datatypes */
#define MPI_INT8_T ((MPI_Datatype)@MPI_INT8_T@)
Expand Down Expand Up @@ -563,6 +568,7 @@ extern int * const MPI_WEIGHTS_EMPTY MPICH_API_PUBLIC;
#define MPI_TYPECLASS_REAL 1
#define MPI_TYPECLASS_INTEGER 2
#define MPI_TYPECLASS_COMPLEX 3
#define MPIX_TYPECLASS_LOGICAL 4

#define MPI_LOCK_EXCLUSIVE 234
#define MPI_LOCK_SHARED 235
Expand Down
8 changes: 8 additions & 0 deletions src/include/mpiimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@
#include "mpl.h"
#include "mpi.h"

/* TODO: remove once these become standard */
#define MPI_LOGICAL1 MPIX_LOGICAL1
#define MPI_LOGICAL2 MPIX_LOGICAL2
#define MPI_LOGICAL4 MPIX_LOGICAL4
#define MPI_LOGICAL8 MPIX_LOGICAL8
#define MPI_LOGICAL16 MPIX_LOGICAL16
#define MPI_TYPECLASS_LOGICAL MPIX_TYPECLASS_LOGICAL

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
Expand Down
2 changes: 1 addition & 1 deletion src/include/mpir_objects.h
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ const char *MPIR_Handle_get_kind_str(int kind);
#define MPIR_GROUP_PREALLOC 8
#endif

#define MPIR_DATATYPE_N_BUILTIN 71
#define MPIR_DATATYPE_N_BUILTIN 76
#ifdef MPID_DATATYPE_PREALLOC
#define MPIR_DATATYPE_PREALLOC MPID_DATATYPE_PREALLOC
#else
Expand Down
33 changes: 32 additions & 1 deletion src/include/mpir_op_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ MPIR_OP_TYPE_GROUP(C_INTEGER)
#define MPIR_OP_TYPE_MACRO_HAVE_LONG_LONG(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_LONG_DOUBLE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_FLOAT16(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL1_CTYPE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL2_CTYPE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL4_CTYPE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL8_CTYPE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL16_CTYPE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER2_CTYPE(mpi_type_,c_type_,type_name_)
#define MPIR_OP_TYPE_MACRO_HAVE_INTEGER4_CTYPE(mpi_type_,c_type_,type_name_)
Expand Down Expand Up @@ -110,6 +115,27 @@ MPIR_OP_TYPE_GROUP(C_INTEGER)
#undef MPIR_OP_TYPE_MACRO_HAVE_FLOAT16
#define MPIR_OP_TYPE_MACRO_HAVE_FLOAT16(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
#endif
/* Fortran fixed width logical type support */
#if defined(MPIR_LOGICAL1_CTYPE)
#undef MPIR_OP_TYPE_MACRO_HAVE_LOGICAL1_CTYPE
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL1_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
#endif
#if defined(MPIR_LOGICAL2_CTYPE)
#undef MPIR_OP_TYPE_MACRO_HAVE_LOGICAL2_CTYPE
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL2_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
#endif
#if defined(MPIR_LOGICAL4_CTYPE)
#undef MPIR_OP_TYPE_MACRO_HAVE_LOGICAL4_CTYPE
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL4_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
#endif
#if defined(MPIR_LOGICAL8_CTYPE)
#undef MPIR_OP_TYPE_MACRO_HAVE_LOGICAL8_CTYPE
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL8_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
#endif
#if defined(MPIR_LOGICAL16_CTYPE)
#undef MPIR_OP_TYPE_MACRO_HAVE_LOGICAL16_CTYPE
#define MPIR_OP_TYPE_MACRO_HAVE_LOGICAL16_CTYPE(mpi_type_,c_type_,type_name_) MPIR_OP_TYPE_MACRO(mpi_type_,c_type_,type_name_)
#endif
/* Fortran fixed width integer type support */
#if defined(MPIR_INTEGER1_CTYPE)
#undef MPIR_OP_TYPE_MACRO_HAVE_INTEGER1_CTYPE
Expand Down Expand Up @@ -322,7 +348,12 @@ typedef struct {
MPIR_OP_TYPE_MACRO_HAVE_FORTRAN(MPI_LOGICAL, MPI_Fint, mpir_typename_logical) \
MPIR_OP_TYPE_MACRO_HAVE_C_BOOL(MPI_C_BOOL, _Bool, mpir_typename_c_bool) \
MPIR_OP_TYPE_MACRO_HAVE_CXX_BOOL(MPI_CXX_BOOL, MPIR_CXX_BOOL_CTYPE, mpir_typename_cxx_bool_value)
#define MPIR_OP_TYPE_GROUP_LOGICAL_EXTRA /* empty, provided for consistency */
#define MPIR_OP_TYPE_GROUP_LOGICAL_EXTRA \
MPIR_OP_TYPE_MACRO_HAVE_LOGICAL1_CTYPE(MPI_LOGICAL1, MPIR_LOGICAL1_CTYPE, mpir_typename_logical1) \
MPIR_OP_TYPE_MACRO_HAVE_LOGICAL2_CTYPE(MPI_LOGICAL2, MPIR_LOGICAL2_CTYPE, mpir_typename_logical2) \
MPIR_OP_TYPE_MACRO_HAVE_LOGICAL4_CTYPE(MPI_LOGICAL4, MPIR_LOGICAL4_CTYPE, mpir_typename_logical4) \
MPIR_OP_TYPE_MACRO_HAVE_LOGICAL8_CTYPE(MPI_LOGICAL8, MPIR_LOGICAL8_CTYPE, mpir_typename_logical8) \
MPIR_OP_TYPE_MACRO_HAVE_LOGICAL16_CTYPE(MPI_LOGICAL16, MPIR_LOGICAL16_CTYPE, mpir_typename_logical16)

/* complex group */
#define MPIR_OP_TYPE_GROUP_COMPLEX \
Expand Down
23 changes: 23 additions & 0 deletions src/mpi/datatype/datatype_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,11 @@ int MPIR_Type_match_size_impl(int typeclass, int size, MPI_Datatype * datatype)
MPI_COMPLEX, MPI_DOUBLE_COMPLEX,
MPI_C_COMPLEX, MPI_C_DOUBLE_COMPLEX, MPI_C_LONG_DOUBLE_COMPLEX,
};
static MPI_Datatype bool_types[] = {
MPI_LOGICAL1, MPI_LOGICAL2, MPI_LOGICAL4, MPI_LOGICAL8, MPI_LOGICAL16,
MPI_LOGICAL,
MPI_C_BOOL,
};
MPI_Datatype matched_datatype = MPI_DATATYPE_NULL;
int i;
MPI_Aint tsize;
Expand Down Expand Up @@ -402,6 +407,24 @@ int MPIR_Type_match_size_impl(int typeclass, int size, MPI_Datatype * datatype)
}
}
break;
case MPI_TYPECLASS_LOGICAL:
{
int nBoolTypes = sizeof(bool_types) / sizeof(MPI_Datatype);
#ifdef HAVE_ERROR_CHECKING
tname = "MPI_TYPECLASS_LOGICAL";
#endif
for (i = 0; i < nBoolTypes; i++) {
if (bool_types[i] == MPI_DATATYPE_NULL) {
continue;
}
MPIR_Datatype_get_size_macro(bool_types[i], tsize);
if (tsize == size) {
matched_datatype = bool_types[i];
break;
}
}
}
break;
default:
/* --BEGIN ERROR HANDLING-- */
MPIR_ERR_SETANDSTMT(mpi_errno, MPI_ERR_ARG, break, "**typematchnoclass");
Expand Down
6 changes: 6 additions & 0 deletions src/mpi/datatype/typerep/src/typerep_ext32.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ static external32_basic_size_t external32_basic_size_array[] = {
{MPI_COMPLEX, 8},
{MPI_DOUBLE_COMPLEX, 16},

{MPI_LOGICAL1, 1},
{MPI_LOGICAL2, 2},
{MPI_LOGICAL4, 4},
{MPI_LOGICAL8, 8},
{MPI_LOGICAL16, 16},

{MPI_INTEGER1, 1},
{MPI_INTEGER2, 2},
{MPI_INTEGER4, 4},
Expand Down
12 changes: 11 additions & 1 deletion src/mpi/datatype/typerep/src/typerep_yaksa_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
static yaksa_type_t TYPEREP_YAKSA_TYPE__REAL16;
static yaksa_type_t TYPEREP_YAKSA_TYPE__COMPLEX32;
static yaksa_type_t TYPEREP_YAKSA_TYPE__INTEGER16;
static yaksa_type_t TYPEREP_YAKSA_TYPE__LOGICAL16;

yaksa_info_t MPII_yaksa_info_nogpu;

Expand Down Expand Up @@ -145,8 +146,12 @@ yaksa_type_t MPII_Typerep_get_yaksa_type(MPI_Datatype type)
case MPI_COUNT:
case MPI_C_BOOL:
#ifdef HAVE_FORTRAN_BINDING
case MPI_LOGICAL:
case MPI_CHARACTER:
case MPI_LOGICAL:
case MPI_LOGICAL1:
case MPI_LOGICAL2:
case MPI_LOGICAL4:
case MPI_LOGICAL8:
case MPI_INTEGER:
case MPI_INTEGER1:
case MPI_INTEGER2:
Expand Down Expand Up @@ -325,6 +330,8 @@ yaksa_type_t MPII_Typerep_get_yaksa_type(MPI_Datatype type)
yaksa_type = TYPEREP_YAKSA_TYPE__COMPLEX32;
} else if (type == MPI_INTEGER16) {
yaksa_type = TYPEREP_YAKSA_TYPE__INTEGER16;
} else if (type == MPI_LOGICAL16) {
yaksa_type = TYPEREP_YAKSA_TYPE__LOGICAL16;
} else {
MPIR_Datatype *typeptr;
MPIR_Datatype_get_ptr(type, typeptr);
Expand Down Expand Up @@ -425,6 +432,9 @@ void MPIR_Typerep_init(void)
MPIR_Datatype_get_size_macro(MPI_INTEGER16, size);
yaksa_type_create_contig(size, YAKSA_TYPE__BYTE, NULL, &TYPEREP_YAKSA_TYPE__INTEGER16);

MPIR_Datatype_get_size_macro(MPI_LOGICAL16, size);
yaksa_type_create_contig(size, YAKSA_TYPE__BYTE, NULL, &TYPEREP_YAKSA_TYPE__LOGICAL16);

MPIR_FUNC_EXIT;
}

Expand Down
9 changes: 8 additions & 1 deletion src/mpi/datatype/typeutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@ static mpi_names_t mpi_dtypes[] = {
type_name_entry(MPI_INTEGER4),
type_name_entry(MPI_INTEGER8),
type_name_entry(MPI_INTEGER16),
type_name_entry(MPI_LOGICAL1),
type_name_entry(MPI_LOGICAL2),
type_name_entry(MPI_LOGICAL4),
type_name_entry(MPI_LOGICAL8),
type_name_entry(MPI_LOGICAL16),

/* C++ types */
type_name_entry(MPI_CXX_BOOL),
Expand Down Expand Up @@ -287,7 +292,9 @@ int MPIR_Datatype_builtintype_alignment(MPI_Datatype type)
return ALIGNOF_CHAR;
} else if (type == MPI_LOGICAL || type == MPI_INTEGER || type == MPI_2INTEGER ||
type == MPI_INTEGER1 || type == MPI_INTEGER2 || type == MPI_INTEGER4 ||
type == MPI_INTEGER8 || type == MPI_INTEGER16) {
type == MPI_INTEGER8 || type == MPI_INTEGER16 ||
type == MPI_LOGICAL1 || type == MPI_LOGICAL2 || type == MPI_LOGICAL4 ||
type == MPI_LOGICAL8 || type == MPI_LOGICAL16) {
if (size == sizeof(int8_t))
return ALIGNOF_INT8_T;
else if (size == sizeof(int16_t))
Expand Down
5 changes: 3 additions & 2 deletions src/mpi/errhan/errnames.txt
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,9 @@ be in the range 0 to %d
**recvbuf_inplace:recvbuf cannot be MPI_IN_PLACE
**buf_inplace:buffer cannot be MPI_IN_PLACE
**buf_inplace %s:buffer '%s' cannot be MPI_IN_PLACE
**typematchnoclass:The value of typeclass is not one of MPI_TYPECLASS_REAL, \
MPI_TYPECLASS_INTEGER, or MPI_TYPECLASS_COMPLEX
**typematchnoclass:The value of typeclass is not one of \
MPI_TYPECLASS_LOGICAL, MPI_TYPECLASS_INTEGER, \
MPI_TYPECLASS_REAL, or MPI_TYPECLASS_COMPLEX
**typematchsize:No MPI datatype available for the given typeclass and size
**typematchsize %s %d:No MPI datatype available for typeclass %s and size %d
**f90typetoomany:Too many requests for unnamed, predefined f90 types
Expand Down
8 changes: 7 additions & 1 deletion src/mpid/ch4/netmod/ofi/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,13 @@ int MPIDI_OFI_mpi_to_ofi(MPI_Datatype dt, enum fi_datatype *fi_dt, MPI_Op op, en
} else if (dt == MPI_UNSIGNED_CHAR || dt == MPI_UNSIGNED_SHORT || dt == MPI_UNSIGNED ||
dt == MPI_UNSIGNED_LONG || dt == MPI_UNSIGNED_LONG_LONG ||
dt == MPI_UINT8_T || dt == MPI_UINT16_T || dt == MPI_UINT32_T ||
dt == MPI_UINT64_T || dt == MPI_C_BOOL || dt == MPI_LOGICAL) {
dt == MPI_UINT64_T || dt == MPI_C_BOOL ||
/* TODO: Should MPI_LOGICAL* be handled as unsigned?
These datatypes corresponds to Fortran LOGICAL
types. Therefore it may make more sense to be
handled similarly as INTEGER in the previous branch. */
dt == MPI_LOGICAL || dt == MPI_LOGICAL1 || dt == MPI_LOGICAL2 ||
dt == MPI_LOGICAL4 || dt == MPI_LOGICAL8) {
switch (dt_size) {
case 1:
*fi_dt = FI_UINT8;
Expand Down