diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2014-02-28 10:23:58 +0000 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2014-03-04 16:19:11 +0000 |
commit | d4dd255db1d110ceb5551f6d95ff31fb57420994 (patch) | |
tree | 93c9dfff8d16f2b9675c35477cc4bcd8ea3f630c /compiler/optimizing/nodes.h | |
parent | b565506a63e75dac4a8bb9dd54dabf5259e5b95f (diff) | |
download | art-d4dd255db1d110ceb5551f6d95ff31fb57420994.zip art-d4dd255db1d110ceb5551f6d95ff31fb57420994.tar.gz art-d4dd255db1d110ceb5551f6d95ff31fb57420994.tar.bz2 |
Add codegen support to the optimizing compiler.
Change-Id: I9aae76908ff1d6e64fb71a6718fc1426b67a5c28
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r-- | compiler/optimizing/nodes.h | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 3d5d531..46fe95e 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -43,6 +43,13 @@ class HGraph : public ArenaObject { ArenaAllocator* arena() const { return arena_; } const GrowableArray<HBasicBlock*>* blocks() const { return &blocks_; } + HBasicBlock* entry_block() const { return entry_block_; } + HBasicBlock* exit_block() const { return exit_block_; } + + void set_entry_block(HBasicBlock* block) { entry_block_ = block; } + void set_exit_block(HBasicBlock* block) { exit_block_ = block; } + + void AddBlock(HBasicBlock* block); void BuildDominatorTree(); @@ -57,8 +64,6 @@ class HGraph : public ArenaObject { ArenaBitVector* visiting) const; void RemoveDeadBlocks(const ArenaBitVector& visited) const; - HBasicBlock* GetEntryBlock() const { return blocks_.Get(0); } - ArenaAllocator* const arena_; // List of blocks in insertion order. @@ -67,6 +72,9 @@ class HGraph : public ArenaObject { // List of blocks to perform a pre-order dominator tree traversal. GrowableArray<HBasicBlock*> dominator_order_; + HBasicBlock* entry_block_; + HBasicBlock* exit_block_; + DISALLOW_COPY_AND_ASSIGN(HGraph); }; @@ -174,12 +182,15 @@ class HBasicBlock : public ArenaObject { class HInstruction : public ArenaObject { public: - HInstruction() : previous_(nullptr), next_(nullptr) { } + HInstruction() : previous_(nullptr), next_(nullptr), block_(nullptr) { } virtual ~HInstruction() { } HInstruction* next() const { return next_; } HInstruction* previous() const { return previous_; } + HBasicBlock* block() const { return block_; } + void set_block(HBasicBlock* block) { block_ = block; } + virtual intptr_t InputCount() const = 0; virtual HInstruction* InputAt(intptr_t i) const = 0; @@ -189,6 +200,7 @@ class HInstruction : public ArenaObject { private: HInstruction* previous_; HInstruction* next_; + HBasicBlock* block_; friend class HBasicBlock; @@ -304,6 +316,10 @@ class HGoto : public HTemplateInstruction<0> { public: HGoto() { } + HBasicBlock* GetSuccessor() const { + return block()->successors()->Get(0); + } + DECLARE_INSTRUCTION(Goto) private: @@ -333,6 +349,8 @@ class HGraphVisitor : public ValueObject { void VisitInsertionOrder(); + HGraph* graph() const { return graph_; } + // Visit functions for instruction classes. #define DECLARE_VISIT_INSTRUCTION(name) \ virtual void Visit##name(H##name* instr) { VisitInstruction(instr); } |