@@ -428,48 +428,45 @@ enum BasicBlockFlags : uint64_t
428
428
BBF_NEEDS_GCPOLL = MAKE_BBFLAG ( 6 ), // BB may need a GC poll because it uses the slow tail call helper
429
429
BBF_CLONED_FINALLY_BEGIN = MAKE_BBFLAG ( 7 ), // First block of a cloned finally region
430
430
BBF_CLONED_FINALLY_END = MAKE_BBFLAG ( 8 ), // Last block of a cloned finally region
431
- BBF_HAS_NULLCHECK = MAKE_BBFLAG ( 9 ), // BB contains a null check
432
- BBF_HAS_SUPPRESSGC_CALL = MAKE_BBFLAG (10 ), // BB contains a call to a method with SuppressGCTransitionAttribute
433
- BBF_RUN_RARELY = MAKE_BBFLAG (11 ), // BB is rarely run (catch clauses, blocks with throws etc)
434
- BBF_HAS_LABEL = MAKE_BBFLAG (12 ), // BB needs a label
435
- BBF_LOOP_ALIGN = MAKE_BBFLAG (13 ), // Block is lexically the first block in a loop we intend to align.
436
- BBF_HAS_ALIGN = MAKE_BBFLAG (14 ), // BB ends with 'align' instruction
437
- BBF_HAS_JMP = MAKE_BBFLAG (15 ), // BB executes a JMP instruction (instead of return)
438
- BBF_GC_SAFE_POINT = MAKE_BBFLAG (16 ), // BB has a GC safe point (e.g. a call)
439
- BBF_HAS_IDX_LEN = MAKE_BBFLAG (17 ), // BB contains simple index or length expressions on an SD array local var.
440
- BBF_HAS_MD_IDX_LEN = MAKE_BBFLAG (18 ), // BB contains simple index, length, or lower bound expressions on an MD array local var.
441
- BBF_HAS_MDARRAYREF = MAKE_BBFLAG (19 ), // Block has a multi-dimensional array reference
442
- BBF_HAS_NEWOBJ = MAKE_BBFLAG (20 ), // BB contains 'new' of an object type.
443
-
444
- BBF_RETLESS_CALL = MAKE_BBFLAG (21 ), // BBJ_CALLFINALLY that will never return (and therefore, won't need a paired
431
+ BBF_HAS_SUPPRESSGC_CALL = MAKE_BBFLAG ( 9 ), // BB contains a call to a method with SuppressGCTransitionAttribute
432
+ BBF_RUN_RARELY = MAKE_BBFLAG (10 ), // BB is rarely run (catch clauses, blocks with throws etc)
433
+ BBF_HAS_LABEL = MAKE_BBFLAG (11 ), // BB needs a label
434
+ BBF_LOOP_ALIGN = MAKE_BBFLAG (12 ), // Block is lexically the first block in a loop we intend to align.
435
+ BBF_HAS_ALIGN = MAKE_BBFLAG (13 ), // BB ends with 'align' instruction
436
+ BBF_HAS_JMP = MAKE_BBFLAG (14 ), // BB executes a JMP instruction (instead of return)
437
+ BBF_GC_SAFE_POINT = MAKE_BBFLAG (15 ), // BB has a GC safe point (e.g. a call)
438
+ BBF_HAS_MDARRAYREF = MAKE_BBFLAG (16 ), // Block has a multi-dimensional array reference
439
+ BBF_HAS_NEWOBJ = MAKE_BBFLAG (17 ), // BB contains 'new' of an object type.
440
+
441
+ BBF_RETLESS_CALL = MAKE_BBFLAG (18 ), // BBJ_CALLFINALLY that will never return (and therefore, won't need a paired
445
442
// BBJ_CALLFINALLYRET); see isBBCallFinallyPair().
446
- BBF_COLD = MAKE_BBFLAG (22 ), // BB is cold
447
- BBF_PROF_WEIGHT = MAKE_BBFLAG (23 ), // BB weight is computed from profile data
448
- BBF_KEEP_BBJ_ALWAYS = MAKE_BBFLAG (24 ), // A special BBJ_ALWAYS block, used by EH code generation. Keep the jump kind
443
+ BBF_COLD = MAKE_BBFLAG (19 ), // BB is cold
444
+ BBF_PROF_WEIGHT = MAKE_BBFLAG (20 ), // BB weight is computed from profile data
445
+ BBF_KEEP_BBJ_ALWAYS = MAKE_BBFLAG (21 ), // A special BBJ_ALWAYS block, used by EH code generation. Keep the jump kind
449
446
// as BBJ_ALWAYS. Used on x86 for the final step block out of a finally.
450
- BBF_HAS_CALL = MAKE_BBFLAG (25 ), // BB contains a call
451
- BBF_DOMINATED_BY_EXCEPTIONAL_ENTRY = MAKE_BBFLAG (26 ), // Block is dominated by exceptional entry.
452
- BBF_BACKWARD_JUMP = MAKE_BBFLAG (27 ), // BB is surrounded by a backward jump/switch arc
453
- BBF_BACKWARD_JUMP_SOURCE = MAKE_BBFLAG (28 ), // Block is a source of a backward jump
454
- BBF_BACKWARD_JUMP_TARGET = MAKE_BBFLAG (29 ), // Block is a target of a backward jump
455
- BBF_PATCHPOINT = MAKE_BBFLAG (30 ), // Block is a patchpoint
456
- BBF_PARTIAL_COMPILATION_PATCHPOINT = MAKE_BBFLAG (31 ), // Block is a partial compilation patchpoint
457
- BBF_HAS_HISTOGRAM_PROFILE = MAKE_BBFLAG (32 ), // BB contains a call needing a histogram profile
458
- BBF_TAILCALL_SUCCESSOR = MAKE_BBFLAG (33 ), // BB has pred that has potential tail call
459
- BBF_RECURSIVE_TAILCALL = MAKE_BBFLAG (34 ), // Block has recursive tailcall that may turn into a loop
460
- BBF_NO_CSE_IN = MAKE_BBFLAG (35 ), // Block should kill off any incoming CSE
461
- BBF_CAN_ADD_PRED = MAKE_BBFLAG (36 ), // Ok to add pred edge to this block, even when "safe" edge creation disabled
462
- BBF_HAS_VALUE_PROFILE = MAKE_BBFLAG (37 ), // Block has a node that needs a value probing
463
- BBF_HAS_NEWARR = MAKE_BBFLAG (38 ), // BB contains 'new' of an array type.
464
- BBF_MAY_HAVE_BOUNDS_CHECKS = MAKE_BBFLAG (39 ), // BB *likely* has a bounds check (after rangecheck phase).
465
- BBF_ASYNC_RESUMPTION = MAKE_BBFLAG (40 ), // Block is a resumption block in an async method
447
+ BBF_HAS_CALL = MAKE_BBFLAG (22 ), // BB contains a call
448
+ BBF_DOMINATED_BY_EXCEPTIONAL_ENTRY = MAKE_BBFLAG (23 ), // Block is dominated by exceptional entry.
449
+ BBF_BACKWARD_JUMP = MAKE_BBFLAG (24 ), // BB is surrounded by a backward jump/switch arc
450
+ BBF_BACKWARD_JUMP_SOURCE = MAKE_BBFLAG (25 ), // Block is a source of a backward jump
451
+ BBF_BACKWARD_JUMP_TARGET = MAKE_BBFLAG (26 ), // Block is a target of a backward jump
452
+ BBF_PATCHPOINT = MAKE_BBFLAG (27 ), // Block is a patchpoint
453
+ BBF_PARTIAL_COMPILATION_PATCHPOINT = MAKE_BBFLAG (28 ), // Block is a partial compilation patchpoint
454
+ BBF_HAS_HISTOGRAM_PROFILE = MAKE_BBFLAG (29 ), // BB contains a call needing a histogram profile
455
+ BBF_TAILCALL_SUCCESSOR = MAKE_BBFLAG (30 ), // BB has pred that has potential tail call
456
+ BBF_RECURSIVE_TAILCALL = MAKE_BBFLAG (31 ), // Block has recursive tailcall that may turn into a loop
457
+ BBF_NO_CSE_IN = MAKE_BBFLAG (32 ), // Block should kill off any incoming CSE
458
+ BBF_CAN_ADD_PRED = MAKE_BBFLAG (33 ), // Ok to add pred edge to this block, even when "safe" edge creation disabled
459
+ BBF_HAS_VALUE_PROFILE = MAKE_BBFLAG (34 ), // Block has a node that needs a value probing
460
+ BBF_HAS_NEWARR = MAKE_BBFLAG (35 ), // BB contains 'new' of an array type.
461
+ BBF_MAY_HAVE_BOUNDS_CHECKS = MAKE_BBFLAG (36 ), // BB *likely* has a bounds check (after rangecheck phase).
462
+ BBF_ASYNC_RESUMPTION = MAKE_BBFLAG (37 ), // Block is a resumption block in an async method
466
463
467
464
// The following are sets of flags.
468
465
469
466
// Flags to update when two blocks are compacted
470
467
471
- BBF_COMPACT_UPD = BBF_GC_SAFE_POINT | BBF_NEEDS_GCPOLL | BBF_HAS_JMP | BBF_HAS_IDX_LEN | BBF_HAS_MD_IDX_LEN | BBF_BACKWARD_JUMP | \
472
- BBF_HAS_NEWOBJ | BBF_HAS_NEWARR | BBF_HAS_NULLCHECK | BBF_HAS_MDARRAYREF | BBF_MAY_HAVE_BOUNDS_CHECKS,
468
+ BBF_COMPACT_UPD = BBF_GC_SAFE_POINT | BBF_NEEDS_GCPOLL | BBF_HAS_JMP | BBF_BACKWARD_JUMP | \
469
+ BBF_HAS_NEWOBJ | BBF_HAS_NEWARR | BBF_HAS_MDARRAYREF | BBF_MAY_HAVE_BOUNDS_CHECKS,
473
470
474
471
// Flags a block should not have had before it is split.
475
472
@@ -484,18 +481,18 @@ enum BasicBlockFlags : uint64_t
484
481
485
482
// Flags gained by the bottom block when a block is split.
486
483
// Note, this is a conservative guess.
487
- // For example, the bottom block might or might not have BBF_HAS_NULLCHECK , but we assume it has BBF_HAS_NULLCHECK .
484
+ // For example, the bottom block might or might not have BBF_HAS_NEWARR , but we assume it has BBF_HAS_NEWARR .
488
485
// TODO: Should BBF_RUN_RARELY be added to BBF_SPLIT_GAINED ?
489
486
490
- BBF_SPLIT_GAINED = BBF_DONT_REMOVE | BBF_HAS_JMP | BBF_BACKWARD_JUMP | BBF_HAS_IDX_LEN | BBF_HAS_MD_IDX_LEN | BBF_PROF_WEIGHT | BBF_HAS_NEWARR | \
491
- BBF_HAS_NEWOBJ | BBF_KEEP_BBJ_ALWAYS | BBF_CLONED_FINALLY_END | BBF_HAS_NULLCHECK | BBF_HAS_HISTOGRAM_PROFILE | BBF_HAS_VALUE_PROFILE | BBF_HAS_MDARRAYREF | BBF_NEEDS_GCPOLL | BBF_MAY_HAVE_BOUNDS_CHECKS | BBF_ASYNC_RESUMPTION,
487
+ BBF_SPLIT_GAINED = BBF_DONT_REMOVE | BBF_HAS_JMP | BBF_BACKWARD_JUMP | BBF_PROF_WEIGHT | BBF_HAS_NEWARR | \
488
+ BBF_HAS_NEWOBJ | BBF_KEEP_BBJ_ALWAYS | BBF_CLONED_FINALLY_END | BBF_HAS_HISTOGRAM_PROFILE | BBF_HAS_VALUE_PROFILE | BBF_HAS_MDARRAYREF | BBF_NEEDS_GCPOLL | BBF_MAY_HAVE_BOUNDS_CHECKS | BBF_ASYNC_RESUMPTION,
492
489
493
490
// Flags that must be propagated to a new block if code is copied from a block to a new block. These are flags that
494
491
// limit processing of a block if the code in question doesn't exist. This is conservative; we might not
495
492
// have actually copied one of these type of tree nodes, but if we only copy a portion of the block's statements,
496
493
// we don't know (unless we actually pay close attention during the copy).
497
494
498
- BBF_COPY_PROPAGATE = BBF_HAS_NEWOBJ | BBF_HAS_NEWARR | BBF_HAS_NULLCHECK | BBF_HAS_IDX_LEN | BBF_HAS_MD_IDX_LEN | BBF_HAS_MDARRAYREF | BBF_MAY_HAVE_BOUNDS_CHECKS,
495
+ BBF_COPY_PROPAGATE = BBF_HAS_NEWOBJ | BBF_HAS_NEWARR | BBF_HAS_MDARRAYREF | BBF_MAY_HAVE_BOUNDS_CHECKS,
499
496
};
500
497
501
498
FORCEINLINE
0 commit comments