On Sat, Nov 06, 2021 at 12:51:59AM +0800, Chung-Lin Tang wrote: > static int > get_kind (bool short_mapkind, void *kinds, int idx) > { > - return short_mapkind ? ((unsigned short *) kinds)[idx] > - : ((unsigned char *) kinds)[idx]; > + int val = (short_mapkind > + ? ((unsigned short *) kinds)[idx] > + : ((unsigned char *) kinds)[idx]); > + > + if (short_mapkind && GOMP_MAP_IMPLICIT_P (val)) > + val &= ~GOMP_MAP_IMPLICIT; > + return val; > +}
It doesn't make sense to test it twice. I'd do: if (!short_mapkind) return ((unsigned char *) kinds)[idx]; int val = ((unsigned short *) kinds)[idx]; if (GOMP_MAP_IMPLICIT_P (val)) val &= ~GOMP_MAP_IMPLICIT; return val; > + > + > +static bool > +get_implicit (bool short_mapkind, void *kinds, int idx) > +{ > + int val = (short_mapkind > + ? ((unsigned short *) kinds)[idx] > + : ((unsigned char *) kinds)[idx]); > + > + return short_mapkind && GOMP_MAP_IMPLICIT_P (val); > } and here even simpler, no need to read kinds at all: if (!short_mapkind) return false; int val = ((unsigned short *) kinds)[idx]; return GOMP_MAP_IMPLICIT_P (val); ? Otherwise LGTM. Jakub