Cfg_Block_Start_Role

enum Cfg_Block_Start_Role

Field

Constant in module

Description

None

ir.role_none

If_Then

ir.role_if_then

This block represents the then-branch of an if. Also used for a in c ? a : b. Start_Physical will be If_Statement or Conditional_Operator.

If_Else

ir.role_if_else

This block represents the else-branch of an if. Also used for b in c ? a : b. Start_Physical will be If_Statement or Conditional_Operator. Note: Not used for an if without else; those instead have the else-edge directly jumping to the If_After.

If_After

ir.role_if_after

This block represents the control-flow joined back together after an if. Also appears after c ? a : b (except when the ternary appears in a condition). Start_Physical will be the If_Statement or Conditional_Operator that just ended. If leaving the if involves cleanup (calling destructor for variable declared in condition), it’s the first cleanup block that will be marked If_After. Otherwise, it’s the first block following the if.

Loop_Condition

ir.role_loop_condition

The condition of a loop statement. Start_Physical points to that loop.

Loop_Body

ir.role_loop_body

The body of a loop statement. Start_Physical points to that loop.

Loop_Exit

ir.role_loop_exit

This block starts directly after exiting some loop. Start_Physical points to that loop. If leaving the loop involves cleanup (e.g., destructor calls), the first cleanup block will be marked as the Loop_Exit. Otherwise, it’s the first block following the loop.

Short_Circuit_Eval_Rhs

ir.role_short_circuit_eval_rhs

Represents the right-hand side of a short-circuiting condition. Start_Physical will be And_Then or Or_Else.

Bool_True

ir.role_bool_true

condition-like boolean expression evaluated to true, this block sets a variable to true.

Bool_False

ir.role_bool_false

condition-like boolean expression evaluated to true, this block sets a variable to false.

Bool_After

ir.role_bool_after

condition-like boolean expression; control flow joins back together from Bool_True and Bool_False branches.

Label

ir.role_label

This block can be jumped to via a label. Start_Physical is that label.

Loop_Break_Label

ir.role_loop_break_label

Compiler-generated label for target of break; within a loop.

Loop_Continue_Label

ir.role_loop_continue_label

Compiler-generated label for target of continue;

Switch_Break_Label

ir.role_switch_break_label

Compiler-generated label for target of break; within a switch.

Leave_Label

ir.role_leave_label

Compiler-generated label for target of __leave;