2 * This file is part of cparser.
3 * Copyright (C) 2012 Christoph Mallon <christoph.mallon@gmx.de>
6 #include "jump_target.h"
8 void jump_from_block_to_target(jump_target *const tgt, ir_node *const block)
14 } else if (tgt->first) {
15 ir_node *const jmp = new_r_Jmp(tgt->block);
16 tgt->block = new_immBlock();
18 add_immBlock_pred(tgt->block, jmp);
20 ir_node *const jmp = new_r_Jmp(block);
21 add_immBlock_pred(tgt->block, jmp);
24 void jump_to_target(jump_target *const tgt)
26 ir_node *const block = get_cur_block();
28 jump_from_block_to_target(tgt, block);
31 void add_pred_to_jump_target(jump_target *const tgt, ir_node *const pred)
34 tgt->block = new_immBlock();
35 } else if (tgt->first) {
36 ir_node *const jmp = new_r_Jmp(tgt->block);
37 tgt->block = new_immBlock();
39 add_immBlock_pred(tgt->block, jmp);
41 add_immBlock_pred(tgt->block, pred);
44 ir_node *enter_jump_target(jump_target *const tgt)
46 ir_node *const block = tgt->block;
47 if (block && !tgt->first)
48 mature_immBlock(block);
53 void enter_immature_jump_target(jump_target *const tgt)
56 ir_node *block = tgt->block;
58 /* Avoid unreachable loops by adding a Bad entry. */
59 jmp = new_Bad(mode_X);
61 } else if (tgt->first) {
63 jmp = new_r_Jmp(block);
65 tgt->block = block = new_immBlock();
66 add_immBlock_pred(block, jmp);