glsl2: Use as_constant some places instead of constant_expression_value
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 2 Sep 2010 21:53:17 +0000 (14:53 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 3 Sep 2010 18:55:22 +0000 (11:55 -0700)
The places where constant_expression_value are still used in loop
analysis are places where a new expression tree is created and
constant folding won't have happened.  This is used, for example, when
we try to determine the maximal loop iteration count.

Based on review comments by Eric.  "...rely on constant folding to
have done its job, instead of going all through the subtree again when
it wasn't a constant."

src/glsl/loop_analysis.cpp
src/glsl/loop_controls.cpp

index f1268c04c4d4e34760804073b7343cbbdc0cbe04..32e8b8c85b3ba333256ef9950b35b2efcb192cf9 100644 (file)
@@ -433,7 +433,7 @@ get_basic_induction_increment(ir_assignment *ir, hash_table *var_hash)
 
    ir_rvalue *inc = (op0 == var) ? rhs->operands[1] : rhs->operands[0];
 
-   if (inc->constant_expression_value() == NULL) {
+   if (inc->as_constant() == NULL) {
       ir_variable *const inc_var = inc->variable_referenced();
       if (inc_var != NULL) {
         loop_variable *lv =
index d6a1e33fdb51acffe36f3415774425f7b0e98c70..17a0d2db816e09e835c2eabbe5d965b3f67de36a 100644 (file)
@@ -204,12 +204,12 @@ loop_control_visitor::visit_leave(ir_loop *ir)
          * which.
          */
         ir_rvalue *counter = cond->operands[0]->as_dereference_variable();
-        ir_constant *limit = cond->operands[1]->constant_expression_value();
+        ir_constant *limit = cond->operands[1]->as_constant();
         enum ir_expression_operation cmp = cond->operation;
 
         if (limit == NULL) {
            counter = cond->operands[1]->as_dereference_variable();
-           limit = cond->operands[0]->constant_expression_value();
+           limit = cond->operands[0]->as_constant();
 
            switch (cmp) {
            case ir_binop_less:    cmp = ir_binop_gequal;  break;