return block;
}
+static SsaNode* ssa_blocknode(SsaBlock* block)
+{
+ SsaNode* node = ssa_node(BEGIN, MODE_CTRL);
+ node->value.block = block;
+ return node;
+}
+
void ssa_block_add(SsaBlock* blk, SsaNode* node)
{
if (blk->head == 0)
{
cond = load(p, cond);
SsaNode* node = ssa_node(IF, MODE_CTRL);
- node->left = cond;
- SSA_LBLK(node) = br1;
- SSA_RBLK(node) = br2;
+ node->left = ssa_blocknode(br1);
+ node->right = ssa_blocknode(br2);
node = load(p, node);
- SSA_VAR(node) = SSA_VAR(cond); // TODO: unnecessary?
+ SSA_VAR(node) = SSA_VAR(cond);
return node;
}
SsaNode* ssa_branch(Parser* p, SsaBlock* br)
{
SsaNode* node = ssa_node(BRANCH, MODE_CTRL);
+ node->left = ssa_blocknode(br);
SSA_LBLK(node) = br;
ssa_block_add(p->curr_block, node);
node->loaded = 1;
return node;
}
-
SsaNode* ssa_call(SsaNode* func);
void ssa_call_add(SsaBlock* call, SsaNode* arg);