libFirm
|
Bad nodes indicate invalid input, which is values which should never be computed. More...
Functions | |
ir_node * | new_rd_Bad (dbg_info *dbgi, ir_graph *irg, ir_mode *mode) |
Construct a Bad node. | |
ir_node * | new_r_Bad (ir_graph *irg, ir_mode *mode) |
Construct a Bad node. | |
ir_node * | new_d_Bad (dbg_info *dbgi, ir_mode *mode) |
Construct a Bad node. | |
ir_node * | new_Bad (ir_mode *mode) |
Construct a Bad node. | |
int | is_Bad (const ir_node *node) |
Test if node is a Bad. | |
ir_op * | get_op_Bad (void) |
Returns opcode for Bad nodes. |
Variables | |
ir_op * | op_Bad |
Bad opcode. |
Bad nodes indicate invalid input, which is values which should never be computed.
The typical use case for the Bad node is removing unreachable code. Frontends should set the current_block to Bad when it is clear that following code must be unreachable (ie. after a goto or return statement). Optimisations also set block predecessors to Bad when it becomes clear, that a control flow edge can never be executed.
The gigo optimisations ensures that nodes with Bad as their block, get replaced by Bad themselves. Nodes with at least 1 Bad input get exchanged with Bad too. Exception to this rule are Block, Phi, Tuple and End node; This is because removing inputs from a Block is hairy operation (requiring, Phis to be shortened too for example). So instead of removing block inputs they are set to Bad, and the actual removal is left to the control flow optimisation phase. Block, Phi, Tuple with only Bad inputs however are replaced by Bad right away.
ir_op* get_op_Bad | ( | void | ) |
Returns opcode for Bad nodes.
int is_Bad | ( | const ir_node * | node | ) |
Test if node is a Bad.
Construct a Bad node.
mode | mode of the operations result |
Construct a Bad node.
dbgi | A pointer to debug information. |
mode | mode of the operations result |
Construct a Bad node.
irg | The IR graph the node belongs to. |
mode | mode of the operations result |
Construct a Bad node.
dbgi | A pointer to debug information. |
irg | The IR graph the node belongs to. |
mode | mode of the operations result |