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

Side by Side Diff: src/crankshaft/hydrogen.h

Issue 2161543002: [turbofan] Add support for eager/soft deoptimization reasons. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Do the ports properly Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « src/crankshaft/arm64/lithium-codegen-arm64.cc ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_CRANKSHAFT_HYDROGEN_H_ 5 #ifndef V8_CRANKSHAFT_HYDROGEN_H_
6 #define V8_CRANKSHAFT_HYDROGEN_H_ 6 #define V8_CRANKSHAFT_HYDROGEN_H_
7 7
8 #include "src/accessors.h" 8 #include "src/accessors.h"
9 #include "src/allocation.h" 9 #include "src/allocation.h"
10 #include "src/ast/ast-type-bounds.h" 10 #include "src/ast/ast-type-bounds.h"
(...skipping 1499 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 1510
1511 HLoadNamedField* AddLoadArrayLength(HValue *object, 1511 HLoadNamedField* AddLoadArrayLength(HValue *object,
1512 ElementsKind kind, 1512 ElementsKind kind,
1513 HValue *dependency = NULL); 1513 HValue *dependency = NULL);
1514 1514
1515 HValue* AddLoadJSBuiltin(int context_index); 1515 HValue* AddLoadJSBuiltin(int context_index);
1516 1516
1517 HValue* EnforceNumberType(HValue* number, Type* expected); 1517 HValue* EnforceNumberType(HValue* number, Type* expected);
1518 HValue* TruncateToNumber(HValue* value, Type** expected); 1518 HValue* TruncateToNumber(HValue* value, Type** expected);
1519 1519
1520 void FinishExitWithHardDeoptimization(Deoptimizer::DeoptReason reason); 1520 void FinishExitWithHardDeoptimization(DeoptimizeReason reason);
1521 1521
1522 void AddIncrementCounter(StatsCounter* counter); 1522 void AddIncrementCounter(StatsCounter* counter);
1523 1523
1524 class IfBuilder final { 1524 class IfBuilder final {
1525 public: 1525 public:
1526 // If using this constructor, Initialize() must be called explicitly! 1526 // If using this constructor, Initialize() must be called explicitly!
1527 IfBuilder(); 1527 IfBuilder();
1528 1528
1529 explicit IfBuilder(HGraphBuilder* builder); 1529 explicit IfBuilder(HGraphBuilder* builder);
1530 IfBuilder(HGraphBuilder* builder, 1530 IfBuilder(HGraphBuilder* builder,
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 // // continues after else code of if_whatever or if_something. 1659 // // continues after else code of if_whatever or if_something.
1660 // ... 1660 // ...
1661 // if_finally.End(); 1661 // if_finally.End();
1662 void JoinContinuation(HIfContinuation* continuation); 1662 void JoinContinuation(HIfContinuation* continuation);
1663 1663
1664 void Then(); 1664 void Then();
1665 void Else(); 1665 void Else();
1666 void End(); 1666 void End();
1667 void EndUnreachable(); 1667 void EndUnreachable();
1668 1668
1669 void Deopt(Deoptimizer::DeoptReason reason); 1669 void Deopt(DeoptimizeReason reason);
1670 void ThenDeopt(Deoptimizer::DeoptReason reason) { 1670 void ThenDeopt(DeoptimizeReason reason) {
1671 Then(); 1671 Then();
1672 Deopt(reason); 1672 Deopt(reason);
1673 } 1673 }
1674 void ElseDeopt(Deoptimizer::DeoptReason reason) { 1674 void ElseDeopt(DeoptimizeReason reason) {
1675 Else(); 1675 Else();
1676 Deopt(reason); 1676 Deopt(reason);
1677 } 1677 }
1678 1678
1679 void Return(HValue* value); 1679 void Return(HValue* value);
1680 1680
1681 private: 1681 private:
1682 void InitializeDontCreateBlocks(HGraphBuilder* builder); 1682 void InitializeDontCreateBlocks(HGraphBuilder* builder);
1683 1683
1684 HControlInstruction* AddCompare(HControlInstruction* compare); 1684 HControlInstruction* AddCompare(HControlInstruction* compare);
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1921 1921
1922 CompilationInfo* info_; 1922 CompilationInfo* info_;
1923 CallInterfaceDescriptor descriptor_; 1923 CallInterfaceDescriptor descriptor_;
1924 HGraph* graph_; 1924 HGraph* graph_;
1925 HBasicBlock* current_block_; 1925 HBasicBlock* current_block_;
1926 Scope* scope_; 1926 Scope* scope_;
1927 SourcePosition position_; 1927 SourcePosition position_;
1928 int start_position_; 1928 int start_position_;
1929 }; 1929 };
1930 1930
1931
1932 template <> 1931 template <>
1933 inline HDeoptimize* HGraphBuilder::Add<HDeoptimize>( 1932 inline HDeoptimize* HGraphBuilder::Add<HDeoptimize>(
1934 Deoptimizer::DeoptReason reason, Deoptimizer::BailoutType type) { 1933 DeoptimizeReason reason, Deoptimizer::BailoutType type) {
1935 if (type == Deoptimizer::SOFT) { 1934 if (type == Deoptimizer::SOFT) {
1936 isolate()->counters()->soft_deopts_requested()->Increment(); 1935 isolate()->counters()->soft_deopts_requested()->Increment();
1937 if (FLAG_always_opt) return NULL; 1936 if (FLAG_always_opt) return NULL;
1938 } 1937 }
1939 if (current_block()->IsDeoptimizing()) return NULL; 1938 if (current_block()->IsDeoptimizing()) return NULL;
1940 HBasicBlock* after_deopt_block = CreateBasicBlock( 1939 HBasicBlock* after_deopt_block = CreateBasicBlock(
1941 current_block()->last_environment()); 1940 current_block()->last_environment());
1942 HDeoptimize* instr = New<HDeoptimize>(reason, type, after_deopt_block); 1941 HDeoptimize* instr = New<HDeoptimize>(reason, type, after_deopt_block);
1943 if (type == Deoptimizer::SOFT) { 1942 if (type == Deoptimizer::SOFT) {
1944 isolate()->counters()->soft_deopts_inserted()->Increment(); 1943 isolate()->counters()->soft_deopts_inserted()->Increment();
1945 } 1944 }
1946 FinishCurrentBlock(instr); 1945 FinishCurrentBlock(instr);
1947 set_current_block(after_deopt_block); 1946 set_current_block(after_deopt_block);
1948 return instr; 1947 return instr;
1949 } 1948 }
1950 1949
1951
1952 template <> 1950 template <>
1953 inline HInstruction* HGraphBuilder::AddUncasted<HDeoptimize>( 1951 inline HInstruction* HGraphBuilder::AddUncasted<HDeoptimize>(
1954 Deoptimizer::DeoptReason reason, Deoptimizer::BailoutType type) { 1952 DeoptimizeReason reason, Deoptimizer::BailoutType type) {
1955 return Add<HDeoptimize>(reason, type); 1953 return Add<HDeoptimize>(reason, type);
1956 } 1954 }
1957 1955
1958 1956
1959 template<> 1957 template<>
1960 inline HSimulate* HGraphBuilder::Add<HSimulate>( 1958 inline HSimulate* HGraphBuilder::Add<HSimulate>(
1961 BailoutId id, 1959 BailoutId id,
1962 RemovableSimulate removable) { 1960 RemovableSimulate removable) {
1963 HSimulate* instr = current_block()->CreateSimulate(id, removable); 1961 HSimulate* instr = current_block()->CreateSimulate(id, removable);
1964 AddInstruction(instr); 1962 AddInstruction(instr);
(...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after
3043 } 3041 }
3044 3042
3045 private: 3043 private:
3046 HOptimizedGraphBuilder* builder_; 3044 HOptimizedGraphBuilder* builder_;
3047 }; 3045 };
3048 3046
3049 } // namespace internal 3047 } // namespace internal
3050 } // namespace v8 3048 } // namespace v8
3051 3049
3052 #endif // V8_CRANKSHAFT_HYDROGEN_H_ 3050 #endif // V8_CRANKSHAFT_HYDROGEN_H_
OLDNEW
« no previous file with comments | « src/crankshaft/arm64/lithium-codegen-arm64.cc ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698