Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(662)

Unified Diff: src/hydrogen.h

Issue 17568015: New array bounds check elimination pass (focused on induction variables and bitwise operations). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed review comments. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/hydrogen.h
diff --git a/src/hydrogen.h b/src/hydrogen.h
index aa360594c30910387d2e8314379c6a97349cfcec..71a1b91aa5224d16e5729bbbaed6f6427833e2ba 100644
--- a/src/hydrogen.h
+++ b/src/hydrogen.h
@@ -68,6 +68,11 @@ class HBasicBlock: public ZoneObject {
void set_last(HInstruction* instr) { last_ = instr; }
HControlInstruction* end() const { return end_; }
HLoopInformation* loop_information() const { return loop_information_; }
+ HLoopInformation* current_loop() const {
+ return IsLoopHeader() ? loop_information()
+ : (parent_loop_header() != NULL
+ ? parent_loop_header()->loop_information() : NULL);
+ }
const ZoneList<HBasicBlock*>* predecessors() const { return &predecessors_; }
bool HasPredecessor() const { return predecessors_.length() > 0; }
const ZoneList<HBasicBlock*>* dominated_blocks() const {
@@ -251,6 +256,20 @@ class HLoopInformation: public ZoneObject {
stack_check_ = stack_check;
}
+ bool IsNestedInThisLoop(HLoopInformation* other) {
+ while (other != NULL) {
+ if (other == this) {
+ return true;
+ }
+ other = other->parent_loop();
+ }
+ return false;
+ }
+ HLoopInformation* parent_loop() {
+ HBasicBlock* parent_header = loop_header()->parent_loop_header();
+ return parent_header != NULL ? parent_header->loop_information() : NULL;
+ }
+
private:
void AddBlock(HBasicBlock* block);
@@ -262,6 +281,7 @@ class HLoopInformation: public ZoneObject {
class BoundsCheckTable;
+class InductionVariableBlocksTable;
class HGraph: public ZoneObject {
public:
explicit HGraph(CompilationInfo* info);
@@ -446,6 +466,13 @@ class HGraph: public ZoneObject {
void SetupInformativeDefinitionsInBlock(HBasicBlock* block);
void SetupInformativeDefinitionsRecursively(HBasicBlock* block);
void EliminateRedundantBoundsChecks(HBasicBlock* bb, BoundsCheckTable* table);
+ void EliminateRedundantBoundsChecksUsingInductionVariables();
+ void CollectInductionVariableData(HBasicBlock* bb,
titzer 2013/07/02 13:45:06 I think you can move two of these methods to live
+ InductionVariableBlocksTable* table);
+ void EliminateRedundantBoundsChecksUsingInductionVariables(
+ HBasicBlock* bb,
+ InductionVariableBlocksTable* table);
+ void NewJoke();
titzer 2013/07/02 13:45:06 Was ist das?
Massi 2013/07/08 11:55:07 Debugging leftover :-)
Isolate* isolate_;
int next_block_id_;

Powered by Google App Engine
This is Rietveld 408576698