Make function bodies rely on the parameter variable declarations.
authorEric Anholt <eric@anholt.net>
Wed, 7 Apr 2010 21:32:53 +0000 (14:32 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 8 Apr 2010 00:23:23 +0000 (17:23 -0700)
Previously, generating inlined function bodies was going to be
difficult, as there was no mapping between the body's declaration of
variables where parameter values were supposed to live and the
parameter variables that a caller would use in paramater setup.
Presumably this also have been a problem for actual codegen.

ast_to_hir.cpp
builtin_function.cpp
glsl_types.cpp
ir_print_visitor.cpp

index d74e54c602ef664ab3292c2ae3d464565e25ca59..aa9a3a1a04d5be2f3ceb0343ccf55874af9bd13a 100644 (file)
@@ -1925,13 +1925,9 @@ ast_function_definition::hir(exec_list *instructions,
     */
    state->symbols->push_scope();
    foreach_iter(exec_list_iterator, iter, signature->parameters) {
-      ir_variable *const proto = ((ir_instruction *) iter.get())->as_variable();
+      ir_variable *const var = ((ir_instruction *) iter.get())->as_variable();
 
-      assert(proto != NULL);
-
-      ir_variable *const var = proto->clone();
-
-      signature->body.push_tail(var);
+      assert(var != NULL);
 
       /* The only way a parameter would "exist" is if two parameters have
        * the same name.
index 9cefbd4ae5f5b08214d66f55575b568ea8700b8b..e537141e3f0e8975da493e868c9a634a90dced22 100644 (file)
@@ -224,13 +224,9 @@ generate_function_instance(ir_function *f,
    for (i = 0; i < n_args; i++) {
       ir_variable *var = new ir_variable(type, arg_names[i]);
 
-      var = new ir_variable(type, arg_names[i]);
       var->mode = ir_var_in;
       sig->parameters.push_tail(var);
 
-      var = new ir_variable(type, arg_names[i]);
-      var->mode = ir_var_in;
-      sig->body.push_tail(var);
       declarations[i] = var;
    }
 
index b7abdaef2ce0f8053ae31e5d45640e99d4a3f681..c8d18b9ee7a058d58ed2e983466c9141186bd545 100644 (file)
@@ -204,11 +204,6 @@ generate_constructor_intro(const glsl_type *type, unsigned parameter_count,
       var->mode = ir_var_in;
       signature->parameters.push_tail(var);
 
-      var = new ir_variable(parameter_type, names[i]);
-
-      var->mode = ir_var_in;
-      signature->body.push_tail(var);
-
       declarations[i] = var;
    }
 
index 8396973f6c5eb282029a4776e91f44ecd21af245..908f1c3ad8df73df3b0484910abe945671f8335c 100644 (file)
@@ -67,6 +67,7 @@ void ir_print_visitor::visit(ir_variable *ir)
 void ir_print_visitor::visit(ir_label *ir)
 {
    printf("\n(label %s\n", ir->label);
+
    ir->signature->accept(this);
    printf(")");
 }
@@ -74,6 +75,15 @@ void ir_print_visitor::visit(ir_label *ir)
 
 void ir_print_visitor::visit(ir_function_signature *ir)
 {
+   printf("(paramaters\n");
+   foreach_iter(exec_list_iterator, iter, ir->parameters) {
+      ir_variable *const inst = (ir_variable *) iter.get();
+
+      inst->accept(this);
+      printf("\n");
+   }
+   printf(")\n");
+
    foreach_iter(exec_list_iterator, iter, ir->body) {
       ir_instruction *const inst = (ir_instruction *) iter.get();