{
printf(" ret ");
emit_type(expr->ret_type);
- printf(" ");
- print_ident(p, &(expr->dest));
+ if (expr->ret_type->form != FORM_VOID)
+ {
+ printf(" ");
+ print_ident(p, &(expr->dest));
+ }
puts("");
}
break;
printf(" = %s ", binop_name(expr));
emit_type(expr->ret_type);
printf(" ");
- print_const(expr->ret_type, &(expr->left));
+ print_const(expr->arg_type, &(expr->left));
printf(", ");
print_ident(p, &(expr->right.var));
printf("\n");
printf(" ");
print_ident(p, &(expr->left.var));
printf(", ");
- print_const(expr->ret_type, &(expr->right));
+ print_const(expr->arg_type, &(expr->right));
printf("\n");
break;
{
node = ssa_node(IDENT, MODE_VAR);
node->ret_type = sym->type;
+ node->arg_type = sym->type;
node->loaded = !sym->global;
node->dest.symid = index;
node->dest.symver = sym->version;
(void)p;
SsaNode* node = ssa_node(BOOL, MODE_CONST);
node->ret_type = &BoolType;
+ node->arg_type = &BoolType;
node->left.val.i = val;
return node;
}
(void)p;
SsaNode* node = ssa_node(INT, MODE_CONST);
node->ret_type = &IntType;
+ node->arg_type = &IntType;
node->left.val.i = val;
return node;
}
(void)p;
SsaNode* node = ssa_node(REAL, MODE_CONST);
node->ret_type = &RealType;
+ node->arg_type = &RealType;
node->left.val.f = val;
return node;
}
load(p, value);
SsaNode* node = ssa_node(STORE, MODE_MEMORY);
node->ret_type = dest->ret_type;
+ node->arg_type = dest->ret_type;
node->dest = dest->left.var;
node->left.var = value->dest;
node->dest.symver = phi_add(p, node->dest);
cond = load(p, cond);
SsaNode* node = ssa_node(IF, MODE_CONTROL);
node->ret_type = &VoidType;
+ node->arg_type = &BoolType;
node->left.block = br1;
node->right.block = br2;
node = load(p, node);
{
load(p, expr);
node->ret_type = expr->ret_type;
+ node->arg_type = expr->ret_type;
node = load(p, node);
node->dest = expr->dest;
}
else
{
node->ret_type = &VoidType;
+ node->arg_type = &VoidType;
node = load(p, node);
}
return node;
operand = load(p, operand);
node = ssa_node(op, MODE_UNOP);
node->ret_type = operand->ret_type;
+ node->arg_type = operand->ret_type;
node->left.var = operand->dest;
}
return node;
{
assert(!"not a left.valid form");
}
+
+ a->arg_type = a->ret_type;
return a;
}