glsl: Skip processing the first function's body in do_dead_functions().
authorEric Anholt <eric@anholt.net>
Fri, 11 Mar 2011 22:08:48 +0000 (14:08 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 15 Mar 2011 17:14:51 +0000 (10:14 -0700)
It can't call anything, so there's no point.

src/glsl/opt_dead_functions.cpp

index 51c77e3b9476150562ee21b8cfe177cdc0a9aee0..7c64c618c0ca4b683bccb0d21063de55547462ee 100644 (file)
@@ -50,6 +50,7 @@ public:
    ir_dead_functions_visitor()
    {
       this->mem_ctx = ralloc_context(NULL);
+      this->seen_another_function_signature = false;
    }
 
    ~ir_dead_functions_visitor()
@@ -64,6 +65,8 @@ public:
 
    bool (*predicate)(ir_instruction *ir);
 
+   bool seen_another_function_signature;
+
    /* List of signature_entry */
    exec_list signature_list;
    void *mem_ctx;
@@ -94,7 +97,13 @@ ir_dead_functions_visitor::visit_enter(ir_function_signature *ir)
       entry->used = true;
    }
 
-
+   /* If this is the first signature to look at, no need to descend to see
+    * if it has calls to another function signature.
+    */
+   if (!this->seen_another_function_signature) {
+      this->seen_another_function_signature = true;
+      return visit_continue_with_parent;
+   }
 
    return visit_continue;
 }