summaryrefslogtreecommitdiff
path: root/ir.h
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-05-14 12:39:23 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-05-17 12:03:13 -0700
commit8895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1 (patch)
treeda8cdb46f174290e3d832d5248251143e7c43dae /ir.h
parent86790dd43f6b8253d99f5473c593031adc847230 (diff)
Add ir_hierarchical_visitor base class and associated infrastructure
This type of visitor should eventually replace all or almost all current uses of ir_visitor.
Diffstat (limited to 'ir.h')
-rw-r--r--ir.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/ir.h b/ir.h
index a533eee960..93b4c2b66a 100644
--- a/ir.h
+++ b/ir.h
@@ -28,6 +28,7 @@
#include "list.h"
#include "ir_visitor.h"
+#include "ir_hierarchical_visitor.h"
struct ir_program {
void *bong_hits;
@@ -42,6 +43,7 @@ public:
class ir_constant *constant_expression_value();
virtual void accept(ir_visitor *) = 0;
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *) = 0;
/**
* \name IR instruction downcast functions
@@ -130,6 +132,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
/**
* Duplicate an IR variable
*
@@ -210,6 +214,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
/**
* Get the name of the function for which this is a signature
*/
@@ -277,6 +283,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
void add_signature(ir_function_signature *sig)
{
sig->function = this;
@@ -343,6 +351,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
ir_rvalue *condition;
/** List of ir_instruction for the body of the then branch */
exec_list then_instructions;
@@ -366,6 +376,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
virtual ir_loop *as_loop()
{
return this;
@@ -403,6 +415,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
virtual ir_assignment * as_assignment()
{
return this;
@@ -531,6 +545,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
ir_expression *clone();
ir_expression_operation operation;
@@ -561,6 +577,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
/**
* Get a generic ir_call object when an error occurs
*/
@@ -650,6 +668,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
private:
ir_rvalue *value;
};
@@ -681,6 +701,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
bool is_break() const
{
return mode == jump_break;
@@ -747,6 +769,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
bool is_lvalue()
{
return val->is_lvalue() && !mask.has_duplicates;
@@ -780,6 +804,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
bool is_lvalue();
/**
@@ -825,6 +851,8 @@ public:
v->visit(this);
}
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+
ir_constant *clone()
{
return new ir_constant(this->type, &this->value);