Legion Runtime
legion_config.h
Go to the documentation of this file.
1 /* Copyright 2024 Stanford University, NVIDIA Corporation
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 
17 #ifndef __LEGION_CONFIG_H__
18 #define __LEGION_CONFIG_H__
19 
20 // legion_defines.h is auto-generated by both the make and cmake builds
21 #include "legion_defines.h"
22 
23 #ifndef LEGION_USE_PYTHON_CFFI
24 // for UINT_MAX, INT_MAX, INT_MIN
25 #include <limits.h>
26 #endif // LEGION_USE_PYTHON_CFFI
27 
28 // Define a prefix for annotating functions for CUDA compilation
29 #if defined (__CUDACC__) || defined (__HIPCC__)
30 #define __CUDA_HD__ __host__ __device__
31 #else
32 #define __CUDA_HD__
33 #endif
34 
39 // ******************** IMPORTANT **************************
40 //
41 // This file is PURE C, **NOT** C++. Keep any C++-isms in
42 // legion_types.h, or elsewhere.
43 //
44 // ******************** IMPORTANT **************************
45 
46 #include "realm/realm_c.h"
47 
48 //==========================================================================
49 // Constants
50 //==========================================================================
51 
52 #ifndef LEGION_AUTO_GENERATE_ID
53 #define LEGION_AUTO_GENERATE_ID UINT_MAX
54 #else
55 #error "legion.h requires the ability to define the macro 'LEGION_AUTO_GENERATE_ID' but it has already been defined"
56 #endif
57 // This is for backwards compatibility
58 // Try to be nice in case someone else defined this
59 #ifndef LEGION_DISABLE_DEPRECATED_ENUMS
60 #ifndef AUTO_GENERATE_ID
61 #define AUTO_GENERATE_ID LEGION_AUTO_GENERATE_ID
62 #endif
63 #endif
64 
65 #ifndef LEGION_GC_MIN_PRIORITY
66 #define LEGION_GC_MIN_PRIORITY INT_MIN
67 #else
68 #error "legion.h requires the ability to define the macro 'LEGION_GC_MIN_PRIORITY' but it has already been defined"
69 #endif
70 // This is for backwards compatibility
71 // Try to be nice in case someone else defined this
72 #ifndef LEGION_DISABLE_DEPRECATED_ENUMS
73 #ifndef GC_MIN_PRIORITY
74 #define GC_MIN_PRIORITY LEGION_GC_MIN_PRIORITY
75 #endif
76 #endif
77 
78 #ifndef LEGION_GC_MAX_PRIORITY
79 #define LEGION_GC_MAX_PRIORITY INT_MAX
80 #else
81 #error "legion.h requires the ability to define the macro 'LEGION_GC_MAX_PRIORITY' but it has already been defined"
82 #endif
83 // This is for backwards compatibility
84 // Try to be nice in case someone else defined this
85 #ifndef LEGION_DISABLE_DEPRECATED_ENUMS
86 #ifndef GC_MAX_PRIORITY
87 #define GC_MAX_PRIORITY LEGION_GC_MAX_PRIORITY
88 #endif
89 #endif
90 
91 #ifndef LEGION_GC_NEVER_PRIORITY
92 #define LEGION_GC_NEVER_PRIORITY LEGION_GC_MIN_PRIORITY
93 #else
94 #error "legion.h requires the ability to define the macro 'LEGION_GC_NEVER_PRIORITY' but it has already been defined"
95 #endif
96 // This is for backwards compatibility
97 // Try to be nice in case someone else defined this
98 #ifndef LEGION_DISABLE_DEPRECATED_ENUMS
99 #ifndef GC_NEVER_PRIORITY
100 #define GC_NEVER_PRIORITY LEGION_GC_NEVER_PRIORITY
101 #endif
102 #endif
103 // This is for backwards compatibility
104 // Try to be nice in case someone else defined this
105 #ifdef BOUNDS_CHECKS
106 #ifndef LEGION_BOUNDS_CHECKS
107 #define LEGION_BOUNDS_CHECKS
108 #endif
109 #endif
110 // This is for backwards compatibility
111 // Try to be nice in case someone else defined this
112 #ifdef PRIVILEGE_CHECKS
113 #ifndef LEGION_PRIVILEGE_CHECKS
114 #define LEGION_PRIVILEGE_CHECKS
115 #endif
116 #endif
117 
118 #ifndef LEGION_GC_FIRST_PRIORITY
119 #define LEGION_GC_FIRST_PRIORITY LEGION_GC_MAX_PRIORITY
120 #endif
121 #ifndef LEGION_GC_DEFAULT_PRIORITY
122 #define LEGION_GC_DEFAULT_PRIORITY 0
123 #endif
124 #ifndef LEGION_GC_LAST_PRIORITY
125 #define LEGION_GC_LAST_PRIORITY (LEGION_GC_MIN_PRIORITY+1)
126 #endif
127 // This is for backwards compatibility
128 // Try to be nice in case someone else defined this
129 #ifndef LEGION_DISABLE_DEPRECATED_ENUMS
130 #ifndef GC_FIRST_PRIORITY
131 #define GC_FIRST_PRIORITY LEGION_GC_FIRST_PRIORITY
132 #endif
133 #ifndef GC_DEFAULT_PRIORITY
134 #define GC_DEFAULT_PRIORITY LEGION_GC_DEFAULT_PRIORITY
135 #endif
136 #ifndef GC_LAST_PRIORITY
137 #define GC_LAST_PRIORITY LEGION_GC_LAST_PRIORITY
138 #endif
139 #endif
140 
141 #ifndef LEGION_MAX_DIM
142 #define LEGION_MAX_DIM 3 // maximum number of dimensions for index spaces
143 #endif
144 
145 // This value used to describe the maximum return size that Legion would
146 // permit for future values. We've since relaxed this so futures could
147 // return large opaque buffers. This value now specifies the maximum size
148 // that Legion will all for future values to be passed by value without
149 // the Realm DMA system being used for actually moving the data.
150 #ifndef MAX_RETURN_SIZE // For backwards compatibility
151 #ifndef LEGION_MAX_RETURN_SIZE
152 #define LEGION_MAX_RETURN_SIZE 2048 // maximum return type size in bytes
153 #endif
154 #else
155 #ifndef LEGION_MAX_RETURN_SIZE
156 #define LEGION_MAX_RETURN_SIZE (MAX_RETURN_SIZE)
157 #endif
158 #endif
159 
160 #ifndef MAX_FIELDS // For backwards compatibility
161 #ifndef LEGION_MAX_FIELDS
162 #define LEGION_MAX_FIELDS 256 // must be a power of 2
163 #endif
164 #else
165 #ifndef LEGION_MAX_FIELDS
166 #define LEGION_MAX_FIELDS (MAX_FIELDS)
167 #endif
168 #endif
169 
170 // Some default values
171 
172 // The maximum number of nodes to be run on
173 #ifndef MAX_NUM_NODES // For backwards compatibility
174 #ifndef LEGION_MAX_NUM_NODES
175 #define LEGION_MAX_NUM_NODES 1024 // must be a power of 2
176 #endif
177 #else
178 #ifndef LEGION_MAX_NUM_NODES
179 #define LEGION_MAX_NUM_NODES (MAX_NUM_NODES)
180 #endif
181 #endif
182 // The maximum number of processors on a node
183 #ifndef MAX_NUM_PROCS // For backwards compatibility
184 #ifndef LEGION_MAX_NUM_PROCS
185 #define LEGION_MAX_NUM_PROCS 64 // must be a power of 2
186 #endif
187 #else
188 #ifndef LEGION_MAX_NUM_PROCS
189 #define LEGION_MAX_NUM_PROCS (MAX_NUM_PROCS)
190 #endif
191 #endif
192 // Maximum ID for an application task ID
193 #ifndef MAX_APPLICATION_TASK_ID // For backwards compatibility
194 #ifndef LEGION_MAX_APPLICATION_TASK_ID
195 #define LEGION_MAX_APPLICATION_TASK_ID (1<<20)
196 #endif
197 #else
198 #ifndef LEGION_MAX_APPLICATION_TASK_ID
199 #define LEGION_MAX_APPLICATION_TASK_ID (MAX_APPLICATION_TASK_ID)
200 #endif
201 #endif
202 // Maximum ID for an application field ID
203 #ifndef MAX_APPLICATION_FIELD_ID // For backwards compatibility
204 #ifndef LEGION_MAX_APPLICATION_FIELD_ID
205 #define LEGION_MAX_APPLICATION_FIELD_ID (1<<20)
206 #endif
207 #else
208 #ifndef LEGION_MAX_APPLICATION_FIELD_ID
209 #define LEGION_MAX_APPLICATION_FIELD_ID (MAX_APPLICATION_FIELD_ID)
210 #endif
211 #endif
212 // Maximum ID for an application mapper ID
213 #ifndef MAX_APPLICATION_MAPPER_ID // For backwards compatibility
214 #ifndef LEGION_MAX_APPLICATION_MAPPER_ID
215 #define LEGION_MAX_APPLICATION_MAPPER_ID (1<<20)
216 #endif
217 #else
218 #ifndef LEGION_MAX_APPLICATION_MAPPER_ID
219 #define LEGION_MAX_APPLICATION_MAPPER_ID (MAX_APPLICATION_MAPPER_ID)
220 #endif
221 #endif
222 // Maximum ID for an application reduction ID
223 #ifndef MAX_APPLICATION_REDUCTION_ID
224 #define MAX_APPLICATION_REDUCTION_ID (1<<20)
225 #endif
226 // Maximum ID for an application trace ID
227 #ifndef LEGION_MAX_APPLICATION_TRACE_ID
228 #define LEGION_MAX_APPLICATION_TRACE_ID (1<<20)
229 #endif
230 // Maximum ID for an application projection ID
231 #ifndef MAX_APPLICATION_PROJECTION_ID // For backwards compatibility
232 #ifndef LEGION_MAX_APPLICATION_PROJECTION_ID
233 #define LEGION_MAX_APPLICATION_PROJECTION_ID (1<<20)
234 #endif
235 #else
236 #ifndef LEGION_MAX_APPLICATION_PROJECTION_ID
237 #define LEGION_MAX_APPLICATION_PROJECTION_ID (MAX_APPLICATION_PROJECTION_ID)
238 #endif
239 #endif
240 // Maximum ID for an application sharding ID
241 #ifndef MAX_APPLICATION_SHARDING_ID // For backwards compatibility
242 #ifndef LEGION_MAX_APPLICATION_SHARDING_ID
243 #define LEGION_MAX_APPLICATION_SHARDING_ID (1<<20)
244 #endif
245 #else
246 #ifndef LEGION_MAX_APPLICATION_SHARDING_ID
247 #define LEGION_MAX_APPLICATION_SHARDING_ID (MAX_APPLICATION_SHARDING_ID)
248 #endif
249 #endif
250 // Maximum ID for an application reduction ID
251 #ifndef LEGION_MAX_APPLICATION_REDOP_ID
252 #ifdef LEGION_USE_PYTHON_CFFI
253 #define LEGION_MAX_APPLICATION_REDOP_ID 1048576
254 #else
255 #define LEGION_MAX_APPLICATION_REDOP_ID (1<<20) // Python CFFI can't do this math
256 #endif
257 #endif
258 // Maximum ID for an application serdez ID
259 #ifndef LEGION_MAX_APPLICATION_SERDEZ_ID
260 #define LEGION_MAX_APPLICATION_SERDEZ_ID (1<<20)
261 #endif
262 // Maximum ID for layout constraint ID
263 #ifndef LEGION_MAX_APPLICATION_LAYOUT_ID
264 #define LEGION_MAX_APPLICATION_LAYOUT_ID (1<<20)
265 #endif
266 // Default number of local fields per field space
267 #ifndef DEFAULT_LOCAL_FIELDS // For backwards compatibility
268 #ifndef LEGION_DEFAULT_LOCAL_FIELDS
269 #define LEGION_DEFAULT_LOCAL_FIELDS 4
270 #endif
271 #else
272 #ifndef LEGION_DEFAULT_LOCAL_FIELDS
273 #define LEGION_DEFAULT_LOCAL_FIELDS (DEFAULT_LOCAL_FIELDS)
274 #endif
275 #endif
276 // Default number of mapper slots
277 #ifndef DEFAULT_MAPPER_SLOTS // For backwards compatibility
278 #ifndef LEGION_DEFAULT_MAPPER_SLOTS
279 #define LEGION_DEFAULT_MAPPER_SLOTS 8
280 #endif
281 #else
282 #ifndef LEGION_DEFAULT_MAPPER_SLOTS
283 #define LEGION_DEFAULT_MAPPER_SLOTS (DEFAULT_MAPPER_SLOTS)
284 #endif
285 #endif
286 // Default number of contexts made for each runtime instance
287 // Ideally this is a power of 2 (better for performance)
288 #ifndef DEFAULT_CONTEXTS // For backwards compatibility
289 #ifndef LEGION_DEFAULT_CONTEXTS
290 #define LEGION_DEFAULT_CONTEXTS 8
291 #endif
292 #else
293 #ifndef LEGION_DEFAULT_CONTEXTS
294 #define LEGION_DEFAULT_CONTEXTS (DEFAULT_CONTEXTS)
295 #endif
296 #endif
297 // Maximum number of sub-tasks per task at a time
298 #ifndef DEFAULT_MAX_TASK_WINDOW // For backwards compatibility
299 #ifndef LEGION_DEFAULT_MAX_TASK_WINDOW
300 #define LEGION_DEFAULT_MAX_TASK_WINDOW 1024
301 #endif
302 #else
303 #ifndef LEGION_DEFAULT_MAX_TASK_WINDOW
304 #define LEGION_DEFAULT_MAX_TASK_WINDOW (DEFAULT_MAX_TASK_WINDOW)
305 #endif
306 #endif
307 // Default amount of hysteresis on the task window in the
308 // form of a percentage (must be between 0 and 100)
309 #ifndef DEFAULT_TASK_WINDOW_HYSTERESIS // For backwards compatibility
310 #ifndef LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS
311 #define LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS 25
312 #endif
313 #else
314 #ifndef LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS
315 #define LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS (DEFAULT_TASK_WINDOW_HYSTERESIS)
316 #endif
317 #endif
318 // Default number of tasks to have in flight before applying
319 // back pressure to the mapping process for a context
320 #ifndef DEFAULT_MIN_TASKS_TO_SCHEDULE // For backwards compatibility
321 #ifndef LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE
322 #define LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE 32
323 #endif
324 #else
325 #ifndef LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE
326 #define LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE (DEFAULT_MIN_TASKS_TO_SCHEDULE)
327 #endif
328 #endif
329 // How many tasks to group together for runtime operations
330 #ifndef DEFAULT_META_TASK_VECTOR_WIDTH // For backwards compatibility
331 #ifndef LEGION_DEFAULT_META_TASK_VECTOR_WIDTH
332 #define LEGION_DEFAULT_META_TASK_VECTOR_WIDTH 16
333 #endif
334 #else
335 #ifndef LEGION_DEFAULT_META_TASK_VECTOR_WIDTH
336 #define LEGION_DEFAULT_META_TASK_VECTOR_WIDTH (DEFAULT_META_TASK_VECTOR_WIDTH)
337 #endif
338 #endif
339 // Percentage of memory to reserve for eager allocations
340 #ifndef LEGION_DEFAULT_EAGER_ALLOC_PERCENTAGE
341 #define LEGION_DEFAULT_EAGER_ALLOC_PERCENTAGE 1
342 #endif
343 // Maximum number of templates to keep around in traces
344 #ifndef LEGION_DEFAULT_MAX_TEMPLATES_PER_TRACE
345 #define LEGION_DEFAULT_MAX_TEMPLATES_PER_TRACE 16
346 #endif
347 // Default number of replay tasks to run in parallel
348 #ifndef DEFAULT_MAX_REPLAY_PARALLELISM // For backwards compatibility
349 #ifndef LEGION_DEFAULT_MAX_REPLAY_PARALLELISM
350 #define LEGION_DEFAULT_MAX_REPLAY_PARALLELISM 2
351 #endif
352 #else
353 #ifndef LEGION_DEFAULT_MAX_REPLAY_PARALLELISM
354 #define LEGION_DEFAULT_MAX_REPLAY_PARALLELISM (DEFAULT_MAX_REPLAY_PARALLELISM)
355 #endif
356 #endif
357 // The maximum size of active messages sent by the runtime in bytes
358 // Note this value was picked based on making a tradeoff between
359 // latency and bandwidth numbers on both Cray and Infiniband
360 // interconnect networks.
361 #ifndef DEFAULT_MAX_MESSAGE_SIZE // For backwards compatibility
362 #ifndef LEGION_DEFAULT_MAX_MESSAGE_SIZE
363 #define LEGION_DEFAULT_MAX_MESSAGE_SIZE 16384
364 #endif
365 #else
366 #ifndef LEGION_DEFAULT_MAX_MESSAGE_SIZE
367 #define LEGION_DEFAULT_MAX_MESSAGE_SIZE (DEFAULT_MAX_MESSAGE_SIZE)
368 #endif
369 #endif
370 // Number of events to place in each GC epoch
371 // Large counts improve efficiency but add latency to
372 // garbage collection. Smaller count reduce efficiency
373 // but improve latency of collection.
374 #ifndef DEFAULT_GC_EPOCH_SIZE // For backwards compatibility
375 #ifndef LEGION_DEFAULT_GC_EPOCH_SIZE
376 #define LEGION_DEFAULT_GC_EPOCH_SIZE 64
377 #endif
378 #else
379 #ifndef LEGION_DEFAULT_GC_EPOCH_SIZE
380 #define LEGION_DEFAULT_GC_EPOCH_SIZE (DEFAULT_GC_EPOCH_SIZE)
381 #endif
382 #endif
383 // Number of control replications to be supported
384 #ifndef LEGION_DEFAULT_MAX_CONTROL_REPLICATION_CONTEXTS
385 #define LEGION_DEFAULT_MAX_CONTROL_REPLICATION_CONTEXTS 1
386 #endif
387 // Number of phase barriers for communication of
388 // close operation composite view meta data
389 #ifndef LEGION_CONTROL_REPLICATION_COMMUNICATION_BARRIERS
390 #define LEGION_CONTROL_REPLICATION_COMMUNICATION_BARRIERS 32
391 #endif
392 
393 // Used for debugging memory leaks
394 // How often tracing information is dumped
395 // based on the number of scheduler invocations
396 #ifndef TRACE_ALLOCATION_FREQUENCY // For backwards compatibility
397 #ifndef LEGION_TRACE_ALLOCATION_FREQUENCY
398 #define LEGION_TRACE_ALLOCATION_FREQUENCY 1024
399 #endif
400 #else
401 #ifndef LEGION_TRACE_ALLOCATION_FREQUENCY
402 #define LEGION_TRACE_ALLOCATION_FREQUENCY (TRACE_ALLOCATION_FREQUENCY)
403 #endif
404 #endif
405 
406 // The maximum alignment guaranteed on the target
407 // machine in bytes. On linux systems, this is
408 // (at least) twice the size of a pointer.
409 #ifndef LEGION_MAX_ALIGNMENT
410 #define LEGION_MAX_ALIGNMENT (2*sizeof(void *))
411 #endif
412 
413 // Give an ideal upper bound on the maximum
414 // number of operations Legion should keep
415 // available for recycling. Where possible
416 // the runtime will delete objects to keep
417 // overall memory usage down.
418 #ifndef LEGION_MAX_RECYCLABLE_OBJECTS
419 #define LEGION_MAX_RECYCLABLE_OBJECTS 1024
420 #endif
421 
422 // An initial seed for random numbers
423 // generated by the high-level runtime.
424 #ifndef LEGION_INIT_SEED
425 #define LEGION_INIT_SEED 0x221B
426 #endif
427 
428 // The radix for the runtime to use when
429 // performing collective operations internally
430 #ifndef LEGION_COLLECTIVE_RADIX
431 #define LEGION_COLLECTIVE_RADIX 8
432 #endif
433 
434 // The radix for the broadcast tree
435 // when attempting to shutdown the runtime
436 #ifndef LEGION_SHUTDOWN_RADIX
437 #define LEGION_SHUTDOWN_RADIX 8
438 #endif
439 
440 // Maximum number of equivalence subsets in the bounding volume hierarchy
441 #ifndef LEGION_MAX_BVH_FANOUT
442 #define LEGION_MAX_BVH_FANOUT 16
443 #endif
444 
445 // Maximum number of non-replayable templates before warnings
446 #ifndef LEGION_NON_REPLAYABLE_WARNING
447 #define LEGION_NON_REPLAYABLE_WARNING 5
448 #endif
449 
450 // Maximum number of new templates allowed
451 #ifndef LEGION_NEW_TEMPLATE_WARNING_COUNT
452 #define LEGION_NEW_TEMPLATE_WARNING_COUNT 8
453 #endif
454 
455 // Initial offset for library IDs
456 // Controls how many IDs are available for dynamic use
457 #ifndef LEGION_INITIAL_LIBRARY_ID_OFFSET
458 #define LEGION_INITIAL_LIBRARY_ID_OFFSET (1 << 30)
459 #endif
460 
461 // Default percentage of the number of children in a
462 // disjoint+complete partition that need to be accessed
463 // before we consider the whole partition as accessed
464 #ifndef LEGION_REFINEMENT_PARTITION_PERCENTAGE
465 #define LEGION_REFINEMENT_PARTITION_PERCENTAGE 50
466 #endif
467 
468 // Some helper macros
469 
470 // This statically computes an integer log base 2 for a number
471 // which is guaranteed to be a power of 2. Adapted from
472 // http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn
473 #define STATIC_LOG2(x) (LOG2_LOOKUP(uint32_t(x * 0x077CB531U) >> 27))
474 #define LOG2_LOOKUP(x) ((x==0) ? 0 : (x==1) ? 1 : (x==2) ? 28 : (x==3) ? 2 : \
475  (x==4) ? 29 : (x==5) ? 14 : (x==6) ? 24 : (x==7) ? 3 : \
476  (x==8) ? 30 : (x==9) ? 22 : (x==10) ? 20 : (x==11) ? 15 : \
477  (x==12) ? 25 : (x==13) ? 17 : (x==14) ? 4 : (x==15) ? 8 : \
478  (x==16) ? 31 : (x==17) ? 27 : (x==18) ? 13 : (x==19) ? 23 : \
479  (x==20) ? 21 : (x==21) ? 19 : (x==22) ? 16 : (x==23) ? 7 : \
480  (x==24) ? 26 : (x==25) ? 12 : (x==26) ? 18 : (x==27) ? 6 : \
481  (x==28) ? 11 : (x==29) ? 5 : (x==30) ? 10 : 9)
482 
483 // log2(LEGION_MAX_FIELDS)
484 #ifndef LEGION_FIELD_LOG2
485 #define LEGION_FIELD_LOG2 STATIC_LOG2(LEGION_MAX_FIELDS)
486 #endif
487 
488 #define LEGION_STRINGIFY(x) #x
489 #define LEGION_MACRO_TO_STRING(x) LEGION_STRINGIFY(x)
490 
491 #define LEGION_DISTRIBUTED_ID_MASK 0x00FFFFFFFFFFFFFFULL
492 #define LEGION_DISTRIBUTED_ID_FILTER(x) ((x) & LEGION_DISTRIBUTED_ID_MASK)
493 #define LEGION_DISTRIBUTED_HELP_DECODE(x) ((x) >> 56)
494 #define LEGION_DISTRIBUTED_HELP_ENCODE(x,y) ((x) | (((long long)(y)) << 56))
495 
496 #if LEGION_MAX_DIM == 1
497 
498 #define LEGION_FOREACH_N(__func__) \
499  __func__(1)
500 #define LEGION_FOREACH_NN(__func__) \
501  __func__(1,1)
502 
503 #elif LEGION_MAX_DIM == 2
504 
505 #define LEGION_FOREACH_N(__func__) \
506  __func__(1) \
507  __func__(2)
508 #define LEGION_FOREACH_NN(__func__) \
509  __func__(1,1) \
510  __func__(1,2) \
511  __func__(2,1) \
512  __func__(2,2)
513 
514 #elif LEGION_MAX_DIM == 3
515 
516 #define LEGION_FOREACH_N(__func__) \
517  __func__(1) \
518  __func__(2) \
519  __func__(3)
520 #define LEGION_FOREACH_NN(__func__) \
521  __func__(1,1) \
522  __func__(1,2) \
523  __func__(1,3) \
524  __func__(2,1) \
525  __func__(2,2) \
526  __func__(2,3) \
527  __func__(3,1) \
528  __func__(3,2) \
529  __func__(3,3)
530 
531 #elif LEGION_MAX_DIM == 4
532 
533 #define LEGION_FOREACH_N(__func__) \
534  __func__(1) \
535  __func__(2) \
536  __func__(3) \
537  __func__(4)
538 #define LEGION_FOREACH_NN(__func__) \
539  __func__(1,1) \
540  __func__(1,2) \
541  __func__(1,3) \
542  __func__(1,4) \
543  __func__(2,1) \
544  __func__(2,2) \
545  __func__(2,3) \
546  __func__(2,4) \
547  __func__(3,1) \
548  __func__(3,2) \
549  __func__(3,3) \
550  __func__(3,4) \
551  __func__(4,1) \
552  __func__(4,2) \
553  __func__(4,3) \
554  __func__(4,4)
555 
556 #elif LEGION_MAX_DIM == 5
557 
558 #define LEGION_FOREACH_N(__func__) \
559  __func__(1) \
560  __func__(2) \
561  __func__(3) \
562  __func__(4) \
563  __func__(5)
564 #define LEGION_FOREACH_NN(__func__) \
565  __func__(1,1) \
566  __func__(1,2) \
567  __func__(1,3) \
568  __func__(1,4) \
569  __func__(1,5) \
570  __func__(2,1) \
571  __func__(2,2) \
572  __func__(2,3) \
573  __func__(2,4) \
574  __func__(2,5) \
575  __func__(3,1) \
576  __func__(3,2) \
577  __func__(3,3) \
578  __func__(3,4) \
579  __func__(3,5) \
580  __func__(4,1) \
581  __func__(4,2) \
582  __func__(4,3) \
583  __func__(4,4) \
584  __func__(4,5) \
585  __func__(5,1) \
586  __func__(5,2) \
587  __func__(5,3) \
588  __func__(5,4) \
589  __func__(5,5)
590 
591 #elif LEGION_MAX_DIM == 6
592 
593 #define LEGION_FOREACH_N(__func__) \
594  __func__(1) \
595  __func__(2) \
596  __func__(3) \
597  __func__(4) \
598  __func__(5) \
599  __func__(6)
600 #define LEGION_FOREACH_NN(__func__) \
601  __func__(1,1) \
602  __func__(1,2) \
603  __func__(1,3) \
604  __func__(1,4) \
605  __func__(1,5) \
606  __func__(1,6) \
607  __func__(2,1) \
608  __func__(2,2) \
609  __func__(2,3) \
610  __func__(2,4) \
611  __func__(2,5) \
612  __func__(2,6) \
613  __func__(3,1) \
614  __func__(3,2) \
615  __func__(3,3) \
616  __func__(3,4) \
617  __func__(3,5) \
618  __func__(3,6) \
619  __func__(4,1) \
620  __func__(4,2) \
621  __func__(4,3) \
622  __func__(4,4) \
623  __func__(4,5) \
624  __func__(4,6) \
625  __func__(5,1) \
626  __func__(5,2) \
627  __func__(5,3) \
628  __func__(5,4) \
629  __func__(5,5) \
630  __func__(5,6) \
631  __func__(6,1) \
632  __func__(6,2) \
633  __func__(6,3) \
634  __func__(6,4) \
635  __func__(6,5) \
636  __func__(6,6)
637 
638 #elif LEGION_MAX_DIM == 7
639 
640 #define LEGION_FOREACH_N(__func__) \
641  __func__(1) \
642  __func__(2) \
643  __func__(3) \
644  __func__(4) \
645  __func__(5) \
646  __func__(6) \
647  __func__(7)
648 #define LEGION_FOREACH_NN(__func__) \
649  __func__(1,1) \
650  __func__(1,2) \
651  __func__(1,3) \
652  __func__(1,4) \
653  __func__(1,5) \
654  __func__(1,6) \
655  __func__(1,7) \
656  __func__(2,1) \
657  __func__(2,2) \
658  __func__(2,3) \
659  __func__(2,4) \
660  __func__(2,5) \
661  __func__(2,6) \
662  __func__(2,7) \
663  __func__(3,1) \
664  __func__(3,2) \
665  __func__(3,3) \
666  __func__(3,4) \
667  __func__(3,5) \
668  __func__(3,6) \
669  __func__(3,7) \
670  __func__(4,1) \
671  __func__(4,2) \
672  __func__(4,3) \
673  __func__(4,4) \
674  __func__(4,5) \
675  __func__(4,6) \
676  __func__(4,7) \
677  __func__(5,1) \
678  __func__(5,2) \
679  __func__(5,3) \
680  __func__(5,4) \
681  __func__(5,5) \
682  __func__(5,6) \
683  __func__(5,7) \
684  __func__(6,1) \
685  __func__(6,2) \
686  __func__(6,3) \
687  __func__(6,4) \
688  __func__(6,5) \
689  __func__(6,6) \
690  __func__(6,7) \
691  __func__(7,1) \
692  __func__(7,2) \
693  __func__(7,3) \
694  __func__(7,4) \
695  __func__(7,5) \
696  __func__(7,6) \
697  __func__(7,7)
698 
699 #elif LEGION_MAX_DIM == 8
700 
701 #define LEGION_FOREACH_N(__func__) \
702  __func__(1) \
703  __func__(2) \
704  __func__(3) \
705  __func__(4) \
706  __func__(5) \
707  __func__(6) \
708  __func__(7) \
709  __func__(8)
710 #define LEGION_FOREACH_NN(__func__) \
711  __func__(1,1) \
712  __func__(1,2) \
713  __func__(1,3) \
714  __func__(1,4) \
715  __func__(1,5) \
716  __func__(1,6) \
717  __func__(1,7) \
718  __func__(1,8) \
719  __func__(2,1) \
720  __func__(2,2) \
721  __func__(2,3) \
722  __func__(2,4) \
723  __func__(2,5) \
724  __func__(2,6) \
725  __func__(2,7) \
726  __func__(2,8) \
727  __func__(3,1) \
728  __func__(3,2) \
729  __func__(3,3) \
730  __func__(3,4) \
731  __func__(3,5) \
732  __func__(3,6) \
733  __func__(3,7) \
734  __func__(3,8) \
735  __func__(4,1) \
736  __func__(4,2) \
737  __func__(4,3) \
738  __func__(4,4) \
739  __func__(4,5) \
740  __func__(4,6) \
741  __func__(4,7) \
742  __func__(4,8) \
743  __func__(5,1) \
744  __func__(5,2) \
745  __func__(5,3) \
746  __func__(5,4) \
747  __func__(5,5) \
748  __func__(5,6) \
749  __func__(5,7) \
750  __func__(5,8) \
751  __func__(6,1) \
752  __func__(6,2) \
753  __func__(6,3) \
754  __func__(6,4) \
755  __func__(6,5) \
756  __func__(6,6) \
757  __func__(6,7) \
758  __func__(6,8) \
759  __func__(7,1) \
760  __func__(7,2) \
761  __func__(7,3) \
762  __func__(7,4) \
763  __func__(7,5) \
764  __func__(7,6) \
765  __func__(7,7) \
766  __func__(7,8) \
767  __func__(8,1) \
768  __func__(8,2) \
769  __func__(8,3) \
770  __func__(8,4) \
771  __func__(8,5) \
772  __func__(8,6) \
773  __func__(8,7) \
774  __func__(8,8)
775 
776 #elif LEGION_MAX_DIM == 9
777 
778 #define LEGION_FOREACH_N(__func__) \
779  __func__(1) \
780  __func__(2) \
781  __func__(3) \
782  __func__(4) \
783  __func__(5) \
784  __func__(6) \
785  __func__(7) \
786  __func__(8) \
787  __func__(9)
788 #define LEGION_FOREACH_NN(__func__) \
789  __func__(1,1) \
790  __func__(1,2) \
791  __func__(1,3) \
792  __func__(1,4) \
793  __func__(1,5) \
794  __func__(1,6) \
795  __func__(1,7) \
796  __func__(1,8) \
797  __func__(1,9) \
798  __func__(2,1) \
799  __func__(2,2) \
800  __func__(2,3) \
801  __func__(2,4) \
802  __func__(2,5) \
803  __func__(2,6) \
804  __func__(2,7) \
805  __func__(2,8) \
806  __func__(2,9) \
807  __func__(3,1) \
808  __func__(3,2) \
809  __func__(3,3) \
810  __func__(3,4) \
811  __func__(3,5) \
812  __func__(3,6) \
813  __func__(3,7) \
814  __func__(3,8) \
815  __func__(3,9) \
816  __func__(4,1) \
817  __func__(4,2) \
818  __func__(4,3) \
819  __func__(4,4) \
820  __func__(4,5) \
821  __func__(4,6) \
822  __func__(4,7) \
823  __func__(4,8) \
824  __func__(4,9) \
825  __func__(5,1) \
826  __func__(5,2) \
827  __func__(5,3) \
828  __func__(5,4) \
829  __func__(5,5) \
830  __func__(5,6) \
831  __func__(5,7) \
832  __func__(5,8) \
833  __func__(5,9) \
834  __func__(6,1) \
835  __func__(6,2) \
836  __func__(6,3) \
837  __func__(6,4) \
838  __func__(6,5) \
839  __func__(6,6) \
840  __func__(6,7) \
841  __func__(6,8) \
842  __func__(6,9) \
843  __func__(7,1) \
844  __func__(7,2) \
845  __func__(7,3) \
846  __func__(7,4) \
847  __func__(7,5) \
848  __func__(7,6) \
849  __func__(7,7) \
850  __func__(7,8) \
851  __func__(7,9) \
852  __func__(8,1) \
853  __func__(8,2) \
854  __func__(8,3) \
855  __func__(8,4) \
856  __func__(8,5) \
857  __func__(8,6) \
858  __func__(8,7) \
859  __func__(8,8) \
860  __func__(8,9) \
861  __func__(9,1) \
862  __func__(9,2) \
863  __func__(9,3) \
864  __func__(9,4) \
865  __func__(9,5) \
866  __func__(9,6) \
867  __func__(9,7) \
868  __func__(9,8) \
869  __func__(9,9)
870 
871 #else
872 #error "Unsupported LEGION_MAX_DIM"
873 #endif
874 
875 #ifdef LEGION_DISABLE_DEPRECATED_ENUMS
876 #define LEGION_DEPRECATED_ENUM(x)
877 #define LEGION_DEPRECATED_ENUM_REAL(x)
878 #define LEGION_DEPRECATED_ENUM_FROM(x,y)
879 #elif defined(LEGION_WARN_DEPRECATED_ENUMS)
880 #if defined(__cplusplus) && __cplusplus >= 201402L
881 // c++14 and higher has nice deprecated warnings
882 #define LEGION_DEPRECATED_ENUM(x) \
883  x [[deprecated("use LEGION_" #x " instead")]] = LEGION_##x,
884 #define LEGION_DEPRECATED_ENUM_REAL(x) \
885  x [[deprecated(#x " is no longer supported")]],
886 #define LEGION_DEPRECATED_ENUM_FROM(x,y) \
887  x [[deprecated("use " #y " instead")]] = y,
888 #else
889 // C and older versions of c++
890 #define LEGION_DEPRECATED_ENUM(x) \
891  x __attribute__ ((deprecated ("use LEGION_" #x " instead"))) = LEGION_##x,
892 #define LEGION_DEPRECATED_ENUM_REAL(x) \
893  x __attribute__ ((deprecated (#x " is no longer supported")))
894 #define LEGION_DEPRECATED_ENUM_FROM(x,y) \
895  x __attribute__ ((deprecated ("use " #y " instead"))) = y,
896 #endif
897 #else
898 #define LEGION_DEPRECATED_ENUM(x) \
899  x = LEGION_##x,
900 #define LEGION_DEPRECATED_ENUM_REAL(x) \
901  x,
902 #define LEGION_DEPRECATED_ENUM_FROM(x,y) \
903  x = y,
904 #endif
905 
906 // The following enums are all re-exported by
907 // namespace Legion. These versions are here to facilitate the
908 // C API. If you are writing C++ code, use the namespaced versions.
909 
910 typedef enum legion_error_t {
911  LEGION_NO_ERROR = 0,
912  ERROR_RESERVED_REDOP_ID = 1,
913  ERROR_DUPLICATE_REDOP_ID = 2,
914  ERROR_RESERVED_TYPE_HANDLE = 3,
915  ERROR_DUPLICATE_TYPE_HANDLE = 4,
916  ERROR_DUPLICATE_FIELD_ID = 5,
917  ERROR_PARENT_TYPE_HANDLE_NONEXISTENT = 6,
918  ERROR_MISSING_PARENT_FIELD_ID = 7,
919  ERROR_RESERVED_PROJECTION_ID = 8,
920  ERROR_DUPLICATE_PROJECTION_ID = 9,
921  ERROR_UNREGISTERED_VARIANT = 10,
922  ERROR_USE_REDUCTION_REGION_REQ = 11,
923  ERROR_INVALID_ACCESSOR_REQUESTED = 12,
924  ERROR_PHYSICAL_REGION_UNMAPPED = 13,
925  ERROR_RESERVED_TASK_ID = 14,
926  ERROR_INVALID_ARG_MAP_DESTRUCTION = 15,
927  ERROR_RESERVED_MAPPING_ID = 16,
928  ERROR_BAD_INDEX_PRIVILEGES = 17,
929  ERROR_BAD_FIELD_PRIVILEGES = 18,
930  ERROR_BAD_REGION_PRIVILEGES = 19,
931  ERROR_BAD_PARTITION_PRIVILEGES = 20,
932  ERROR_BAD_PARENT_INDEX = 21,
933  ERROR_BAD_INDEX_PATH = 22,
934  ERROR_BAD_PARENT_REGION = 23,
935  ERROR_BAD_REGION_PATH = 24,
936  ERROR_BAD_PARTITION_PATH = 25,
937  ERROR_BAD_FIELD = 26,
938  ERROR_BAD_REGION_TYPE = 27,
939  ERROR_INVALID_TYPE_HANDLE = 28,
940  ERROR_LEAF_TASK_VIOLATION = 29,
941  ERROR_INVALID_REDOP_ID = 30,
942  ERROR_REDUCTION_INITIAL_VALUE_MISMATCH = 31,
943  ERROR_INVALID_UNMAP_OP = 32,
944  ERROR_INVALID_DUPLICATE_MAPPING = 33,
945  ERROR_INVALID_REGION_ARGUMENT_INDEX = 34,
946  ERROR_INVALID_MAPPING_ACCESS = 35,
947  ERROR_STALE_INLINE_MAPPING_ACCESS = 36,
948  ERROR_INVALID_INDEX_SPACE_PARENT = 37,
949  ERROR_INVALID_INDEX_PART_PARENT = 38,
950  ERROR_INVALID_INDEX_SPACE_COLOR = 39,
951  ERROR_INVALID_INDEX_PART_COLOR = 40,
952  ERROR_INVALID_INDEX_SPACE_HANDLE = 41,
953  ERROR_INVALID_INDEX_PART_HANDLE = 42,
954  ERROR_FIELD_SPACE_FIELD_MISMATCH = 43,
955  ERROR_INVALID_INSTANCE_FIELD = 44,
956  ERROR_DUPLICATE_INSTANCE_FIELD = 45,
957  ERROR_TYPE_INST_MISMATCH = 46,
958  ERROR_TYPE_INST_MISSIZE = 47,
959  ERROR_INVALID_INDEX_SPACE_ENTRY = 48,
960  ERROR_INVALID_INDEX_PART_ENTRY = 49,
961  ERROR_INVALID_FIELD_SPACE_ENTRY = 50,
962  ERROR_INVALID_REGION_ENTRY = 51,
963  ERROR_INVALID_PARTITION_ENTRY = 52,
964  ERROR_ALIASED_INTRA_TASK_REGIONS = 53,
965  ERROR_MAX_FIELD_OVERFLOW = 54,
966  ERROR_MISSING_TASK_COLLECTION = 55,
967  ERROR_INVALID_IDENTITY_PROJECTION_USE = 56,
968  ERROR_INVALID_PROJECTION_ID = 57,
969  ERROR_NON_DISJOINT_PARTITION = 58,
970  ERROR_BAD_PROJECTION_USE = 59,
971  ERROR_INDEPENDENT_SLICES_VIOLATION = 60,
972  ERROR_INVALID_REGION_HANDLE = 61,
973  ERROR_INVALID_PARTITION_HANDLE = 62,
974  ERROR_VIRTUAL_MAP_IN_LEAF_TASK = 63,
975  ERROR_LEAF_MISMATCH = 64,
976  ERROR_INVALID_PROCESSOR_SELECTION = 65,
977  ERROR_INVALID_VARIANT_SELECTION = 66,
978  ERROR_INVALID_MAPPER_OUTPUT = 67,
979  ERROR_UNINITIALIZED_USE = 68,
980  ERROR_INVALID_INDEX_DOMAIN = 69,
981  ERROR_INVALID_INDEX_PART_DOMAIN = 70,
982  ERROR_PARTITION_VERIFICATION = 71,
983  ERROR_NON_DISJOINT_TASK_REGIONS = 72,
984  ERROR_INVALID_FIELD_ACCESSOR_PRIVILEGES = 73,
985  ERROR_INVALID_PREMAPPED_REGION_LOCATION = 74,
986  ERROR_IDEMPOTENT_MISMATCH = 75,
987  ERROR_INVALID_MAPPER_ID = 76,
988  ERROR_INVALID_TREE_ENTRY = 77,
989  ERROR_FUTURE_MAP_COUNT_MISMATCH = 78,
990  ERROR_MAXIMUM_NODES_EXCEEDED = 79,
991  ERROR_MAXIMUM_PROCS_EXCEEDED = 80,
992  ERROR_INVALID_TASK_ID = 81,
993  ERROR_INVALID_MAPPER_DOMAIN_SLICE = 82,
994  ERROR_UNFOLDABLE_REDUCTION_OP = 83,
995  ERROR_INVALID_INLINE_ID = 84,
996  ERROR_ILLEGAL_MUST_PARALLEL_INLINE = 85,
997  ERROR_ILLEGAL_MAPPER_PROCESSOR = 86,
998  ERROR_FUTURE_SIZE_MISMATCH = 87,
999  ERROR_ILLEGAL_PREDICATE_FUTURE = 88,
1000  ERROR_COPY_REQUIREMENTS_MISMATCH = 89,
1001  ERROR_INVALID_COPY_FIELDS_SIZE = 90,
1002  ERROR_COPY_SPACE_MISMATCH = 91,
1003  ERROR_INVALID_COPY_PRIVILEGE = 92,
1004  ERROR_INVALID_PARTITION_COLOR = 93,
1005  ERROR_EXCEEDED_MAX_CONTEXTS = 94,
1006  ERROR_ACQUIRE_MISMATCH = 95,
1007  ERROR_RELEASE_MISMATCH = 96,
1008  ERROR_INVALID_TASK_VARIANT_PROPERTIES = 97,
1009  ERROR_INVALID_FIELD_PRIVILEGES = 98,
1010  ERROR_ILLEGAL_NESTED_TRACE = 99,
1011  ERROR_UNMATCHED_END_TRACE = 100,
1012  ERROR_CONFLICTING_PARENT_MAPPING_DEADLOCK = 101,
1013  ERROR_CONFLICTING_SIBLING_MAPPING_DEADLOCK = 102,
1014  ERROR_INVALID_PARENT_REQUEST = 103,
1015  ERROR_INVALID_FIELD_ID = 104,
1016  ERROR_NESTED_MUST_EPOCH = 105,
1017  ERROR_UNMATCHED_MUST_EPOCH = 106,
1018  ERROR_MUST_EPOCH_FAILURE = 107,
1019  ERROR_DOMAIN_DIM_MISMATCH = 108,
1020  ERROR_INVALID_PROCESSOR_NAME = 109,
1021  ERROR_INVALID_INDEX_SUBSPACE_REQUEST = 110,
1022  ERROR_INVALID_INDEX_SUBPARTITION_REQUEST = 111,
1023  ERROR_INVALID_FIELD_SPACE_REQUEST = 112,
1024  ERROR_INVALID_LOGICAL_SUBREGION_REQUEST = 113,
1025  ERROR_INVALID_LOGICAL_SUBPARTITION_REQUEST = 114,
1026  ERROR_ALIASED_REGION_REQUIREMENTS = 115,
1027  ERROR_MISSING_DEFAULT_PREDICATE_RESULT = 116,
1028  ERROR_PREDICATE_RESULT_SIZE_MISMATCH = 117,
1029  ERROR_MPI_INTEROPERABILITY_NOT_CONFIGURED = 118,
1030  ERROR_NESTED_REGISTRATION_CALLBACKS = 119,
1031  ERROR_EMPTY_INDEX_PARTITION = 120,
1032  ERROR_INCONSISTENT_SEMANTIC_TAG = 121,
1033  ERROR_INVALID_SEMANTIC_TAG = 122,
1034  ERROR_DUMMY_CONTEXT_OPERATION = 123,
1035  ERROR_INVALID_CONTEXT_CONFIGURATION = 124,
1036  ERROR_INDEX_TREE_MISMATCH = 125,
1037  ERROR_INDEX_PARTITION_ANCESTOR = 126,
1038  ERROR_INVALID_PENDING_CHILD = 127,
1039  ERROR_ILLEGAL_FILE_ATTACH = 128,
1040  ERROR_ILLEGAL_ALLOCATOR_REQUEST = 129,
1041  ERROR_ILLEGAL_DETACH_OPERATION = 130,
1042  ERROR_NO_STARTUP_RESOURCES = 131,
1043  ERROR_ILLEGAL_REDUCTION_VIRTUAL_MAPPING = 132,
1044  ERROR_INVALID_MAPPED_REGION_LOCATION = 133,
1045  ERROR_RESERVED_SERDEZ_ID = 134,
1046  ERROR_DUPLICATE_SERDEZ_ID = 135,
1047  ERROR_INVALID_SERDEZ_ID = 136,
1048  ERROR_TRACE_VIOLATION = 137,
1049  ERROR_INVALID_TARGET_PROC = 138,
1050  ERROR_INCOMPLETE_TRACE = 139,
1051  ERROR_STATIC_CALL_POST_RUNTIME_START = 140,
1052  ERROR_ILLEGAL_GLOBAL_VARIANT_REGISTRATION = 141,
1053  ERROR_ILLEGAL_USE_OF_NON_GLOBAL_VARIANT = 142,
1054  ERROR_RESERVED_CONSTRAINT_ID = 143,
1055  ERROR_INVALID_CONSTRAINT_ID = 144,
1056  ERROR_DUPLICATE_CONSTRAINT_ID = 145,
1057  ERROR_ILLEGAL_WAIT_FOR_SHUTDOWN = 146,
1058  ERROR_DEPRECATED_METHOD_USE = 147,
1059  ERROR_MAX_APPLICATION_TASK_ID_EXCEEDED = 148,
1060  ERROR_MAX_APPLICATION_MAPPER_ID_EXCEEDED = 149,
1061  ERROR_INVALID_ARGUMENTS_TO_MAPPER_RUNTIME = 150,
1062  ERROR_INVALID_MAPPER_SYNCHRONIZATION = 151,
1063  ERROR_ILLEGAL_PARTIAL_ACQUISITION = 152,
1064  ERROR_ILLEGAL_INTERFERING_RESTRICTIONS = 153,
1065  ERROR_ILLEGAL_PARTIAL_RESTRICTION = 154,
1066  ERROR_ILLEGAL_INTERFERING_ACQUISITIONS = 155,
1067  ERROR_UNRESTRICTED_ACQUIRE = 156,
1068  ERROR_UNACQUIRED_RELEASE = 157,
1069  ERROR_UNATTACHED_DETACH = 158,
1070  ERROR_INVALID_PROJECTION_RESULT = 159,
1071  ERROR_ILLEGAL_IMPLICIT_MAPPING = 160,
1072  ERROR_INNER_TASK_VIOLATION = 161,
1073  ERROR_REQUEST_FOR_EMPTY_FUTURE = 162,
1074  ERROR_ILLEGAL_REMAP_IN_STATIC_TRACE = 163,
1075  ERROR_DYNAMIC_TYPE_MISMATCH = 164,
1076  ERROR_MISSING_LOCAL_VARIABLE = 165,
1077  ERROR_ACCESSOR_PRIVILEGE_CHECK = 166,
1078  ERROR_ACCESSOR_BOUNDS_CHECK = 167,
1079  ERROR_DUPLICATE_MPI_CONFIG = 168,
1080  ERROR_UNKNOWN_MAPPABLE = 169,
1081  ERROR_DEPRECATED_PROJECTION = 170,
1082  ERROR_ILLEGAL_PARTIAL_ACQUIRE = 171,
1083  ERROR_ILLEGAL_INTERFERING_RESTRICTON = 172,
1084  ERROR_ILLEGAL_INTERFERING_ACQUIRE = 173,
1085  ERROR_ILLEGAL_REDUCTION_REQUEST = 175,
1086  ERROR_PROJECTION_REGION_REQUIREMENTS = 180,
1087  ERROR_REQUIREMENTS_INVALID_REGION = 181,
1088  ERROR_FIELD_NOT_VALID_FIELD = 182,
1089  ERROR_INSTANCE_FIELD_PRIVILEGE = 183,
1090  ERROR_ILLEGAL_REQUEST_VIRTUAL_INSTANCE = 185,
1091  ERROR_PARENT_TASK_INLINE = 186,
1092  ERROR_REGION_NOT_SUBREGION = 189,
1093  ERROR_REGION_REQUIREMENT_INLINE = 190,
1094  ERROR_PRIVILEGES_FOR_REGION = 191,
1095  ERROR_MISSING_INSTANCE_FIELD = 195,
1096  ERROR_NUMBER_SOURCE_REQUIREMENTS = 204,
1097  ERROR_COPY_SOURCE_REQUIREMENTS = 205,
1098  ERROR_COPY_DESTINATION_REQUIREMENT = 206,
1099  ERROR_TYPE_MISMATCH = 208,
1100  ERROR_TYPE_FIELD_MISMATCH = 209,
1101  ERROR_ALIASED_REQION_REQUIREMENTS = 210,
1102  ERROR_FIELD_SIZE_MISMATCH = 211,
1103  ERROR_REQUEST_INVALID_REGION = 212,
1104  ERROR_FIELD_SERDEZ_MISMATCH = 213,
1105  ERROR_SERDEZ_FIELD_DISALLOWED = 214,
1106  ERROR_INSTANCE_FIELD_DUPLICATE = 215,
1107  ERROR_PARENT_TASK_COPY = 216,
1108  ERROR_REGION_REQUIREMENT_COPY = 220,
1109  ERROR_SOURCE_REGION_REQUIREMENT = 232,
1110  ERROR_DESTINATION_REGION_REQUIREMENT = 233,
1111  ERROR_COPY_SOURCE_REQUIREMENT = 235,
1112  ERROR_INDEX_SPACE_COPY = 237,
1113  ERROR_DEPRECATED_SHARDING = 238,
1114  ERROR_IMPLICIT_REPLICATED_SHARDING = 239,
1115  ERROR_MIXED_PARTITION_COLOR_ALLOCATION_MODES = 240,
1116  ERROR_EXCEEDED_CONFIGURATION_LIMIT = 241,
1117  ERROR_INVALID_PADDED_ACCESSOR = 242,
1118  ERROR_MAPPER_FAILED_ACQUIRE = 245,
1119  ERROR_FIELD_NOT_VALID = 248,
1120  ERROR_PARENT_TASK_ACQUIRE = 249,
1121  ERROR_REGION_REQUIREMENT_ACQUIRE = 253,
1122  ERROR_PARENT_TASK_RELEASE = 257,
1123  ERROR_REGION_REQUIREMENT_RELEASE = 261,
1124  ERROR_MUST_EPOCH_DEPENDENCE = 267,
1125  ERROR_PARENT_TASK_PARTITION = 268,
1126  ERROR_PARENT_TASK_FILL = 273,
1127  ERROR_REGION_REQUIREMENT_DISCARD = 277,
1128  ERROR_REGION_REQUIREMENT_FILL = 278,
1129  ERROR_PRIVILEGES_REGION_SUBSET = 279,
1130  ERROR_INDEX_SPACE_FILL = 281,
1131  ERROR_ILLEGAL_FILE_ATTACHMENT = 284,
1132  ERROR_REGION_REQUIREMENT_ATTACH = 293,
1133  ERROR_PARENT_TASK_DETACH = 295,
1134  ERROR_ILLEGAL_TOP_LEVEL_TASK_CREATION = 296,
1135  ERROR_INVALID_DISCARD_QUALIFIER = 297,
1136  ERROR_PARENT_TASK_TASK = 298,
1137  ERROR_INDEX_SPACE_NOTSUBSPACE = 299,
1138  ERROR_PRIVILEGES_INDEX_SPACE = 300,
1139  ERROR_PROJECTION_REGION_REQUIREMENT = 303,
1140  ERROR_NONDISJOINT_PARTITION_SELECTED = 304,
1141  ERROR_PARTITION_NOT_SUBPARTITION = 312,
1142  ERROR_REGION_REQUIREMENT_TASK = 313,
1143  ERROR_PRIVILEGES_REGION_NOTSUBSET = 314,
1144  ERROR_PRIVILEGES_PARTITION_NOTSUBSET = 315,
1145  ERROR_INVALID_LOCATION_CONSTRAINT = 344,
1146  ERROR_ALIASED_INTERFERING_REGION = 356,
1147  ERROR_REDUCTION_OPERATION_INDEX = 357,
1148  ERROR_ILLEGAL_FUTURE_USE = 358,
1149  ERROR_INDEX_SPACE_TASK = 359,
1150  ERROR_TRACE_VIOLATION_RECORDED = 363,
1151  ERROR_TRACE_VIOLATION_OPERATION = 364,
1152  ERROR_INVALID_MAPPER_REQUEST = 366,
1153  ERROR_ILLEGAL_RUNTIME_REMAPPING = 377,
1154  ERROR_UNABLE_FIND_TASK_LOCAL = 378,
1155  ERROR_INDEXPARTITION_NOT_SAME_INDEX_TREE = 379,
1156  ERROR_EXCEEDED_MAXIMUM_NUMBER_LOCAL_FIELDS = 387,
1157  ERROR_UNABLE_ALLOCATE_LOCAL_FIELD = 388,
1158  ERROR_TASK_ATTEMPTED_ALLOCATE_FIELD = 389,
1159  //ERROR_PREDICATED_TASK_LAUNCH_FOR_TASK = 392,
1160  ERROR_PREDICATED_INDEX_TASK_LAUNCH = 393,
1161  ERROR_ATTEMPTED_INLINE_MAPPING_REGION = 395,
1162  ERROR_ATTEMPTED_EXTERNAL_ATTACH = 397,
1163  ERROR_ILLEGAL_PREDICATE_CREATION = 399,
1164  ERROR_ILLEGAL_END_TRACE_CALL = 402,
1165  ERROR_UNMATCHED_END_STATIC_TRACE = 403,
1166  ERROR_ILLEGAL_END_STATIC_TRACE = 404,
1167  ERROR_ILLEGAL_ACQUIRE_OPERATION = 405,
1168  ERROR_ILLEGAL_RELEASE_OPERATION = 406,
1169  ERROR_TASK_FAILED_END_TRACE = 408,
1170  ERROR_ILLEGAL_INDEX_SPACE_CREATION = 410,
1171  ERROR_UMATCHED_END_TRACE = 411,
1172  ERROR_ILLEGAL_NESTED_STATIC_TRACE = 412,
1173  ERROR_ILLEGAL_UNION_INDEX_SPACES = 414,
1174  ERROR_ILLEGAL_INTERSECT_INDEX_SPACES = 415,
1175  ERROR_ILLEGAL_SUBTRACT_INDEX_SPACES = 416,
1176  ERROR_ILLEGAL_INDEX_SPACE_DELETION = 417,
1177  ERROR_ILLEGAL_INDEX_PARTITION_DELETION = 418,
1178  ERROR_ILLEGAL_EQUAL_PARTITION_CREATION = 419,
1179  ERROR_ILLEGAL_UNION_PARTITION_CREATION = 420,
1180  ERROR_ILLEGAL_INTERSECTION_PARTITION_CREATION = 421,
1181  ERROR_ILLEGAL_DIFFERENCE_PARTITION_CREATION = 422,
1182  ERROR_ILLEGAL_CREATE_CROSS_PRODUCT_PARTITION = 423,
1183  ERROR_ILLEGAL_CREATE_ASSOCIATION = 424,
1184  ERROR_ILLEGAL_CREATE_RESTRICTED_PARTITION = 425,
1185  ERROR_ILLEGAL_PARTITION_FIELD = 426,
1186  ERROR_ILLEGAL_PARTITION_IMAGE = 427,
1187  ERROR_ILLEGAL_PARTITION_IMAGE_RANGE = 428,
1188  ERROR_ILLEGAL_PARTITION_PREIMAGE = 429,
1189  ERROR_ILLEGAL_PARTITION_PREIMAGE_RANGE = 430,
1190  ERROR_ILLEGAL_CREATE_PENDING_PARTITION = 431,
1191  ERROR_ILLEGAL_CREATE_INDEX_SPACE_UNION = 432,
1192  ERROR_ILLEGAL_CREATE_INDEX_SPACE_INTERSECTION = 434,
1193  ERROR_ILLEGAL_CREATE_INDEX_SPACE_DIFFERENCE = 436,
1194  ERROR_ILLEGAL_CREATE_FIELD_SPACE = 437,
1195  ERROR_ILLEGAL_DESTROY_FIELD_SPACE = 438,
1196  ERROR_ILLEGAL_NONLOCAL_FIELD_ALLOCATION = 439,
1197  ERROR_ILLEGAL_FIELD_DESTRUCTION = 440,
1198  ERROR_ILLEGAL_NONLOCAL_FIELD_ALLOCATION2 = 441,
1199  ERROR_ILLEGAL_FIELD_DESTRUCTION2 = 442,
1200  ERROR_ILLEGAL_REGION_CREATION = 443,
1201  ERROR_ILLEGAL_REGION_DESTRUCTION = 444,
1202  ERROR_ILLEGAL_PARTITION_DESTRUCTION = 445,
1203  ERROR_ILLEGAL_CREATE_FIELD_ALLOCATION = 447,
1204  ERROR_ILLEGAL_EXECUTE_TASK_CALL = 448,
1205  ERROR_ILLEGAL_EXECUTE_INDEX_SPACE = 449,
1206  ERROR_ILLEGAL_MAP_REGION = 451,
1207  ERROR_ILLEGAL_REMAP_OPERATION = 452,
1208  ERROR_ILLEGAL_UNMAP_OPERATION = 453,
1209  ERROR_ILLEGAL_FILL_OPERATION_CALL = 454,
1210  ERROR_ILLEGAL_INDEX_FILL_OPERATION_CALL = 455,
1211  ERROR_ILLEGAL_COPY_FILL_OPERATION_CALL = 456,
1212  ERROR_ILLEGAL_INDEX_COPY_OPERATION = 457,
1213  ERROR_ILLEGAL_ATTACH_RESOURCE_OPERATION = 460,
1214  ERROR_ILLEGAL_DETACH_RESOURCE_OPERATION = 461,
1215  ERROR_ILLEGAL_LEGION_EXECUTE_MUST_EPOCH = 462,
1216  ERROR_ILLEGAL_TIMING_MEASUREMENT = 463,
1217  ERROR_ILLEGAL_LEGION_MAPPING_FENCE_CALL = 464,
1218  ERROR_ILLEGAL_LEGION_EXECUTION_FENCE_CALL = 465,
1219  ERROR_ILLEGAL_LEGION_COMPLETE_FRAME_CALL = 466,
1220  ERROR_ILLEGAL_GET_PREDICATE_FUTURE = 469,
1221  ERROR_ILLEGAL_LEGION_BEGIN_TRACE = 470,
1222  ERROR_ILLEGAL_LEGION_END_TRACE = 471,
1223  ERROR_ILLEGAL_LEGION_BEGIN_STATIC_TRACE = 472,
1224  ERROR_ILLEGAL_LEGION_END_STATIC_TRACE = 473,
1225  ERROR_INVALID_PHYSICAL_TRACING = 474,
1226  ERROR_PARENT_TASK_DISCARD = 475,
1227  ERROR_PHYSICAL_TRACING_UNSUPPORTED_OP = 476,
1228  ERROR_DYNAMIC_CALL_PRE_RUNTIME_START = 477,
1229  ERROR_PARENT_INDEX_PARTITION_REQUESTED = 478,
1230  ERROR_FIELD_SPACE_HAS_NO_FIELD = 479,
1231  ERROR_PARENT_LOGICAL_PARTITION_REQUESTED = 480,
1232  ERROR_INVALID_REQUEST_FOR_INDEXSPACE = 481,
1233  ERROR_UNABLE_FIND_ENTRY = 482,
1234  ERROR_INVALID_REQUEST_INDEXPARTITION = 484,
1235  ERROR_INVALID_REQUEST_FIELDSPACE = 487,
1236  ERROR_INVALID_REQUEST_LOGICALREGION = 490,
1237  ERROR_INVALID_REQUEST_LOGICALPARTITION = 492,
1238  ERROR_INVALID_REQUEST_TREE_ID = 493,
1239  ERROR_UNABLE_FIND_TOPLEVEL_TREE = 495,
1240  ERROR_ILLEGAL_DUPLICATE_REQUEST_ALLOCATOR = 502,
1241  ERROR_ILLEGAL_DUPLICATE_FIELD_ID = 510,
1242  ERROR_EXCEEDED_MAXIMUM_NUMBER_ALLOCATED_FIELDS = 511,
1243  ERROR_ILLEGAL_NOT_PREDICATE_CREATION = 533,
1244  ERROR_PARENT_TASK_ATTACH = 534,
1245  ERROR_INVALID_REGION_ARGUMENTS = 535,
1246  ERROR_INVALID_MAPPER_CONTENT = 536,
1247  ERROR_INVALID_DUPLICATE_MAPPER = 537,
1248  ERROR_INVALID_UNLOCK_MAPPER = 538,
1249  ERROR_UNKNOWN_PROFILER_OPTION = 539,
1250  ERROR_MISSING_PROFILER_OPTION = 540,
1251  ERROR_INVALID_PROFILER_SERIALIZER = 541,
1252  ERROR_INVALID_PROFILER_FILE = 542,
1253  ERROR_ILLEGAL_LAYOUT_CONSTRAINT = 543,
1254  ERROR_UNSUPPORTED_LAYOUT_CONSTRAINT = 544,
1255  ERROR_ACCESSOR_FIELD_SIZE_CHECK = 545,
1256  ERROR_ATTACH_OPERATION_MISSING_POINTER = 546,
1257  ERROR_RESERVED_VARIANT_ID = 547,
1258  ERROR_NON_DENSE_RECTANGLE = 548,
1259  ERROR_LIBRARY_COUNT_MISMATCH = 549,
1260  ERROR_MPI_INTEROP_MISCONFIGURATION = 550,
1261  ERROR_NUMBER_SRC_INDIRECT_REQUIREMENTS = 551,
1262  ERROR_NUMBER_DST_INDIRECT_REQUIREMENTS = 552,
1263  ERROR_COPY_GATHER_REQUIREMENT = 553,
1264  ERROR_COPY_SCATTER_REQUIREMENT = 554,
1265  ERROR_MAPPER_SYNCHRONIZATION = 555,
1266  ERROR_DUPLICATE_VARIANT_REGISTRATION = 556,
1267  ERROR_ILLEGAL_IMPLICIT_TOP_LEVEL_TASK = 557,
1268  ERROR_ACCESSOR_COMPATIBILITY_CHECK = 558,
1269  ERROR_ILLEGAL_RESOURCE_DESTRUCTION = 559,
1270  ERROR_DUPLICATE_FUTURE_SET = 560,
1271  ERROR_ATTACH_HDF5 = 561,
1272  ERROR_ATTACH_HDF5_CONSTRAINT = 562,
1273  ERROR_ILLEGAL_PARTITION_BY_DOMAIN = 563,
1274  ERROR_INVALID_PARTITION_BY_DOMAIN_VALUE = 564,
1275  ERROR_FUTURE_MAP_REDOP_TYPE_MISMATCH = 565,
1276  ERROR_MISSING_PARTITION_BY_WEIGHT_COLOR = 566,
1277  ERROR_INVALID_PARTITION_BY_WEIGHT_VALUE = 567,
1278  ERROR_LEGION_CONFIGURATION = 568,
1279  ERROR_CREATION_FUTURE_TYPE_MISMATCH = 569,
1280  ERROR_ARGUMENT_MAP_DIMENSIONALITY = 570,
1281  ERROR_INVALID_FUTURE_MAP_POINT = 571,
1282  ERROR_ILLEGAL_LOCAL_FUNCTION_TASK_LAUNCH = 572,
1283  ERROR_ILLEGAL_SHARED_OWNERSHIP = 573,
1284  ERROR_ILLEGAL_PERFORM_REGISTRATION_CALLBACK = 574,
1285  ERROR_NON_PIECE_RECTANGLE = 575,
1286  ERROR_DEFERRED_ALLOCATION_FAILURE = 576,
1287  ERROR_INDEX_SPACE_ATTACH = 577,
1288  ERROR_INDEX_SPACE_DETACH = 578,
1289  ERROR_POST_EXECUTION_UNORDERED_OPERATION = 579,
1290  ERROR_COLOCATION_VIOLATION = 580,
1291  ERROR_RESERVED_SHARDING_ID = 601,
1292  ERROR_DUPLICATE_SHARDING_ID = 602,
1293  ERROR_INVALID_SHARDING_ID = 603,
1294  ERROR_REPLICATE_TASK_VIOLATION = 604,
1295  ERROR_ILLEGAL_SHARDING_FUNCTOR_OUTPUT = 605,
1296  ERROR_CONFUSED_USER = 606,
1297  ERROR_CONTROL_REPLICATION_VIOLATION = 607,
1298  ERROR_INVALID_OUTPUT_SIZE = 608,
1299  ERROR_INVALID_OUTPUT_REGION_DOMAIN = 609,
1300  ERROR_UNBOUND_OUTPUT_REGION = 610,
1301  ERROR_DUPLICATE_OUTPUTS = 611,
1302  ERROR_INVALID_GLOBAL_INDEXING = 612,
1303  ERROR_INVALID_OUTPUT_FIELD = 613,
1304  ERROR_OUTPUT_REGIONS_IN_PREDICATED_TASK = 614,
1305  ERROR_OUTPUT_REGIONS_IN_TRACE = 615,
1306  ERROR_PARENT_TASK_ADVISEMENT = 616,
1307  ERROR_LOGICAL_REGION_FROM_INVALID_OUTPUT_REGION = 617,
1308  ERROR_INVALID_FUTURE_MEMORY_KIND = 618,
1309  ERROR_UNALIGNED_OUTPUT_REGION = 619,
1310  ERROR_INVALID_OUTPUT_REGION_CONSTRAINTS = 620,
1311  ERROR_DUPLICATE_RETURN_REQUESTS = 621,
1312  ERROR_INVALID_OUTPUT_REGION_RETURN = 622,
1313  ERROR_INVALID_OUTPUT_REGION_PROJECTION = 623,
1314  ERROR_INVALID_OUTPUT_REGION_FIELD = 624,
1315  ERROR_FUTURE_SIZE_BOUNDS_EXCEEDED = 625,
1316  ERROR_ILLEGAL_CONCURRENT_EXECUTION = 626,
1317  ERROR_MISSING_FILL_VALUE = 627,
1318  ERROR_ILLEGAL_CONCURRENT_TASK_BARRIER = 628,
1319 
1320 
1321  LEGION_WARNING_FUTURE_NONLEAF = 1000,
1322  LEGION_WARNING_BLOCKING_EMPTY = 1001,
1323  LEGION_WARNING_WAITING_ALL_FUTURES = 1002,
1324  LEGION_WARNING_WAITING_REGION = 1003,
1325  LEGION_WARNING_MISSING_REGION_WAIT = 1004,
1326  LEGION_WARNING_NONLEAF_ACCESSOR = 1005,
1327  LEGION_WARNING_UNMAPPED_ACCESSOR = 1006,
1328  LEGION_WARNING_READ_DISCARD = 1007,
1329  LEGION_WARNING_MISSING_PROC_CONSTRAINT = 1008,
1330  LEGION_WARNING_DYNAMIC_PROJECTION_REG = 1009,
1331  LEGION_WARNING_DUPLICATE_MPI_CONFIG = 1010,
1332  LEGION_WARNING_NEW_PROJECTION_FUNCTORS = 1011,
1333  LEGION_WARNING_IGNORE_MEMORY_REQUEST = 1012,
1334  LEGION_WARNING_NOT_COPY = 1013,
1335  LEGION_WARNING_REGION_REQUIREMENT_INLINE = 1014,
1336  LEGION_WARNING_MAPPER_FAILED_ACQUIRE = 1015,
1337  LEGION_WARNING_SOURCE_REGION_REQUIREMENT = 1016,
1338  LEGION_WARNING_DESTINATION_REGION_REQUIREMENT = 1017,
1339  LEGION_WARNING_REGION_REQUIREMENTS_INDEX = 1019,
1340  LEGION_WARNING_PRIVILEGE_FIELDS_ACQUIRE = 1020,
1341  LEGION_WARNING_PRIVILEGE_FIELDS_RELEASE = 1021,
1342  LEGION_WARNING_FILE_ATTACH_OPERATION = 1022,
1343  LEGION_WARNING_HDF5_ATTACH_OPERATION = 1023,
1344  LEGION_WARNING_REGION_REQUIREMENT_TASK = 1024,
1345  LEGION_WARNING_EMPTY_FILL_FIELDS = 1025,
1346  LEGION_WARNING_EMPTY_OUTPUT_TARGET = 1026,
1347  LEGION_WARNING_IGNORING_SPURIOUS_TARGET = 1027,
1348  LEGION_WARNING_IGNORING_PROCESSOR_REQUEST = 1028,
1349  LEGION_WARNING_MAPPER_REQUESTED_COMPOSITE = 1030,
1350  LEGION_WARNING_MAPPER_REQUESTED_INLINE = 1031,
1351  LEGION_WARNING_REGION_REQUIREMENTS_INDIVIDUAL = 1032,
1352  LEGION_WARNING_IGNORING_ACQUIRE_REQUEST = 1035,
1353  LEGION_WARNING_WAITING_FUTURE_NONLEAF = 1047,
1354  LEGION_WARNING_RUNTIME_UNMAPPING_REMAPPING = 1050,
1355  LEGION_WARNING_IGNORING_EMPTY_INDEX_TASK_LAUNCH = 1058,
1356  LEGION_WARNING_UNINITIALIZED_USE = 1071,
1357  LEGION_WARNING_MAPPER_REQUESTED_PROFILING = 1082,
1358  LEGION_WARNING_REGION_TREE_STATE_LOGGING = 1083,
1359  LEGION_WARNING_DISJOINTNESS_VERIFICATION = 1084,
1360  LEGION_WARNING_IGNORING_EMPTY_INDEX_SPACE_FILL = 1085,
1361  LEGION_WARNING_IGNORING_EMPTY_INDEX_SPACE_COPY = 1086,
1362  LEGION_WARNING_VARIANT_TASK_NOT_MARKED = 1087,
1363  LEGION_WARNING_MAPPER_REQUESTED_POST = 1088,
1364  LEGION_WARNING_IGNORING_RELEASE_REQUEST = 1089,
1365  LEGION_WARNING_PRUNE_DEPTH_EXCEEDED = 1090,
1366  LEGION_WARNING_GENERIC_ACCESSOR = 1091,
1367  LEGION_WARNING_UNUSED_PROFILING_FILE_NAME = 1092,
1368  LEGION_WARNING_INVALID_PRIORITY_CHANGE = 1093,
1369  LEGION_WARNING_EXTERNAL_ATTACH_OPERATION = 1094,
1370  LEGION_WARNING_EXTERNAL_GARBAGE_PRIORITY = 1095,
1371  LEGION_WARNING_MAPPER_INVALID_INSTANCE = 1096,
1372  LEGION_WARNING_NON_REPLAYABLE_COUNT_EXCEEDED = 1097,
1373  LEGION_WARNING_LARGE_EQUIVALENCE_SET_NODE_USAGE = 1098,
1374  LEGION_WARNING_NON_READ_ONLY_UNTRACK_VALID = 1099,
1375  LEGION_WARNING_LEAKED_RESOURCE = 1100,
1376  LEGION_WARNING_DUPLICATE_DELETION = 1101,
1377  LEGION_WARNING_NEW_TEMPLATE_COUNT_EXCEEDED = 1102,
1378  LEGION_WARNING_NON_CALLBACK_REGISTRATION = 1103,
1379  LEGION_WARNING_NON_SCALABLE_IDENTITY_PROJECTION = 1104,
1380  LEGION_WARNING_FAILED_INLINING = 1105,
1381  LEGION_WARNING_DYNAMIC_SHARDING_REG = 1106,
1382  LEGION_WARNING_SLOW_NON_FUNCTIONAL_PROJECTION = 1107,
1383  LEGION_WARNING_MISMATCHED_REPLICATED_FUTURES = 1108,
1384  LEGION_WARNING_INLINING_NOT_SUPPORTED = 1109,
1385  LEGION_WARNING_IGNORING_EQUIVALENCE_SETS_RESET = 1110,
1386  LEGION_WARNING_MISMATCHED_UNORDERED_OPERATIONS = 1111,
1387  LEGION_WARNING_PARTITION_VERIFICATION = 1112,
1388  LEGION_WARNING_IMPRECISE_ATTACH_MEMORY = 1113,
1389  LEGION_WARNING_KDTREE_REFINEMENT_FAILED = 1114,
1390  LEGION_WARNING_COLLECTIVE_HAMMER_REDUCTION = 1115,
1391  LEGION_WARNING_WRITE_PRIVILEGE_COLLECTIVE = 1116,
1392  LEGION_WARNING_UNSUPPORTED_REPLICATION = 1117,
1393  LEGION_WARNING_UNUSED_CONCURRENCY = 1118,
1394 
1395 
1396  LEGION_FATAL_MUST_EPOCH_NOADDRESS = 2000,
1397  LEGION_FATAL_MUST_EPOCH_NOTASKS = 2001,
1398  LEGION_FATAL_DEFAULT_MAPPER_ERROR = 2002,
1399  LEGION_FATAL_SHIM_MAPPER_SUPPORT = 2006,
1400  LEGION_FATAL_UNKNOWN_FIELD_ID = 2007,
1401  LEGION_FATAL_RESTRICTED_SIMULTANEOUS = 2008,
1402  LEGION_FATAL_UNIMPLEMENTED_FEATURE = 2009,
1403  LEGION_FATAL_INCONSISTENT_PHI_VIEW = 2010,
1404  LEGION_FATAL_EXCEEDED_LIBRARY_ID_OFFSET = 2011,
1405  LEGION_FATAL_SEPARATE_RUNTIME_INSTANCES = 2012,
1406  LEGION_FATAL_UNSUPPORTED_CONSENSUS_SIZE = 2013,
1407  LEGION_FATAL_CALLBACK_NOT_PORTABLE = 2014,
1408  LEGION_FATAL_REDUCTION_ABA_PROBLEM = 2015,
1409  LEGION_FATAL_COMPACT_SPARSE_PADDING = 2016,
1410  LEGION_FATAL_GARBAGE_COLLECTION_RACE = 2017,
1411  LEGION_FATAL_COLLECTIVE_PARTIAL_FIELD_OVERLAP = 2018,
1412  LEGION_FATAL_MORTON_TILING_FAILURE = 2019,
1413 
1414 } legion_error_t;
1415 
1416 #ifdef __cplusplus
1417 #include <cstdint>
1418 #endif
1419 
1420 // enum and namepsaces don't really get along well
1421 // We would like to make these associations explicit
1422 // but the python cffi parser is stupid as hell
1423 typedef enum legion_privilege_mode_t
1424 #ifdef __cplusplus
1425 : std::uint32_t
1426 #endif
1427 {
1428  LEGION_NO_ACCESS = 0x00000000,
1429  LEGION_READ_PRIV = 0x00000001,
1430  LEGION_READ_ONLY = 0x00000001, // READ_PRIV,
1431  LEGION_WRITE_PRIV = 0x00000002,
1432  LEGION_REDUCE_PRIV = 0x00000004,
1433  LEGION_REDUCE = 0x00000004, // REDUCE_PRIV,
1434  LEGION_READ_WRITE = 0x00000007, // READ_PRIV | WRITE_PRIV | REDUCE_PRIV,
1435  LEGION_DISCARD_MASK = 0x10000000, // For marking we don't need inputs
1436  LEGION_DISCARD_INPUT_MASK = 0x10000000, // Rename of the old discard mask
1437  LEGION_DISCARD_OUTPUT_MASK = 0x20000000, // For marking we don't need outputs
1438  LEGION_WRITE_ONLY = 0x10000002, // WRITE_PRIV | DISCARD_INPUT_MASK
1439  LEGION_WRITE_DISCARD = 0x10000007, // READ_WRITE | DISCARD_INPUT_MASK
1440  // for backwards compatibility
1441  LEGION_DEPRECATED_ENUM(NO_ACCESS)
1442  LEGION_DEPRECATED_ENUM(READ_PRIV)
1443  LEGION_DEPRECATED_ENUM(READ_ONLY)
1444  LEGION_DEPRECATED_ENUM(WRITE_PRIV)
1445  LEGION_DEPRECATED_ENUM(REDUCE_PRIV)
1446  LEGION_DEPRECATED_ENUM(REDUCE)
1447  LEGION_DEPRECATED_ENUM(READ_WRITE)
1448  LEGION_DEPRECATED_ENUM(DISCARD_MASK)
1449  LEGION_DEPRECATED_ENUM(WRITE_ONLY)
1450  LEGION_DEPRECATED_ENUM(WRITE_DISCARD)
1451 } legion_privilege_mode_t;
1452 
1453 #ifdef __cplusplus
1454 static_assert(sizeof(legion_privilege_mode_t) == sizeof(unsigned), "");
1455 #endif
1456 
1457 typedef enum legion_allocate_mode_t {
1458  LEGION_NO_MEMORY = 0x00000000,
1459  LEGION_ALLOCABLE = 0x00000001,
1460  LEGION_FREEABLE = 0x00000002,
1461  LEGION_MUTABLE = 0x00000003,
1462  LEGION_REGION_CREATION = 0x00000004,
1463  LEGION_REGION_DELETION = 0x00000008,
1464  LEGION_ALL_MEMORY = 0x0000000F,
1465  // for backwards compatibility
1466  LEGION_DEPRECATED_ENUM(NO_MEMORY)
1467  LEGION_DEPRECATED_ENUM(ALLOCABLE)
1468  LEGION_DEPRECATED_ENUM(FREEABLE)
1469  LEGION_DEPRECATED_ENUM(MUTABLE)
1470  LEGION_DEPRECATED_ENUM(REGION_CREATION)
1471  LEGION_DEPRECATED_ENUM(REGION_DELETION)
1472  LEGION_DEPRECATED_ENUM(ALL_MEMORY)
1473 } legion_allocate_mode_t;
1474 
1475 typedef enum legion_coherence_property_t {
1476  LEGION_EXCLUSIVE = 0x00000000,
1477  LEGION_ATOMIC = 0x00000001,
1478  LEGION_SIMULTANEOUS = 0x00000002,
1479  LEGION_RELAXED = 0x00000003,
1480  LEGION_COLLECTIVE_MASK = 0x10000000,
1481  // Can't make these associations explicit because the Python CFFI parser is stupid
1482  LEGION_COLLECTIVE_EXCLUSIVE = 0x10000000, // LEGION_EXCLUSIVE | LEGION_COLLECTIVE_MASK,
1483  LEGION_COLLECTIVE_ATOMIC = 0x10000001, // LEGION_ATOMIC | LEGION_COLLECTIVE_MASK,
1484  LEGION_COLLECTIVE_SIMULTANEOUS = 0x10000002, // LEGION_SIMULTANEOUS | LEGION_COLLECTIVE_MASK,
1485  LEGION_COLLECTIVE_RELAXED = 0x10000003, // LEGION_RELAXED | LEGION_COLLECTIVE_MASK,
1486  // for backwards compatibility
1487  LEGION_DEPRECATED_ENUM(EXCLUSIVE)
1488  LEGION_DEPRECATED_ENUM(ATOMIC)
1489  LEGION_DEPRECATED_ENUM(SIMULTANEOUS)
1490  LEGION_DEPRECATED_ENUM(RELAXED)
1491 } legion_coherence_property_t;
1492 
1493 // Optional region requirement flags
1494 typedef enum legion_region_flags_t {
1495  LEGION_NO_FLAG = 0x00000000,
1496  LEGION_VERIFIED_FLAG = 0x00000001,
1497  LEGION_NO_ACCESS_FLAG = 0x00000002, // Deprecated, user SpecializedConstraint
1498  LEGION_RESTRICTED_FLAG = 0x00000004,
1499  LEGION_MUST_PREMAP_FLAG = 0x00000008, // Deprecated, no longer used
1500  // For non-trivial projection functions:
1501  // tell the runtime the write is complete,
1502  // will be ignored for non-index space launches
1503  // and for privileges that aren't WRITE
1504  // Note that if you use this incorrectly it could
1505  // break the correctness of your code so be sure
1506  // you know what you are doing
1507  LEGION_COMPLETE_PROJECTION_WRITE_FLAG = 0x00000010,
1508  // for indicating created output region requirements
1509  LEGION_CREATED_OUTPUT_REQUIREMENT_FLAG = 0x00000020,
1510  // for backwards compatibility
1511  LEGION_DEPRECATED_ENUM(NO_FLAG)
1512  LEGION_DEPRECATED_ENUM(VERIFIED_FLAG)
1513  LEGION_DEPRECATED_ENUM(NO_ACCESS_FLAG)
1514  LEGION_DEPRECATED_ENUM(RESTRICTED_FLAG)
1515  LEGION_DEPRECATED_ENUM(MUST_PREMAP_FLAG)
1516  LEGION_DEPRECATED_ENUM(COMPLETE_PROJECTION_WRITE_FLAG)
1517 } legion_region_flags_t;
1518 
1519 typedef enum legion_projection_type_t {
1520  LEGION_SINGULAR_PROJECTION, // a single logical region
1521  LEGION_PARTITION_PROJECTION, // projection from a partition
1522  LEGION_REGION_PROJECTION, // projection from a region
1523  // for backwards compatibility
1524  LEGION_DEPRECATED_ENUM_FROM(SINGULAR, LEGION_SINGULAR_PROJECTION)
1525  LEGION_DEPRECATED_ENUM_FROM(PART_PROJECTION, LEGION_PARTITION_PROJECTION)
1526  LEGION_DEPRECATED_ENUM_FROM(REG_PROJECTION, LEGION_REGION_PROJECTION)
1527 } legion_projection_type_t;
1528 // For backwards compatibility
1529 typedef legion_projection_type_t legion_handle_type_t;
1530 
1531 typedef enum legion_partition_kind_t {
1532  LEGION_DISJOINT_KIND, // disjoint and unknown
1533  LEGION_ALIASED_KIND, // aliased and unknown
1534  LEGION_COMPUTE_KIND, // unknown and unknown
1535  LEGION_DISJOINT_COMPLETE_KIND, // disjoint and complete
1536  LEGION_ALIASED_COMPLETE_KIND, // aliased and complete
1537  LEGION_COMPUTE_COMPLETE_KIND, // unknown and complete
1538  LEGION_DISJOINT_INCOMPLETE_KIND, // disjoint and incomplete
1539  LEGION_ALIASED_INCOMPLETE_KIND, // aliased and incomplete
1540  LEGION_COMPUTE_INCOMPLETE_KIND, // unknown and incomplete
1541  // for backwards compatibility
1542  LEGION_DEPRECATED_ENUM(DISJOINT_KIND)
1543  LEGION_DEPRECATED_ENUM(ALIASED_KIND)
1544  LEGION_DEPRECATED_ENUM(COMPUTE_KIND)
1545  LEGION_DEPRECATED_ENUM(DISJOINT_COMPLETE_KIND)
1546  LEGION_DEPRECATED_ENUM(ALIASED_COMPLETE_KIND)
1547  LEGION_DEPRECATED_ENUM(COMPUTE_COMPLETE_KIND)
1548  LEGION_DEPRECATED_ENUM(DISJOINT_INCOMPLETE_KIND)
1549  LEGION_DEPRECATED_ENUM(ALIASED_INCOMPLETE_KIND)
1550  LEGION_DEPRECATED_ENUM(COMPUTE_INCOMPLETE_KIND)
1551 } legion_partition_kind_t;
1552 
1553 typedef enum legion_external_resource_t {
1554  LEGION_EXTERNAL_POSIX_FILE,
1555  LEGION_EXTERNAL_HDF5_FILE,
1556  LEGION_EXTERNAL_INSTANCE,
1557  // for backwards compatibility
1558  LEGION_DEPRECATED_ENUM(EXTERNAL_POSIX_FILE)
1559  LEGION_DEPRECATED_ENUM(EXTERNAL_HDF5_FILE)
1560  LEGION_DEPRECATED_ENUM(EXTERNAL_INSTANCE)
1561 } legion_external_resource_t;
1562 
1563 typedef enum legion_timing_measurement_t {
1564  LEGION_MEASURE_SECONDS,
1565  LEGION_MEASURE_MICRO_SECONDS,
1566  LEGION_MEASURE_NANO_SECONDS,
1567  // for backwards compatibility
1568  LEGION_DEPRECATED_ENUM(MEASURE_SECONDS)
1569  LEGION_DEPRECATED_ENUM(MEASURE_MICRO_SECONDS)
1570  LEGION_DEPRECATED_ENUM(MEASURE_NANO_SECONDS)
1571 } legion_timing_measurement_t;
1572 
1573 typedef enum legion_dependence_type_t {
1574  LEGION_NO_DEPENDENCE = 0,
1575  LEGION_TRUE_DEPENDENCE = 1,
1576  LEGION_ANTI_DEPENDENCE = 2, // WAR or WAW with Write-Only privilege
1577  LEGION_ATOMIC_DEPENDENCE = 3,
1578  LEGION_SIMULTANEOUS_DEPENDENCE = 4,
1579  // for backwards compatibility
1580  LEGION_DEPRECATED_ENUM(NO_DEPENDENCE)
1581  LEGION_DEPRECATED_ENUM(TRUE_DEPENDENCE)
1582  LEGION_DEPRECATED_ENUM(ANTI_DEPENDENCE)
1583  LEGION_DEPRECATED_ENUM(ATOMIC_DEPENDENCE)
1584  LEGION_DEPRECATED_ENUM(SIMULTANEOUS_DEPENDENCE)
1585 } legion_dependence_type_t;
1586 
1587 enum {
1588  LEGION_NAME_SEMANTIC_TAG = 0,
1589  LEGION_SOURCE_FILE_TAG = 1,
1590  LEGION_SOURCE_LINE_TAG = 2,
1591  LEGION_FIRST_AVAILABLE_SEMANTIC_TAG = 3,
1592  // for backwards compatibility
1593  LEGION_DEPRECATED_ENUM(NAME_SEMANTIC_TAG)
1594  LEGION_DEPRECATED_ENUM(SOURCE_FILE_TAG)
1595  LEGION_DEPRECATED_ENUM(SOURCE_LINE_TAG)
1596  LEGION_DEPRECATED_ENUM(FIRST_AVAILABLE_SEMANTIC_TAG)
1597 };
1598 
1599 typedef enum legion_mappable_type_id_t {
1600  LEGION_TASK_MAPPABLE = 0,
1601  LEGION_COPY_MAPPABLE = 1,
1602  LEGION_INLINE_MAPPABLE = 2,
1603  LEGION_ACQUIRE_MAPPABLE = 3,
1604  LEGION_RELEASE_MAPPABLE = 4,
1605  LEGION_CLOSE_MAPPABLE = 5,
1606  LEGION_FILL_MAPPABLE = 6,
1607  LEGION_PARTITION_MAPPABLE = 7,
1608  LEGION_MUST_EPOCH_MAPPABLE = 9,
1609  // for backwards compatibility
1610  LEGION_DEPRECATED_ENUM(TASK_MAPPABLE)
1611  LEGION_DEPRECATED_ENUM(COPY_MAPPABLE)
1612  LEGION_DEPRECATED_ENUM(INLINE_MAPPABLE)
1613  LEGION_DEPRECATED_ENUM(ACQUIRE_MAPPABLE)
1614  LEGION_DEPRECATED_ENUM(RELEASE_MAPPABLE)
1615  LEGION_DEPRECATED_ENUM(CLOSE_MAPPABLE)
1616  LEGION_DEPRECATED_ENUM(FILL_MAPPABLE)
1617  LEGION_DEPRECATED_ENUM(PARTITION_MAPPABLE)
1618  LEGION_DEPRECATED_ENUM(MUST_EPOCH_MAPPABLE)
1619 } legion_mappable_type_id;
1620 
1621 typedef enum legion_type_id_t {
1622  LEGION_TYPE_BOOL = 0,
1623  LEGION_TYPE_INT8 = 1,
1624  LEGION_TYPE_INT16 = 2,
1625  LEGION_TYPE_INT32 = 3,
1626  LEGION_TYPE_INT64 = 4,
1627  LEGION_TYPE_UINT8 = 5,
1628  LEGION_TYPE_UINT16 = 6,
1629  LEGION_TYPE_UINT32 = 7,
1630  LEGION_TYPE_UINT64 = 8,
1631  LEGION_TYPE_FLOAT16 = 9,
1632  LEGION_TYPE_FLOAT32 = 10,
1633  LEGION_TYPE_FLOAT64 = 11,
1634  LEGION_TYPE_COMPLEX32 = 12,
1635  LEGION_TYPE_COMPLEX64 = 13,
1636  LEGION_TYPE_COMPLEX128 = 14,
1637  LEGION_TYPE_TOTAL = 15, // must be last
1638 } legion_type_id_t;
1639 
1640 // Do it like this because the Python CFFI parser is stupid
1641 #define LEGION_REDOP_KIND_SUM_VALUE 0
1642 #define LEGION_REDOP_KIND_DIFF_VALUE 1
1643 #define LEGION_REDOP_KIND_PROD_VALUE 2
1644 #define LEGION_REDOP_KIND_DIV_VALUE 3
1645 #define LEGION_REDOP_KIND_MAX_VALUE 4
1646 #define LEGION_REDOP_KIND_MIN_VALUE 5
1647 #define LEGION_REDOP_KIND_OR_VALUE 6
1648 #define LEGION_REDOP_KIND_AND_VALUE 7
1649 #define LEGION_REDOP_KIND_XOR_VALUE 8
1650 #define LEGION_REDOP_KIND_TOTAL_VALUE 9
1651 // Don't forget to undef after the legion_builtin_redop_t enum
1652 
1653 typedef enum legion_redop_kind_t {
1654  LEGION_REDOP_KIND_SUM = LEGION_REDOP_KIND_SUM_VALUE,
1655  LEGION_REDOP_KIND_DIFF = LEGION_REDOP_KIND_DIFF_VALUE,
1656  LEGION_REDOP_KIND_PROD = LEGION_REDOP_KIND_PROD_VALUE,
1657  LEGION_REDOP_KIND_DIV = LEGION_REDOP_KIND_DIV_VALUE,
1658  LEGION_REDOP_KIND_MAX = LEGION_REDOP_KIND_MAX_VALUE,
1659  LEGION_REDOP_KIND_MIN = LEGION_REDOP_KIND_MIN_VALUE,
1660  LEGION_REDOP_KIND_OR = LEGION_REDOP_KIND_OR_VALUE,
1661  LEGION_REDOP_KIND_AND = LEGION_REDOP_KIND_AND_VALUE,
1662  LEGION_REDOP_KIND_XOR = LEGION_REDOP_KIND_XOR_VALUE,
1663  LEGION_REDOP_KIND_TOTAL = LEGION_REDOP_KIND_TOTAL_VALUE,
1664 } legion_redop_kind_t;
1665 
1666 #ifndef LEGION_USE_PYTHON_CFFI
1667 // Normal way of doing things for sane compilers
1668 #define LEGION_REDOP_VALUE(kind, type) (LEGION_REDOP_BASE + \
1669  ((int)LEGION_REDOP_KIND_##kind * (int)LEGION_TYPE_TOTAL) + \
1670  (int)LEGION_TYPE_##type)
1671 #else
1672 // Dumb stuff for the Python CFFI parser which can't multiply
1673 // so we'll do it the old-school way for them from a time
1674 // before multiplication existed and all we had was addition
1675 #define MULTIPLY0(x) 0
1676 #define MULTIPLY1(x) (x)
1677 #define MULTIPLY2(x) (x) + (x)
1678 #define MULTIPLY3(x) (x) + MULTIPLY2(x)
1679 #define MULTIPLY4(x) (x) + MULTIPLY3(x)
1680 #define MULTIPLY5(x) (x) + MULTIPLY4(x)
1681 #define MULTIPLY6(x) (x) + MULTIPLY5(x)
1682 #define MULTIPLY7(x) (x) + MULTIPLY6(x)
1683 #define MULTIPLY8(x) (x) + MULTIPLY7(x)
1684 #define MULTIPLY9(x) (x) + MULTIPLY8(x)
1685 
1686 #define MULTIPLY_(x,y) MULTIPLY##x(y)
1687 #define MULTIPLY(x,y) MULTIPLY_(x,y)
1688 
1689 #define LEGION_REDOP_VALUE(kind, type) LEGION_REDOP_BASE + \
1690  MULTIPLY(LEGION_REDOP_KIND_##kind##_VALUE, LEGION_TYPE_TOTAL) + \
1691  LEGION_TYPE_##type
1692 #endif
1693 typedef enum legion_builtin_redop_t {
1694  LEGION_REDOP_BASE = LEGION_MAX_APPLICATION_REDOP_ID,
1696  // Sum reductions
1698  LEGION_REDOP_OR_BOOL = LEGION_REDOP_VALUE(SUM,BOOL),
1699  LEGION_REDOP_SUM_INT8 = LEGION_REDOP_VALUE(SUM,INT8),
1700  LEGION_REDOP_SUM_INT16 = LEGION_REDOP_VALUE(SUM,INT16),
1701  LEGION_REDOP_SUM_INT32 = LEGION_REDOP_VALUE(SUM,INT32),
1702  LEGION_REDOP_SUM_INT64 = LEGION_REDOP_VALUE(SUM,INT64),
1703  LEGION_REDOP_SUM_UINT8 = LEGION_REDOP_VALUE(SUM,UINT8),
1704  LEGION_REDOP_SUM_UINT16 = LEGION_REDOP_VALUE(SUM,UINT16),
1705  LEGION_REDOP_SUM_UINT32 = LEGION_REDOP_VALUE(SUM,UINT32),
1706  LEGION_REDOP_SUM_UINT64 = LEGION_REDOP_VALUE(SUM,UINT64),
1707 #ifdef LEGION_REDOP_HALF
1708  LEGION_REDOP_SUM_FLOAT16 = LEGION_REDOP_VALUE(SUM,FLOAT16),
1709 #endif
1710  LEGION_REDOP_SUM_FLOAT32 = LEGION_REDOP_VALUE(SUM,FLOAT32),
1711  LEGION_REDOP_SUM_FLOAT64 = LEGION_REDOP_VALUE(SUM,FLOAT64),
1712 #ifdef LEGION_REDOP_COMPLEX
1713 #ifdef LEGION_REDOP_HALF
1714  LEGION_REDOP_SUM_COMPLEX32 = LEGION_REDOP_VALUE(SUM,COMPLEX32),
1715 #endif
1716  LEGION_REDOP_SUM_COMPLEX64 = LEGION_REDOP_VALUE(SUM,COMPLEX64),
1717  LEGION_REDOP_SUM_COMPLEX128 = LEGION_REDOP_VALUE(SUM,COMPLEX128),
1718 #endif
1720  // Difference reductions
1722  // No difference for bools
1723  LEGION_REDOP_DIFF_INT8 = LEGION_REDOP_VALUE(DIFF,INT8),
1724  LEGION_REDOP_DIFF_INT16 = LEGION_REDOP_VALUE(DIFF,INT16),
1725  LEGION_REDOP_DIFF_INT32 = LEGION_REDOP_VALUE(DIFF,INT32),
1726  LEGION_REDOP_DIFF_INT64 = LEGION_REDOP_VALUE(DIFF,INT64),
1727  LEGION_REDOP_DIFF_UINT8 = LEGION_REDOP_VALUE(DIFF,UINT8),
1728  LEGION_REDOP_DIFF_UINT16 = LEGION_REDOP_VALUE(DIFF,UINT16),
1729  LEGION_REDOP_DIFF_UINT32 = LEGION_REDOP_VALUE(DIFF,UINT32),
1730  LEGION_REDOP_DIFF_UINT64 = LEGION_REDOP_VALUE(DIFF,UINT64),
1731 #ifdef LEGION_REDOP_HALF
1732  LEGION_REDOP_DIFF_FLOAT16 = LEGION_REDOP_VALUE(DIFF,FLOAT16),
1733 #endif
1734  LEGION_REDOP_DIFF_FLOAT32 = LEGION_REDOP_VALUE(DIFF,FLOAT32),
1735  LEGION_REDOP_DIFF_FLOAT64 = LEGION_REDOP_VALUE(DIFF,FLOAT64),
1736 #ifdef LEGION_REDOP_COMPLEX
1737 #ifdef LEGION_REDOP_HALF
1738  LEGION_REDOP_DIFF_COMPLEX32 = LEGION_REDOP_VALUE(DIFF,COMPLEX32),
1739 #endif
1740  LEGION_REDOP_DIFF_COMPLEX64 = LEGION_REDOP_VALUE(DIFF,COMPLEX64),
1741  // TODO: LEGION_REDOP_DIFF_COMPLEX128,
1742 #endif
1744  // Product reductions
1746  LEGION_REDOP_AND_BOOL = LEGION_REDOP_VALUE(PROD,BOOL),
1747  LEGION_REDOP_PROD_INT8 = LEGION_REDOP_VALUE(PROD,INT8),
1748  LEGION_REDOP_PROD_INT16 = LEGION_REDOP_VALUE(PROD,INT16),
1749  LEGION_REDOP_PROD_INT32 = LEGION_REDOP_VALUE(PROD,INT32),
1750  LEGION_REDOP_PROD_INT64 = LEGION_REDOP_VALUE(PROD,INT64),
1751  LEGION_REDOP_PROD_UINT8 = LEGION_REDOP_VALUE(PROD,UINT8),
1752  LEGION_REDOP_PROD_UINT16 = LEGION_REDOP_VALUE(PROD,UINT16),
1753  LEGION_REDOP_PROD_UINT32 = LEGION_REDOP_VALUE(PROD,UINT32),
1754  LEGION_REDOP_PROD_UINT64 = LEGION_REDOP_VALUE(PROD,UINT64),
1755 #ifdef LEGION_REDOP_HALF
1756  LEGION_REDOP_PROD_FLOAT16 = LEGION_REDOP_VALUE(PROD,FLOAT16),
1757 #endif
1758  LEGION_REDOP_PROD_FLOAT32 = LEGION_REDOP_VALUE(PROD,FLOAT32),
1759  LEGION_REDOP_PROD_FLOAT64 = LEGION_REDOP_VALUE(PROD,FLOAT64),
1760 #ifdef LEGION_REDOP_COMPLEX
1761 #ifdef LEGION_REDOP_HALF
1762  LEGION_REDOP_PROD_COMPLEX32 = LEGION_REDOP_VALUE(PROD,COMPLEX32),
1763 #endif
1764  LEGION_REDOP_PROD_COMPLEX64 = LEGION_REDOP_VALUE(PROD,COMPLEX64),
1765  // TODO: LEGION_REDOP_PROD_COMPLEX128,
1766 #endif
1768  // Division reductions
1770  // No division for bools
1771  LEGION_REDOP_DIV_INT8 = LEGION_REDOP_VALUE(DIV,INT8),
1772  LEGION_REDOP_DIV_INT16 = LEGION_REDOP_VALUE(DIV,INT16),
1773  LEGION_REDOP_DIV_INT32 = LEGION_REDOP_VALUE(DIV,INT32),
1774  LEGION_REDOP_DIV_INT64 = LEGION_REDOP_VALUE(DIV,INT64),
1775  LEGION_REDOP_DIV_UINT8 = LEGION_REDOP_VALUE(DIV,UINT8),
1776  LEGION_REDOP_DIV_UINT16 = LEGION_REDOP_VALUE(DIV,UINT16),
1777  LEGION_REDOP_DIV_UINT32 = LEGION_REDOP_VALUE(DIV,UINT32),
1778  LEGION_REDOP_DIV_UINT64 = LEGION_REDOP_VALUE(DIV,UINT64),
1779 #ifdef LEGION_REDOP_HALF
1780  LEGION_REDOP_DIV_FLOAT16 = LEGION_REDOP_VALUE(DIV,FLOAT16),
1781 #endif
1782  LEGION_REDOP_DIV_FLOAT32 = LEGION_REDOP_VALUE(DIV,FLOAT32),
1783  LEGION_REDOP_DIV_FLOAT64 = LEGION_REDOP_VALUE(DIV,FLOAT64),
1784 #ifdef LEGION_REDOP_COMPLEX
1785 #ifdef LEGION_REDOP_HALF
1786  LEGION_REDOP_DIV_COMPLEX32 = LEGION_REDOP_VALUE(DIV,COMPLEX32),
1787 #endif
1788  LEGION_REDOP_DIV_COMPLEX64 = LEGION_REDOP_VALUE(DIV,COMPLEX64),
1789  // TODO: LEGION_REDOP_DIV_COMPLEX128,
1790 #endif
1792  // Max reductions
1794  LEGION_REDOP_MAX_BOOL = LEGION_REDOP_VALUE(MAX,BOOL),
1795  LEGION_REDOP_MAX_INT8 = LEGION_REDOP_VALUE(MAX,INT8),
1796  LEGION_REDOP_MAX_INT16 = LEGION_REDOP_VALUE(MAX,INT16),
1797  LEGION_REDOP_MAX_INT32 = LEGION_REDOP_VALUE(MAX,INT32),
1798  LEGION_REDOP_MAX_INT64 = LEGION_REDOP_VALUE(MAX,INT64),
1799  LEGION_REDOP_MAX_UINT8 = LEGION_REDOP_VALUE(MAX,UINT8),
1800  LEGION_REDOP_MAX_UINT16 = LEGION_REDOP_VALUE(MAX,UINT16),
1801  LEGION_REDOP_MAX_UINT32 = LEGION_REDOP_VALUE(MAX,UINT32),
1802  LEGION_REDOP_MAX_UINT64 = LEGION_REDOP_VALUE(MAX,UINT64),
1803 #ifdef LEGION_REDOP_HALF
1804  LEGION_REDOP_MAX_FLOAT16 = LEGION_REDOP_VALUE(MAX,FLOAT16),
1805 #endif
1806  LEGION_REDOP_MAX_FLOAT32 = LEGION_REDOP_VALUE(MAX,FLOAT32),
1807  LEGION_REDOP_MAX_FLOAT64 = LEGION_REDOP_VALUE(MAX,FLOAT64),
1808 #ifdef LEGION_REDOP_COMPLEX
1809 #ifdef LEGION_REDOP_HALF
1810  LEGION_REDOP_MAX_COMPLEX32 = LEGION_REDOP_VALUE(MAX,COMPLEX32),
1811 #endif
1812  LEGION_REDOP_MAX_COMPLEX64 = LEGION_REDOP_VALUE(MAX,COMPLEX64),
1813  // TODO: LEGION_REDOP_MAX_COMPLEX128,
1814 #endif
1816  // Min reductions
1818  LEGION_REDOP_MIN_BOOL = LEGION_REDOP_VALUE(MIN,BOOL),
1819  LEGION_REDOP_MIN_INT8 = LEGION_REDOP_VALUE(MIN,INT8),
1820  LEGION_REDOP_MIN_INT16 = LEGION_REDOP_VALUE(MIN,INT16),
1821  LEGION_REDOP_MIN_INT32 = LEGION_REDOP_VALUE(MIN,INT32),
1822  LEGION_REDOP_MIN_INT64 = LEGION_REDOP_VALUE(MIN,INT64),
1823  LEGION_REDOP_MIN_UINT8 = LEGION_REDOP_VALUE(MIN,UINT8),
1824  LEGION_REDOP_MIN_UINT16 = LEGION_REDOP_VALUE(MIN,UINT16),
1825  LEGION_REDOP_MIN_UINT32 = LEGION_REDOP_VALUE(MIN,UINT32),
1826  LEGION_REDOP_MIN_UINT64 = LEGION_REDOP_VALUE(MIN,UINT64),
1827 #ifdef LEGION_REDOP_HALF
1828  LEGION_REDOP_MIN_FLOAT16 = LEGION_REDOP_VALUE(MIN,FLOAT16),
1829 #endif
1830  LEGION_REDOP_MIN_FLOAT32 = LEGION_REDOP_VALUE(MIN,FLOAT32),
1831  LEGION_REDOP_MIN_FLOAT64 = LEGION_REDOP_VALUE(MIN,FLOAT64),
1832 #ifdef LEGION_REDOP_COMPLEX
1833 #ifdef LEGION_REDOP_HALF
1834  LEGION_REDOP_MIN_COMPLEX32 = LEGION_REDOP_VALUE(MIN,COMPLEX32),
1835 #endif
1836  LEGION_REDOP_MIN_COMPLEX64 = LEGION_REDOP_VALUE(MIN,COMPLEX64),
1837  // TODO: LEGION_REDOP_MIN_COMPLEX128
1838 #endif
1840  // Bitwise-OR reductions
1842  LEGION_REDOP_OR_INT8 = LEGION_REDOP_VALUE(OR,INT8),
1843  LEGION_REDOP_OR_INT16 = LEGION_REDOP_VALUE(OR,INT16),
1844  LEGION_REDOP_OR_INT32 = LEGION_REDOP_VALUE(OR,INT32),
1845  LEGION_REDOP_OR_INT64 = LEGION_REDOP_VALUE(OR,INT64),
1846  LEGION_REDOP_OR_UINT8 = LEGION_REDOP_VALUE(OR,UINT8),
1847  LEGION_REDOP_OR_UINT16 = LEGION_REDOP_VALUE(OR,UINT16),
1848  LEGION_REDOP_OR_UINT32 = LEGION_REDOP_VALUE(OR,UINT32),
1849  LEGION_REDOP_OR_UINT64 = LEGION_REDOP_VALUE(OR,UINT64),
1850  // No bitwise-or for float or complex types
1852  // Bitwise-AND reductions
1854  LEGION_REDOP_AND_INT8 = LEGION_REDOP_VALUE(AND,INT8),
1855  LEGION_REDOP_AND_INT16 = LEGION_REDOP_VALUE(AND,INT16),
1856  LEGION_REDOP_AND_INT32 = LEGION_REDOP_VALUE(AND,INT32),
1857  LEGION_REDOP_AND_INT64 = LEGION_REDOP_VALUE(AND,INT64),
1858  LEGION_REDOP_AND_UINT8 = LEGION_REDOP_VALUE(AND,UINT8),
1859  LEGION_REDOP_AND_UINT16 = LEGION_REDOP_VALUE(AND,UINT16),
1860  LEGION_REDOP_AND_UINT32 = LEGION_REDOP_VALUE(AND,UINT32),
1861  LEGION_REDOP_AND_UINT64 = LEGION_REDOP_VALUE(AND,UINT64),
1862  // No bitwise-and for float or complex types
1864  // Bitwise-XOR reductions
1866  LEGION_REDOP_XOR_BOOL = LEGION_REDOP_VALUE(XOR,BOOL),
1867  LEGION_REDOP_XOR_INT8 = LEGION_REDOP_VALUE(XOR,INT8),
1868  LEGION_REDOP_XOR_INT16 = LEGION_REDOP_VALUE(XOR,INT16),
1869  LEGION_REDOP_XOR_INT32 = LEGION_REDOP_VALUE(XOR,INT32),
1870  LEGION_REDOP_XOR_INT64 = LEGION_REDOP_VALUE(XOR,INT64),
1871  LEGION_REDOP_XOR_UINT8 = LEGION_REDOP_VALUE(XOR,UINT8),
1872  LEGION_REDOP_XOR_UINT16 = LEGION_REDOP_VALUE(XOR,UINT16),
1873  LEGION_REDOP_XOR_UINT32 = LEGION_REDOP_VALUE(XOR,UINT32),
1874  LEGION_REDOP_XOR_UINT64 = LEGION_REDOP_VALUE(XOR,UINT64),
1875  // No bitwise-xor for float or complex types
1876  LEGION_REDOP_LAST,
1877 } legion_builtin_redop_t;
1878 
1879 #undef LEGION_REDOP_KIND_SUM_VALUE
1880 #undef LEGION_REDOP_KIND_DIFF_VALUE
1881 #undef LEGION_REDOP_KIND_PROD_VALUE
1882 #undef LEGION_REDOP_KIND_DIV_VALUE
1883 #undef LEGION_REDOP_KIND_MAX_VALUE
1884 #undef LEGION_REDOP_KIND_MIN_VALUE
1885 #undef LEGION_REDOP_KIND_TOTAL_VALUE
1886 
1887 #ifdef LEGION_USE_PYTHON_CFFI
1888 #undef MULTIPLY0
1889 #undef MULTIPLY1
1890 #undef MULTIPLY2
1891 #undef MULTIPLY3
1892 #undef MULTIPLY4
1893 #undef MULTIPLY5
1894 #undef MULTIPLY6
1895 #undef MULTIPLY7
1896 #undef MULTIPLY8
1897 #undef MULTIPLY9
1898 #undef MULTIPLY_
1899 #undef MULTIPLY
1900 #endif
1901 
1902 typedef enum legion_execution_constraint_t {
1903  LEGION_ISA_CONSTRAINT = 0, // instruction set architecture
1904  LEGION_PROCESSOR_CONSTRAINT = 1, // processor kind constraint
1905  LEGION_RESOURCE_CONSTRAINT = 2, // physical resources
1906  LEGION_LAUNCH_CONSTRAINT = 3, // launch configuration
1907  LEGION_COLOCATION_CONSTRAINT = 4, // region requirements in same instance
1908  // for backwards compatibility
1909  LEGION_DEPRECATED_ENUM(ISA_CONSTRAINT)
1910  LEGION_DEPRECATED_ENUM(PROCESSOR_CONSTRAINT)
1911  LEGION_DEPRECATED_ENUM(RESOURCE_CONSTRAINT)
1912  LEGION_DEPRECATED_ENUM(LAUNCH_CONSTRAINT)
1913  LEGION_DEPRECATED_ENUM(COLOCATION_CONSTRAINT)
1914 } legion_execution_constraint_t;
1915 
1916 typedef enum legion_layout_constraint_t {
1917  LEGION_SPECIALIZED_CONSTRAINT = 0, // normal or speicalized (e.g. reduction-fold)
1918  LEGION_MEMORY_CONSTRAINT = 1, // constraint on the kind of memory
1919  LEGION_FIELD_CONSTRAINT = 2, // ordering of fields
1920  LEGION_ORDERING_CONSTRAINT = 3, // ordering of dimensions
1921  LEGION_TILING_CONSTRAINT = 4, // splitting of dimensions
1922  LEGION_DIMENSION_CONSTRAINT = 5, // dimension size constraint
1923  LEGION_ALIGNMENT_CONSTRAINT = 6, // alignment of a field
1924  LEGION_OFFSET_CONSTRAINT = 7, // offset of a field
1925  LEGION_POINTER_CONSTRAINT = 8, // pointer of a field
1926  LEGION_PADDING_CONSTRAINT = 9, // scratch padding
1927  // for backwards compatibility
1928  LEGION_DEPRECATED_ENUM(SPECIALIZED_CONSTRAINT)
1929  LEGION_DEPRECATED_ENUM(MEMORY_CONSTRAINT)
1930  LEGION_DEPRECATED_ENUM(FIELD_CONSTRAINT)
1931  LEGION_DEPRECATED_ENUM(ORDERING_CONSTRAINT)
1932  LEGION_DEPRECATED_ENUM(DIMENSION_CONSTRAINT)
1933  LEGION_DEPRECATED_ENUM(ALIGNMENT_CONSTRAINT)
1934  LEGION_DEPRECATED_ENUM(OFFSET_CONSTRAINT)
1935  LEGION_DEPRECATED_ENUM(POINTER_CONSTRAINT)
1936 } legion_layout_constraint_t;
1937 
1938 typedef enum legion_equality_kind_t {
1939  LEGION_LT_EK = 0, // <
1940  LEGION_LE_EK = 1, // <=
1941  LEGION_GT_EK = 2, // >
1942  LEGION_GE_EK = 3, // >=
1943  LEGION_EQ_EK = 4, // ==
1944  LEGION_NE_EK = 5, // !=
1945  // for backwards compatibility
1946  LEGION_DEPRECATED_ENUM(LT_EK)
1947  LEGION_DEPRECATED_ENUM(LE_EK)
1948  LEGION_DEPRECATED_ENUM(GT_EK)
1949  LEGION_DEPRECATED_ENUM(GE_EK)
1950  LEGION_DEPRECATED_ENUM(EQ_EK)
1951  LEGION_DEPRECATED_ENUM(NE_EK)
1952 } legion_equality_kind_t;
1953 
1954 typedef enum legion_dimension_kind_t {
1955  LEGION_DIM_X = 0, // first logical index space dimension
1956  LEGION_DIM_Y = 1, // second logical index space dimension
1957  LEGION_DIM_Z = 2, // ...
1958  // field dimension (this is here for legacy reasons: Regent has hard coded it)
1959  LEGION_DIM_W = 3, // fourth logical index space dimension
1960  LEGION_DIM_V = 4, // fifth logical index space dimension
1961  LEGION_DIM_U = 5, // ...
1962  LEGION_DIM_T = 6,
1963  LEGION_DIM_S = 7,
1964  LEGION_DIM_R = 8,
1965  LEGION_DIM_F = 9,
1966  // Numerical names for users that want them
1967  LEGION_DIM_0 = LEGION_DIM_X,
1968  LEGION_DIM_1 = LEGION_DIM_Y,
1969  LEGION_DIM_2 = LEGION_DIM_Z,
1970  LEGION_DIM_3 = LEGION_DIM_W,
1971  LEGION_DIM_4 = LEGION_DIM_V,
1972  LEGION_DIM_5 = LEGION_DIM_U,
1973  LEGION_DIM_6 = LEGION_DIM_T,
1974  LEGION_DIM_7 = LEGION_DIM_S,
1975  LEGION_DIM_8 = LEGION_DIM_R,
1976  // for backwards compatibility
1977  LEGION_DEPRECATED_ENUM(DIM_X)
1978  LEGION_DEPRECATED_ENUM(DIM_Y)
1979  LEGION_DEPRECATED_ENUM(DIM_Z)
1980  LEGION_DEPRECATED_ENUM(DIM_W)
1981  LEGION_DEPRECATED_ENUM(DIM_V)
1982  LEGION_DEPRECATED_ENUM(DIM_U)
1983  LEGION_DEPRECATED_ENUM(DIM_T)
1984  LEGION_DEPRECATED_ENUM(DIM_S)
1985  LEGION_DEPRECATED_ENUM(DIM_R)
1986  LEGION_DEPRECATED_ENUM(DIM_F)
1987 } legion_dimension_kind_t;
1988 
1989 // Make all flags 1-hot encoding so we can logically-or them together
1990 typedef enum legion_isa_kind_t {
1991  // Top-level ISA Kinds
1992  LEGION_X86_ISA = 0x00000001,
1993  LEGION_ARM_ISA = 0x00000002,
1994  LEGION_PPC_ISA = 0x00000004, // Power PC
1995  LEGION_PTX_ISA = 0x00000008, // auto-launch by runtime
1996  LEGION_CUDA_ISA = 0x00000010, // run on CPU thread bound to CUDA context
1997  LEGION_LUA_ISA = 0x00000020, // run on Lua processor
1998  LEGION_TERRA_ISA = 0x00000040, // JIT to target processor kind
1999  LEGION_LLVM_ISA = 0x00000080, // JIT to target processor kind
2000  LEGION_GL_ISA = 0x00000100, // run on CPU thread with OpenGL context
2001  // x86 Vector Instructions
2002  LEGION_SSE_ISA = 0x00000200,
2003  LEGION_SSE2_ISA = 0x00000400,
2004  LEGION_SSE3_ISA = 0x00000800,
2005  LEGION_SSE4_ISA = 0x00001000,
2006  LEGION_AVX_ISA = 0x00002000,
2007  LEGION_AVX2_ISA = 0x00004000,
2008  LEGION_FMA_ISA = 0x00008000,
2009  // PowerPC Vector Insructions
2010  LEGION_VSX_ISA = 0x00010000,
2011  // GPU variants
2012  LEGION_SM_10_ISA = 0x00020000,
2013  LEGION_SM_20_ISA = 0x00040000,
2014  LEGION_SM_30_ISA = 0x00080000,
2015  LEGION_SM_35_ISA = 0x00100000,
2016  // ARM Vector Instructions
2017  LEGION_NEON_ISA = 0x00200000,
2018  // for backwards compatibility
2019  LEGION_DEPRECATED_ENUM(X86_ISA)
2020  LEGION_DEPRECATED_ENUM(ARM_ISA)
2021  LEGION_DEPRECATED_ENUM(PPC_ISA)
2022  LEGION_DEPRECATED_ENUM(PTX_ISA)
2023  LEGION_DEPRECATED_ENUM(CUDA_ISA)
2024  LEGION_DEPRECATED_ENUM(LUA_ISA)
2025  LEGION_DEPRECATED_ENUM(TERRA_ISA)
2026  LEGION_DEPRECATED_ENUM(LLVM_ISA)
2027  LEGION_DEPRECATED_ENUM(GL_ISA)
2028  LEGION_DEPRECATED_ENUM(SSE_ISA)
2029  LEGION_DEPRECATED_ENUM(SSE2_ISA)
2030  LEGION_DEPRECATED_ENUM(SSE3_ISA)
2031  LEGION_DEPRECATED_ENUM(SSE4_ISA)
2032  LEGION_DEPRECATED_ENUM(AVX_ISA)
2033  LEGION_DEPRECATED_ENUM(AVX2_ISA)
2034  LEGION_DEPRECATED_ENUM(FMA_ISA)
2035  LEGION_DEPRECATED_ENUM(VSX_ISA)
2036  LEGION_DEPRECATED_ENUM(SM_10_ISA)
2037  LEGION_DEPRECATED_ENUM(SM_20_ISA)
2038  LEGION_DEPRECATED_ENUM(SM_30_ISA)
2039  LEGION_DEPRECATED_ENUM(SM_35_ISA)
2040  LEGION_DEPRECATED_ENUM(NEON_ISA)
2041 } legion_isa_kind_t;
2042 
2043 typedef enum legion_resource_constraint_t {
2044  LEGION_L1_CACHE_SIZE = 0,
2045  LEGION_L2_CACHE_SIZE = 1,
2046  LEGION_L3_CACHE_SIZE = 2,
2047  LEGION_L1_CACHE_ASSOCIATIVITY = 3,
2048  LEGION_L2_CACHE_ASSOCIATIVITY = 4,
2049  LEGION_L3_CACHE_ASSOCIATIVITY = 5,
2050  LEGION_REGISTER_FILE_SIZE = 6,
2051  LEGION_SHARED_MEMORY_SIZE = 7,
2052  LEGION_TEXTURE_CACHE_SIZE = 8,
2053  LEGION_CONSTANT_CACHE_SIZE = 9,
2054  LEGION_NAMED_BARRIERS = 10,
2055  LEGION_SM_COUNT = 11, // total SMs on the device
2056  LEGION_MAX_OCCUPANCY = 12, // max warps per SM
2057  // for backwards compatibility
2058  LEGION_DEPRECATED_ENUM(L1_CACHE_SIZE)
2059  LEGION_DEPRECATED_ENUM(L2_CACHE_SIZE)
2060  LEGION_DEPRECATED_ENUM(L3_CACHE_SIZE)
2061  LEGION_DEPRECATED_ENUM(L1_CACHE_ASSOCIATIVITY)
2062  LEGION_DEPRECATED_ENUM(L2_CACHE_ASSOCIATIVITY)
2063  LEGION_DEPRECATED_ENUM(L3_CACHE_ASSOCIATIVITY)
2064  LEGION_DEPRECATED_ENUM(REGISTER_FILE_SIZE)
2065  LEGION_DEPRECATED_ENUM(SHARED_MEMORY_SIZE)
2066  LEGION_DEPRECATED_ENUM(TEXTURE_CACHE_SIZE)
2067  LEGION_DEPRECATED_ENUM(CONSTANT_CACHE_SIZE)
2068  LEGION_DEPRECATED_ENUM(NAMED_BARRIERS)
2069  LEGION_DEPRECATED_ENUM(SM_COUNT)
2070  LEGION_DEPRECATED_ENUM(MAX_OCCUPANCY)
2071 } legion_resource_constraint_t;
2072 
2073 typedef enum legion_launch_constraint_t {
2074  LEGION_CTA_SHAPE = 0,
2075  LEGION_GRID_SHAPE = 1,
2076  LEGION_DYNAMIC_SHARED_MEMORY = 2,
2077  LEGION_REGISTERS_PER_THREAD = 3,
2078  LEGION_CTAS_PER_SM = 4,
2079  LEGION_NAMED_BARRIERS_PER_CTA = 5,
2080 } legion_launch_constraint_t;
2081 
2082 typedef enum legion_specialized_constraint_t {
2083  LEGION_NO_SPECIALIZE = 0,
2084  LEGION_AFFINE_SPECIALIZE = 1, // affine layout
2085  LEGION_COMPACT_SPECIALIZE = 2, // compacted sparsity
2086  LEGION_AFFINE_REDUCTION_SPECIALIZE = 3,
2087  LEGION_COMPACT_REDUCTION_SPECIALIZE = 4,
2088  LEGION_VIRTUAL_SPECIALIZE = 5,
2089  // All file types must go below here, everything else above
2090  LEGION_GENERIC_FILE_SPECIALIZE,
2091  LEGION_HDF5_FILE_SPECIALIZE,
2092  // for backards compatibility
2093  LEGION_DEPRECATED_ENUM(NO_SPECIALIZE)
2094  LEGION_DEPRECATED_ENUM(AFFINE_SPECIALIZE)
2095  LEGION_DEPRECATED_ENUM_FROM(NORMAL_SPECIALIZE,
2096  LEGION_AFFINE_SPECIALIZE)
2097  LEGION_DEPRECATED_ENUM(COMPACT_SPECIALIZE)
2098  LEGION_DEPRECATED_ENUM(AFFINE_REDUCTION_SPECIALIZE)
2099  LEGION_DEPRECATED_ENUM_FROM(REDUCTION_FOLD_SPECIALIZE,
2100  LEGION_AFFINE_REDUCTION_SPECIALIZE)
2101  LEGION_DEPRECATED_ENUM(COMPACT_REDUCTION_SPECIALIZE)
2102  LEGION_DEPRECATED_ENUM_FROM(REDUCTION_LIST_SPECIALIZE,
2103  LEGION_COMPACT_REDUCTION_SPECIALIZE)
2104  LEGION_DEPRECATED_ENUM(VIRTUAL_SPECIALIZE)
2105  LEGION_DEPRECATED_ENUM(GENERIC_FILE_SPECIALIZE)
2106  LEGION_DEPRECATED_ENUM(HDF5_FILE_SPECIALIZE)
2107 } legion_specialized_constraint_t;
2108 
2109 // Keep this in sync with Domain::MAX_RECT_DIM in legion_domain.h
2110 // these have to be macros for interacting with the preprocessor
2111 #define LEGION_MAX_POINT_DIM (LEGION_MAX_DIM)
2112 #define LEGION_MAX_RECT_DIM (LEGION_MAX_DIM)
2113 typedef enum legion_domain_max_rect_dim_t {
2114  // for backwards compatibility
2115  LEGION_DEPRECATED_ENUM(MAX_POINT_DIM)
2116  LEGION_DEPRECATED_ENUM(MAX_RECT_DIM)
2117 } legion_domain_max_rect_dim_t;
2118 
2119 #undef LEGION_DEPRECATED_ENUM
2120 #undef LEGION_DEPRECATED_ENUM_FROM
2121 
2122 //==========================================================================
2123 // Types
2124 //==========================================================================
2125 
2126 typedef realm_processor_kind_t legion_processor_kind_t;
2127 typedef realm_memory_kind_t legion_memory_kind_t;
2128 typedef realm_reduction_op_id_t legion_reduction_op_id_t;
2129 typedef realm_custom_serdez_id_t legion_custom_serdez_id_t;
2130 typedef realm_address_space_t legion_address_space_t;
2131 typedef realm_file_mode_t legion_file_mode_t;
2132 typedef realm_id_t legion_proc_id_t;
2133 typedef realm_id_t legion_memory_id_t;
2134 typedef int legion_task_priority_t;
2135 typedef int legion_garbage_collection_priority_t;
2136 typedef long long legion_coord_t;
2137 typedef unsigned int legion_color_t;
2138 typedef unsigned int legion_field_id_t;
2139 typedef unsigned int legion_trace_id_t;
2140 typedef unsigned int legion_mapper_id_t;
2141 typedef unsigned int legion_context_id_t;
2142 typedef unsigned int legion_instance_id_t;
2143 typedef unsigned int legion_type_tag_t;
2144 typedef unsigned int legion_index_space_id_t;
2145 typedef unsigned int legion_index_partition_id_t;
2146 typedef unsigned int legion_index_tree_id_t;
2147 typedef unsigned int legion_field_space_id_t;
2148 typedef unsigned int legion_generation_id_t;
2149 typedef unsigned int legion_type_handle;
2150 typedef unsigned int legion_projection_id_t;
2151 typedef unsigned int legion_sharding_id_t;
2152 typedef unsigned int legion_region_tree_id_t;
2153 typedef unsigned int legion_tunable_id_t;
2154 typedef unsigned int legion_local_variable_id_t;
2155 typedef unsigned int legion_shard_id_t;
2156 typedef unsigned int legion_variant_id_t;
2157 typedef unsigned long long legion_distributed_id_t;
2158 typedef unsigned long legion_mapping_tag_id_t;
2159 typedef unsigned long legion_code_descriptor_id_t;
2160 typedef unsigned long legion_semantic_tag_t;
2161 typedef unsigned long long legion_unique_id_t;
2162 typedef unsigned long long legion_version_id_t;
2163 typedef unsigned long long legion_projection_epoch_id_t;
2164 typedef realm_task_func_id_t legion_task_id_t;
2165 typedef unsigned long legion_layout_constraint_id_t;
2166 typedef long long legion_internal_color_t;
2167 
2168 #endif // __LEGION_CONFIG_H__
2169