diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-05-14 12:39:23 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-05-17 12:03:13 -0700 |
commit | 8895bae55ba8d9f62dd59cbd924ac37c8a7dcdb1 (patch) | |
tree | da8cdb46f174290e3d832d5248251143e7c43dae /ir.h | |
parent | 86790dd43f6b8253d99f5473c593031adc847230 (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.h | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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); |