return NULL;
}
- self->nil = ir_value_var("nil", store_value, TYPE_NIL);
+ self->nil = ir_value_var("nil", store_global, TYPE_NIL);
self->nil->cvq = CV_CONST;
self->reserved_va_count = NULL;
return true;
}
-bool ir_function_finalize(ir_function *self)
+bool ir_function_optimize(ir_function *self)
{
- size_t i;
-
if (self->builtin)
return true;
irerror(self->context, "internal error: ir_function_naive_phi failed");
return false;
}
+ return true;
+}
+
+bool ir_function_finalize(ir_function *self)
+{
+ size_t i;
+
+ if (self->builtin)
+ return true;
for (i = 0; i < vec_size(self->locals); ++i) {
ir_value *v = self->locals[i];
ir_value* ir_function_create_local(ir_function *self, const char *name, int vtype, bool param);
+bool GMQCC_WARN ir_function_optimize(ir_function*);
bool GMQCC_WARN ir_function_finalize(ir_function*);
/*
bool ir_function_naive_phi(ir_function*);
bool function_finalize_all(ast_function **list, size_t count)
{
- size_t i = 0;
+ size_t i;
+ for (i = 0; i < count; ++i) {
+ if (!ir_function_optimize(list[i]->ir_func)) {
+ con_out("failed to optimize function %s\n", list[i]->name);
+ return false;
+ }
+ }
if (OPTS_OPTION_U32(OPTION_J) > 1)
return function_finalize_all_threaded(list, count);
for (i = 0; i < count; ++i) {