Refactor IR function representation.

Now, ir_function is emitted as part of the IR instructions, rather than
simply existing in the symbol table.  Individual ir_function_signatures
are not emitted themselves, but only as part of ir_function.
This commit is contained in:
Kenneth Graunke
2010-04-21 12:30:22 -07:00
committed by Ian Romanick
parent f96c52ba2e
commit 9fa99f3b6c
8 changed files with 61 additions and 53 deletions

View File

@@ -1922,11 +1922,6 @@ ast_function::hir(exec_list *instructions,
exec_list hir_parameters;
/* The prototype part of a function does not generate anything in the IR
* instruction stream.
*/
(void) instructions;
/* Convert the list of function parameters to HIR now so that they can be
* used below to compare this function's signature with previously seen
* signatures for functions with the same name.
@@ -1989,7 +1984,7 @@ ast_function::hir(exec_list *instructions,
name);
}
if (is_definition && (sig->definition != NULL)) {
if (is_definition && sig->is_defined) {
YYLTYPE loc = this->get_location();
_mesa_glsl_error(& loc, state, "function `%s' redefined", name);
@@ -2012,6 +2007,9 @@ ast_function::hir(exec_list *instructions,
} else {
f = new ir_function(name);
state->symbols->add_function(f->name, f);
/* Emit the new function header */
instructions->push_tail(f);
}
/* Verify the return type of main() */
@@ -2068,12 +2066,6 @@ ast_function_definition::hir(exec_list *instructions,
assert(state->current_function == NULL);
state->current_function = signature;
ir_label *label = new ir_label(signature->function_name(), signature);
if (signature->definition == NULL) {
signature->definition = label;
}
instructions->push_tail(label);
/* Duplicate parameters declared in the prototype as concrete variables.
* Add these to the symbol table.
*/
@@ -2095,11 +2087,9 @@ ast_function_definition::hir(exec_list *instructions,
}
}
/* Convert the body of the function to HIR, and append the resulting
* instructions to the list that currently consists of the function label
* and the function parameters.
*/
/* Convert the body of the function to HIR. */
this->body->hir(&signature->body, state);
signature->is_defined = true;
state->symbols->pop_scope();