summaryrefslogtreecommitdiff
path: root/ir_constant_folding.cpp
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-04-06 11:11:05 -0700
committerEric Anholt <eric@anholt.net>2010-04-06 11:42:34 -0700
commitbae5be356eef9efd893e8937d11ecb1b5f3feee6 (patch)
treecfe19a3e91a42ebf05b313431d10ecffb08bdb6a /ir_constant_folding.cpp
parentaf18641f0a9f717fdeab8d3e94c1df93b48c4d30 (diff)
Perform constant folding on array indices.
Replaces a constant var deref with a constant value in CorrectParse1.frag.
Diffstat (limited to 'ir_constant_folding.cpp')
-rw-r--r--ir_constant_folding.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/ir_constant_folding.cpp b/ir_constant_folding.cpp
index b9dee37edf..006eb5ffcf 100644
--- a/ir_constant_folding.cpp
+++ b/ir_constant_folding.cpp
@@ -88,7 +88,14 @@ ir_constant_folding_visitor::visit(ir_swizzle *ir)
void
ir_constant_folding_visitor::visit(ir_dereference *ir)
{
- (void) ir;
+ if (ir->mode == ir_dereference::ir_reference_array) {
+ ir_constant *const_val = ir->selector.array_index->constant_expression_value();
+ if (const_val)
+ ir->selector.array_index = const_val;
+ else
+ ir->selector.array_index->accept(this);
+ }
+ ir->var->accept(this);
}