@@ -431,50 +431,49 @@ enum BasicBlockFlags : uint64_t
431
431
BBF_HAS_NULLCHECK = MAKE_BBFLAG ( 9 ), // BB contains a null check
432
432
BBF_HAS_SUPPRESSGC_CALL = MAKE_BBFLAG (10 ), // BB contains a call to a method with SuppressGCTransitionAttribute
433
433
BBF_RUN_RARELY = MAKE_BBFLAG (11 ), // BB is rarely run (catch clauses, blocks with throws etc)
434
- BBF_LOOP_HEAD = MAKE_BBFLAG (12 ), // BB is the head of a loop (can reach a predecessor)
435
- BBF_HAS_LABEL = MAKE_BBFLAG (13 ), // BB needs a label
436
- BBF_LOOP_ALIGN = MAKE_BBFLAG (14 ), // Block is lexically the first block in a loop we intend to align.
437
- BBF_HAS_ALIGN = MAKE_BBFLAG (15 ), // BB ends with 'align' instruction
438
- BBF_HAS_JMP = MAKE_BBFLAG (16 ), // BB executes a JMP instruction (instead of return)
439
- BBF_GC_SAFE_POINT = MAKE_BBFLAG (17 ), // BB has a GC safe point (e.g. a call)
440
- BBF_HAS_IDX_LEN = MAKE_BBFLAG (18 ), // BB contains simple index or length expressions on an SD array local var.
441
- BBF_HAS_MD_IDX_LEN = MAKE_BBFLAG (19 ), // BB contains simple index, length, or lower bound expressions on an MD array local var.
442
- BBF_HAS_MDARRAYREF = MAKE_BBFLAG (20 ), // Block has a multi-dimensional array reference
443
- BBF_HAS_NEWOBJ = MAKE_BBFLAG (21 ), // BB contains 'new' of an object type.
444
-
445
- BBF_RETLESS_CALL = MAKE_BBFLAG (22 ), // BBJ_CALLFINALLY that will never return (and therefore, won't need a paired
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
446
445
// BBJ_CALLFINALLYRET); see isBBCallFinallyPair().
447
- BBF_COLD = MAKE_BBFLAG (23 ), // BB is cold
448
- BBF_PROF_WEIGHT = MAKE_BBFLAG (24 ), // BB weight is computed from profile data
449
- BBF_KEEP_BBJ_ALWAYS = MAKE_BBFLAG (25 ), // A special BBJ_ALWAYS block, used by EH code generation. Keep the jump kind
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
450
449
// as BBJ_ALWAYS. Used on x86 for the final step block out of a finally.
451
- BBF_HAS_CALL = MAKE_BBFLAG (26 ), // BB contains a call
452
- BBF_DOMINATED_BY_EXCEPTIONAL_ENTRY = MAKE_BBFLAG (27 ), // Block is dominated by exceptional entry.
453
- BBF_BACKWARD_JUMP = MAKE_BBFLAG (28 ), // BB is surrounded by a backward jump/switch arc
454
- BBF_BACKWARD_JUMP_SOURCE = MAKE_BBFLAG (29 ), // Block is a source of a backward jump
455
- BBF_BACKWARD_JUMP_TARGET = MAKE_BBFLAG (30 ), // Block is a target of a backward jump
456
- BBF_PATCHPOINT = MAKE_BBFLAG (31 ), // Block is a patchpoint
457
- BBF_PARTIAL_COMPILATION_PATCHPOINT = MAKE_BBFLAG (32 ), // Block is a partial compilation patchpoint
458
- BBF_HAS_HISTOGRAM_PROFILE = MAKE_BBFLAG (33 ), // BB contains a call needing a histogram profile
459
- BBF_TAILCALL_SUCCESSOR = MAKE_BBFLAG (34 ), // BB has pred that has potential tail call
460
- BBF_RECURSIVE_TAILCALL = MAKE_BBFLAG (35 ), // Block has recursive tailcall that may turn into a loop
461
- BBF_NO_CSE_IN = MAKE_BBFLAG (36 ), // Block should kill off any incoming CSE
462
- BBF_CAN_ADD_PRED = MAKE_BBFLAG (37 ), // Ok to add pred edge to this block, even when "safe" edge creation disabled
463
- BBF_HAS_VALUE_PROFILE = MAKE_BBFLAG (38 ), // Block has a node that needs a value probing
464
- BBF_HAS_NEWARR = MAKE_BBFLAG (39 ), // BB contains 'new' of an array type.
465
- BBF_MAY_HAVE_BOUNDS_CHECKS = MAKE_BBFLAG (40 ), // BB *likely* has a bounds check (after rangecheck phase).
466
- BBF_ASYNC_RESUMPTION = MAKE_BBFLAG (41 ), // Block is a resumption block in an async method
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
467
466
468
467
// The following are sets of flags.
469
468
470
469
// Flags to update when two blocks are compacted
471
470
472
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 | \
473
- BBF_HAS_NEWOBJ | BBF_HAS_NEWARR | BBF_HAS_NULLCHECK | BBF_HAS_MDARRAYREF | BBF_LOOP_HEAD | BBF_MAY_HAVE_BOUNDS_CHECKS,
472
+ BBF_HAS_NEWOBJ | BBF_HAS_NEWARR | BBF_HAS_NULLCHECK | BBF_HAS_MDARRAYREF | BBF_MAY_HAVE_BOUNDS_CHECKS,
474
473
475
474
// Flags a block should not have had before it is split.
476
475
477
- BBF_SPLIT_NONEXIST = BBF_LOOP_HEAD | BBF_RETLESS_CALL | BBF_COLD,
476
+ BBF_SPLIT_NONEXIST = BBF_RETLESS_CALL | BBF_COLD,
478
477
479
478
// Flags lost by the top block when a block is split.
480
479
// Note, this is a conservative guess.
@@ -1150,10 +1149,6 @@ struct BasicBlock : private LIR::Range
1150
1149
{
1151
1150
return HasFlag (BBF_RUN_RARELY);
1152
1151
}
1153
- bool isLoopHead () const
1154
- {
1155
- return HasFlag (BBF_LOOP_HEAD);
1156
- }
1157
1152
1158
1153
bool isLoopAlign () const
1159
1154
{
0 commit comments