Skip to content

Commit a3c3693

Browse files
bosilcaggouaillardet
authored andcommitted
Add a small optimization for the vector of predefined datatype.
(cherry picked from commit 639f4b1)
1 parent e346afe commit a3c3693

File tree

1 file changed

+8
-21
lines changed

1 file changed

+8
-21
lines changed

opal/datatype/opal_datatype_add.c

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
44
* University Research and Technology
55
* Corporation. All rights reserved.
6-
* Copyright (c) 2004-2009 The University of Tennessee and The University
6+
* Copyright (c) 2004-2016 The University of Tennessee and The University
77
* of Tennessee Research Foundation. All rights
88
* reserved.
99
* Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
@@ -278,27 +278,14 @@ int32_t opal_datatype_add( opal_datatype_t* pdtBase, const opal_datatype_t* pdtA
278278
*/
279279
if( (pdtAdd->flags & (OPAL_DATATYPE_FLAG_PREDEFINED | OPAL_DATATYPE_FLAG_DATA)) == (OPAL_DATATYPE_FLAG_PREDEFINED | OPAL_DATATYPE_FLAG_DATA) ) {
280280
pdtBase->btypes[pdtAdd->id] += count;
281+
pLast->elem.common.type = pdtAdd->id;
282+
pLast->elem.count = count;
283+
pLast->elem.disp = disp;
284+
pLast->elem.extent = extent;
285+
pdtBase->desc.used++;
286+
pLast->elem.common.flags = pdtAdd->flags & ~(OPAL_DATATYPE_FLAG_COMMITTED);
281287
if( (extent != (OPAL_PTRDIFF_TYPE)pdtAdd->size) && (count > 1) ) { /* gaps around the datatype */
282-
localFlags = pdtAdd->flags & ~(OPAL_DATATYPE_FLAG_COMMITTED | OPAL_DATATYPE_FLAG_CONTIGUOUS | OPAL_DATATYPE_FLAG_NO_GAPS);
283-
CREATE_LOOP_START( pLast, count, 2, extent, localFlags );
284-
pLast++;
285-
pLast->elem.common.type = pdtAdd->id;
286-
pLast->elem.count = 1;
287-
pLast->elem.disp = disp;
288-
pLast->elem.extent = pdtAdd->size;
289-
pLast->elem.common.flags = localFlags | OPAL_DATATYPE_FLAG_CONTIGUOUS;
290-
pLast++;
291-
CREATE_LOOP_END( pLast, 2, disp, pdtAdd->size, localFlags );
292-
pdtBase->desc.used += 3;
293-
pdtBase->btypes[OPAL_DATATYPE_LOOP] = 1;
294-
pdtBase->btypes[OPAL_DATATYPE_END_LOOP] = 1;
295-
} else {
296-
pLast->elem.common.type = pdtAdd->id;
297-
pLast->elem.count = count;
298-
pLast->elem.disp = disp;
299-
pLast->elem.extent = extent;
300-
pdtBase->desc.used++;
301-
pLast->elem.common.flags = pdtAdd->flags & ~(OPAL_DATATYPE_FLAG_COMMITTED);
288+
pLast->elem.common.flags &= ~(OPAL_DATATYPE_FLAG_CONTIGUOUS | OPAL_DATATYPE_FLAG_NO_GAPS);
302289
}
303290
} else {
304291
/* keep trace of the total number of basic datatypes in the datatype definition */

0 commit comments

Comments
 (0)