summaryrefslogtreecommitdiff
path: root/ir_expression_flattening.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ir_expression_flattening.cpp')
-rw-r--r--ir_expression_flattening.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/ir_expression_flattening.cpp b/ir_expression_flattening.cpp
index 9494786d4e..1e0244988a 100644
--- a/ir_expression_flattening.cpp
+++ b/ir_expression_flattening.cpp
@@ -70,7 +70,9 @@ public:
virtual void visit(ir_function *);
virtual void visit(ir_expression *);
virtual void visit(ir_swizzle *);
- virtual void visit(ir_dereference *);
+ virtual void visit(ir_dereference_variable *);
+ virtual void visit(ir_dereference_array *);
+ virtual void visit(ir_dereference_record *);
virtual void visit(ir_assignment *);
virtual void visit(ir_constant *);
virtual void visit(ir_call *);
@@ -162,11 +164,21 @@ ir_expression_flattening_visitor::visit(ir_swizzle *ir)
void
-ir_expression_flattening_visitor::visit(ir_dereference *ir)
+ir_expression_flattening_visitor::visit(ir_dereference_variable *ir)
+{
+ ir->var->accept(this);
+}
+
+void
+ir_expression_flattening_visitor::visit(ir_dereference_array *ir)
+{
+ ir->selector.array_index->accept(this);
+ ir->var->accept(this);
+}
+
+void
+ir_expression_flattening_visitor::visit(ir_dereference_record *ir)
{
- if (ir->mode == ir_dereference::ir_reference_array) {
- ir->selector.array_index->accept(this);
- }
ir->var->accept(this);
}