OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 28 matching lines...) Expand all Loading... |
39 | 39 |
40 namespace v8 { | 40 namespace v8 { |
41 namespace internal { | 41 namespace internal { |
42 | 42 |
43 // Forward declarations. | 43 // Forward declarations. |
44 class BitVector; | 44 class BitVector; |
45 class FunctionState; | 45 class FunctionState; |
46 class HEnvironment; | 46 class HEnvironment; |
47 class HGraph; | 47 class HGraph; |
48 class HLoopInformation; | 48 class HLoopInformation; |
| 49 class HOsrBuilder; |
49 class HTracer; | 50 class HTracer; |
50 class LAllocator; | 51 class LAllocator; |
51 class LChunk; | 52 class LChunk; |
52 class LiveRange; | 53 class LiveRange; |
53 | 54 |
54 | 55 |
55 class HBasicBlock: public ZoneObject { | 56 class HBasicBlock: public ZoneObject { |
56 public: | 57 public: |
57 explicit HBasicBlock(HGraph* graph); | 58 explicit HBasicBlock(HGraph* graph); |
58 virtual ~HBasicBlock() { } | 59 virtual ~HBasicBlock() { } |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 if (id >= 0 && id < values_.length()) return values_[id]; | 352 if (id >= 0 && id < values_.length()) return values_[id]; |
352 return NULL; | 353 return NULL; |
353 } | 354 } |
354 | 355 |
355 bool Optimize(SmartArrayPointer<char>* bailout_reason); | 356 bool Optimize(SmartArrayPointer<char>* bailout_reason); |
356 | 357 |
357 #ifdef DEBUG | 358 #ifdef DEBUG |
358 void Verify(bool do_full_verify) const; | 359 void Verify(bool do_full_verify) const; |
359 #endif | 360 #endif |
360 | 361 |
361 bool has_osr_loop_entry() { | 362 bool has_osr() { |
362 return osr_loop_entry_.is_set(); | 363 return osr_ != NULL; |
363 } | 364 } |
364 | 365 |
365 HBasicBlock* osr_loop_entry() { | 366 void set_osr(HOsrBuilder* osr) { |
366 return osr_loop_entry_.get(); | 367 osr_ = osr; |
367 } | 368 } |
368 | 369 |
369 void set_osr_loop_entry(HBasicBlock* entry) { | 370 HOsrBuilder* osr() { |
370 osr_loop_entry_.set(entry); | 371 return osr_; |
371 } | |
372 | |
373 ZoneList<HUnknownOSRValue*>* osr_values() { | |
374 return osr_values_.get(); | |
375 } | |
376 | |
377 void set_osr_values(ZoneList<HUnknownOSRValue*>* values) { | |
378 osr_values_.set(values); | |
379 } | 372 } |
380 | 373 |
381 int update_type_change_checksum(int delta) { | 374 int update_type_change_checksum(int delta) { |
382 type_change_checksum_ += delta; | 375 type_change_checksum_ += delta; |
383 return type_change_checksum_; | 376 return type_change_checksum_; |
384 } | 377 } |
385 | 378 |
386 void update_maximum_environment_size(int environment_size) { | 379 void update_maximum_environment_size(int environment_size) { |
387 if (environment_size > maximum_environment_size_) { | 380 if (environment_size > maximum_environment_size_) { |
388 maximum_environment_size_ = environment_size; | 381 maximum_environment_size_ = environment_size; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 SetOncePointer<HConstant> constant_0_; | 481 SetOncePointer<HConstant> constant_0_; |
489 SetOncePointer<HConstant> constant_1_; | 482 SetOncePointer<HConstant> constant_1_; |
490 SetOncePointer<HConstant> constant_minus1_; | 483 SetOncePointer<HConstant> constant_minus1_; |
491 SetOncePointer<HConstant> constant_true_; | 484 SetOncePointer<HConstant> constant_true_; |
492 SetOncePointer<HConstant> constant_false_; | 485 SetOncePointer<HConstant> constant_false_; |
493 SetOncePointer<HConstant> constant_the_hole_; | 486 SetOncePointer<HConstant> constant_the_hole_; |
494 SetOncePointer<HConstant> constant_null_; | 487 SetOncePointer<HConstant> constant_null_; |
495 SetOncePointer<HConstant> constant_invalid_context_; | 488 SetOncePointer<HConstant> constant_invalid_context_; |
496 SetOncePointer<HArgumentsObject> arguments_object_; | 489 SetOncePointer<HArgumentsObject> arguments_object_; |
497 | 490 |
498 SetOncePointer<HBasicBlock> osr_loop_entry_; | 491 HOsrBuilder* osr_; |
499 SetOncePointer<ZoneList<HUnknownOSRValue*> > osr_values_; | |
500 | 492 |
501 CompilationInfo* info_; | 493 CompilationInfo* info_; |
502 Zone* zone_; | 494 Zone* zone_; |
503 | 495 |
504 bool is_recursive_; | 496 bool is_recursive_; |
505 bool use_optimistic_licm_; | 497 bool use_optimistic_licm_; |
506 bool has_soft_deoptimize_; | 498 bool has_soft_deoptimize_; |
507 bool depends_on_empty_array_proto_elements_; | 499 bool depends_on_empty_array_proto_elements_; |
508 int type_change_checksum_; | 500 int type_change_checksum_; |
509 int maximum_environment_size_; | 501 int maximum_environment_size_; |
(...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1431 HInstruction* BuildGetArrayFunction(HValue* context); | 1423 HInstruction* BuildGetArrayFunction(HValue* context); |
1432 | 1424 |
1433 private: | 1425 private: |
1434 HGraphBuilder(); | 1426 HGraphBuilder(); |
1435 CompilationInfo* info_; | 1427 CompilationInfo* info_; |
1436 HGraph* graph_; | 1428 HGraph* graph_; |
1437 HBasicBlock* current_block_; | 1429 HBasicBlock* current_block_; |
1438 int no_side_effects_scope_count_; | 1430 int no_side_effects_scope_count_; |
1439 }; | 1431 }; |
1440 | 1432 |
1441 | |
1442 class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { | 1433 class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
1443 public: | 1434 public: |
1444 // A class encapsulating (lazily-allocated) break and continue blocks for | 1435 // A class encapsulating (lazily-allocated) break and continue blocks for |
1445 // a breakable statement. Separated from BreakAndContinueScope so that it | 1436 // a breakable statement. Separated from BreakAndContinueScope so that it |
1446 // can have a separate lifetime. | 1437 // can have a separate lifetime. |
1447 class BreakAndContinueInfo BASE_EMBEDDED { | 1438 class BreakAndContinueInfo BASE_EMBEDDED { |
1448 public: | 1439 public: |
1449 explicit BreakAndContinueInfo(BreakableStatement* target, | 1440 explicit BreakAndContinueInfo(BreakableStatement* target, |
1450 int drop_extra = 0) | 1441 int drop_extra = 0) |
1451 : target_(target), | 1442 : target_(target), |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1589 void VisitTypeof(UnaryOperation* expr); | 1580 void VisitTypeof(UnaryOperation* expr); |
1590 void VisitSub(UnaryOperation* expr); | 1581 void VisitSub(UnaryOperation* expr); |
1591 void VisitBitNot(UnaryOperation* expr); | 1582 void VisitBitNot(UnaryOperation* expr); |
1592 void VisitNot(UnaryOperation* expr); | 1583 void VisitNot(UnaryOperation* expr); |
1593 | 1584 |
1594 void VisitComma(BinaryOperation* expr); | 1585 void VisitComma(BinaryOperation* expr); |
1595 void VisitLogicalExpression(BinaryOperation* expr); | 1586 void VisitLogicalExpression(BinaryOperation* expr); |
1596 void VisitArithmeticExpression(BinaryOperation* expr); | 1587 void VisitArithmeticExpression(BinaryOperation* expr); |
1597 | 1588 |
1598 bool PreProcessOsrEntry(IterationStatement* statement); | 1589 bool PreProcessOsrEntry(IterationStatement* statement); |
1599 // True iff. we are compiling for OSR and the statement is the entry. | |
1600 bool HasOsrEntryAt(IterationStatement* statement); | |
1601 void VisitLoopBody(IterationStatement* stmt, | 1590 void VisitLoopBody(IterationStatement* stmt, |
1602 HBasicBlock* loop_entry, | 1591 HBasicBlock* loop_entry, |
1603 BreakAndContinueInfo* break_info); | 1592 BreakAndContinueInfo* break_info); |
1604 | 1593 |
1605 // Create a back edge in the flow graph. body_exit is the predecessor | 1594 // Create a back edge in the flow graph. body_exit is the predecessor |
1606 // block and loop_entry is the successor block. loop_successor is the | 1595 // block and loop_entry is the successor block. loop_successor is the |
1607 // block where control flow exits the loop normally (e.g., via failure of | 1596 // block where control flow exits the loop normally (e.g., via failure of |
1608 // the condition) and break_block is the block where control flow breaks | 1597 // the condition) and break_block is the block where control flow breaks |
1609 // from the loop. All blocks except loop_entry can be NULL. The return | 1598 // from the loop. All blocks except loop_entry can be NULL. The return |
1610 // value is the new successor block which is the join of loop_successor | 1599 // value is the new successor block which is the join of loop_successor |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1952 AstContext* ast_context_; | 1941 AstContext* ast_context_; |
1953 | 1942 |
1954 // A stack of breakable statements entered. | 1943 // A stack of breakable statements entered. |
1955 BreakAndContinueScope* break_scope_; | 1944 BreakAndContinueScope* break_scope_; |
1956 | 1945 |
1957 int inlined_count_; | 1946 int inlined_count_; |
1958 ZoneList<Handle<Object> > globals_; | 1947 ZoneList<Handle<Object> > globals_; |
1959 | 1948 |
1960 bool inline_bailout_; | 1949 bool inline_bailout_; |
1961 | 1950 |
| 1951 HOsrBuilder* osr_; |
| 1952 |
1962 friend class FunctionState; // Pushes and pops the state stack. | 1953 friend class FunctionState; // Pushes and pops the state stack. |
1963 friend class AstContext; // Pushes and pops the AST context stack. | 1954 friend class AstContext; // Pushes and pops the AST context stack. |
1964 friend class KeyedLoadFastElementStub; | 1955 friend class KeyedLoadFastElementStub; |
| 1956 friend class HOsrBuilder; |
1965 | 1957 |
1966 DISALLOW_COPY_AND_ASSIGN(HOptimizedGraphBuilder); | 1958 DISALLOW_COPY_AND_ASSIGN(HOptimizedGraphBuilder); |
1967 }; | 1959 }; |
1968 | 1960 |
1969 | 1961 |
1970 Zone* AstContext::zone() const { return owner_->zone(); } | 1962 Zone* AstContext::zone() const { return owner_->zone(); } |
1971 | 1963 |
1972 | 1964 |
1973 class HStatistics: public Malloced { | 1965 class HStatistics: public Malloced { |
1974 public: | 1966 public: |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2107 EmbeddedVector<char, 64> filename_; | 2099 EmbeddedVector<char, 64> filename_; |
2108 HeapStringAllocator string_allocator_; | 2100 HeapStringAllocator string_allocator_; |
2109 StringStream trace_; | 2101 StringStream trace_; |
2110 int indent_; | 2102 int indent_; |
2111 }; | 2103 }; |
2112 | 2104 |
2113 | 2105 |
2114 } } // namespace v8::internal | 2106 } } // namespace v8::internal |
2115 | 2107 |
2116 #endif // V8_HYDROGEN_H_ | 2108 #endif // V8_HYDROGEN_H_ |
OLD | NEW |