OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #include "src/crankshaft/hydrogen.h" | 5 #include "src/crankshaft/hydrogen.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <sstream> | 8 #include <sstream> |
9 | 9 |
10 #include "src/allocation-site-scopes.h" | 10 #include "src/allocation-site-scopes.h" |
(...skipping 5749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5760 mode = HLoadContextSlot::kNoCheck; | 5760 mode = HLoadContextSlot::kNoCheck; |
5761 break; | 5761 break; |
5762 } | 5762 } |
5763 HLoadContextSlot* instr = | 5763 HLoadContextSlot* instr = |
5764 new(zone()) HLoadContextSlot(context, variable->index(), mode); | 5764 new(zone()) HLoadContextSlot(context, variable->index(), mode); |
5765 return ast_context()->ReturnInstruction(instr, expr->id()); | 5765 return ast_context()->ReturnInstruction(instr, expr->id()); |
5766 } | 5766 } |
5767 | 5767 |
5768 case VariableLocation::LOOKUP: | 5768 case VariableLocation::LOOKUP: |
5769 return Bailout(kReferenceToAVariableWhichRequiresDynamicLookup); | 5769 return Bailout(kReferenceToAVariableWhichRequiresDynamicLookup); |
| 5770 |
| 5771 case VariableLocation::MODULE: |
| 5772 UNREACHABLE(); |
5770 } | 5773 } |
5771 } | 5774 } |
5772 | 5775 |
5773 | 5776 |
5774 void HOptimizedGraphBuilder::VisitLiteral(Literal* expr) { | 5777 void HOptimizedGraphBuilder::VisitLiteral(Literal* expr) { |
5775 DCHECK(!HasStackOverflow()); | 5778 DCHECK(!HasStackOverflow()); |
5776 DCHECK(current_block() != NULL); | 5779 DCHECK(current_block() != NULL); |
5777 DCHECK(current_block()->HasPredecessor()); | 5780 DCHECK(current_block()->HasPredecessor()); |
5778 HConstant* instr = New<HConstant>(expr->value()); | 5781 HConstant* instr = New<HConstant>(expr->value()); |
5779 return ast_context()->ReturnInstruction(instr, expr->id()); | 5782 return ast_context()->ReturnInstruction(instr, expr->id()); |
(...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7002 HStoreContextSlot* instr = Add<HStoreContextSlot>( | 7005 HStoreContextSlot* instr = Add<HStoreContextSlot>( |
7003 context, var->index(), mode, Top()); | 7006 context, var->index(), mode, Top()); |
7004 if (instr->HasObservableSideEffects()) { | 7007 if (instr->HasObservableSideEffects()) { |
7005 Add<HSimulate>(expr->AssignmentId(), REMOVABLE_SIMULATE); | 7008 Add<HSimulate>(expr->AssignmentId(), REMOVABLE_SIMULATE); |
7006 } | 7009 } |
7007 break; | 7010 break; |
7008 } | 7011 } |
7009 | 7012 |
7010 case VariableLocation::LOOKUP: | 7013 case VariableLocation::LOOKUP: |
7011 return Bailout(kCompoundAssignmentToLookupSlot); | 7014 return Bailout(kCompoundAssignmentToLookupSlot); |
| 7015 |
| 7016 case VariableLocation::MODULE: |
| 7017 UNREACHABLE(); |
7012 } | 7018 } |
7013 return ast_context()->ReturnValue(Pop()); | 7019 return ast_context()->ReturnValue(Pop()); |
7014 | 7020 |
7015 } else if (prop != NULL) { | 7021 } else if (prop != NULL) { |
7016 CHECK_ALIVE(VisitForValue(prop->obj())); | 7022 CHECK_ALIVE(VisitForValue(prop->obj())); |
7017 HValue* object = Top(); | 7023 HValue* object = Top(); |
7018 HValue* key = NULL; | 7024 HValue* key = NULL; |
7019 if (!prop->key()->IsPropertyName() || prop->IsStringAccess()) { | 7025 if (!prop->key()->IsPropertyName() || prop->IsStringAccess()) { |
7020 CHECK_ALIVE(VisitForValue(prop->key())); | 7026 CHECK_ALIVE(VisitForValue(prop->key())); |
7021 key = Top(); | 7027 key = Top(); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7150 HStoreContextSlot* instr = Add<HStoreContextSlot>( | 7156 HStoreContextSlot* instr = Add<HStoreContextSlot>( |
7151 context, var->index(), mode, Top()); | 7157 context, var->index(), mode, Top()); |
7152 if (instr->HasObservableSideEffects()) { | 7158 if (instr->HasObservableSideEffects()) { |
7153 Add<HSimulate>(expr->AssignmentId(), REMOVABLE_SIMULATE); | 7159 Add<HSimulate>(expr->AssignmentId(), REMOVABLE_SIMULATE); |
7154 } | 7160 } |
7155 return ast_context()->ReturnValue(Pop()); | 7161 return ast_context()->ReturnValue(Pop()); |
7156 } | 7162 } |
7157 | 7163 |
7158 case VariableLocation::LOOKUP: | 7164 case VariableLocation::LOOKUP: |
7159 return Bailout(kAssignmentToLOOKUPVariable); | 7165 return Bailout(kAssignmentToLOOKUPVariable); |
| 7166 |
| 7167 case VariableLocation::MODULE: |
| 7168 UNREACHABLE(); |
7160 } | 7169 } |
7161 } else { | 7170 } else { |
7162 return Bailout(kInvalidLeftHandSideInAssignment); | 7171 return Bailout(kInvalidLeftHandSideInAssignment); |
7163 } | 7172 } |
7164 } | 7173 } |
7165 | 7174 |
7166 | 7175 |
7167 void HOptimizedGraphBuilder::VisitYield(Yield* expr) { | 7176 void HOptimizedGraphBuilder::VisitYield(Yield* expr) { |
7168 // Generators are not optimized, so we should never get here. | 7177 // Generators are not optimized, so we should never get here. |
7169 UNREACHABLE(); | 7178 UNREACHABLE(); |
(...skipping 3626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10796 HStoreContextSlot* instr = Add<HStoreContextSlot>(context, var->index(), | 10805 HStoreContextSlot* instr = Add<HStoreContextSlot>(context, var->index(), |
10797 mode, after); | 10806 mode, after); |
10798 if (instr->HasObservableSideEffects()) { | 10807 if (instr->HasObservableSideEffects()) { |
10799 Add<HSimulate>(expr->AssignmentId(), REMOVABLE_SIMULATE); | 10808 Add<HSimulate>(expr->AssignmentId(), REMOVABLE_SIMULATE); |
10800 } | 10809 } |
10801 break; | 10810 break; |
10802 } | 10811 } |
10803 | 10812 |
10804 case VariableLocation::LOOKUP: | 10813 case VariableLocation::LOOKUP: |
10805 return Bailout(kLookupVariableInCountOperation); | 10814 return Bailout(kLookupVariableInCountOperation); |
| 10815 |
| 10816 case VariableLocation::MODULE: |
| 10817 UNREACHABLE(); |
10806 } | 10818 } |
10807 | 10819 |
10808 Drop(returns_original_input ? 2 : 1); | 10820 Drop(returns_original_input ? 2 : 1); |
10809 return ast_context()->ReturnValue(expr->is_postfix() ? input : after); | 10821 return ast_context()->ReturnValue(expr->is_postfix() ? input : after); |
10810 } | 10822 } |
10811 | 10823 |
10812 // Argument of the count operation is a property. | 10824 // Argument of the count operation is a property. |
10813 DCHECK(prop != NULL); | 10825 DCHECK(prop != NULL); |
10814 if (returns_original_input) Push(graph()->GetConstantUndefined()); | 10826 if (returns_original_input) Push(graph()->GetConstantUndefined()); |
10815 | 10827 |
(...skipping 1373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12189 HValue* context = environment()->context(); | 12201 HValue* context = environment()->context(); |
12190 HStoreContextSlot* store = Add<HStoreContextSlot>( | 12202 HStoreContextSlot* store = Add<HStoreContextSlot>( |
12191 context, variable->index(), HStoreContextSlot::kNoCheck, value); | 12203 context, variable->index(), HStoreContextSlot::kNoCheck, value); |
12192 if (store->HasObservableSideEffects()) { | 12204 if (store->HasObservableSideEffects()) { |
12193 Add<HSimulate>(proxy->id(), REMOVABLE_SIMULATE); | 12205 Add<HSimulate>(proxy->id(), REMOVABLE_SIMULATE); |
12194 } | 12206 } |
12195 } | 12207 } |
12196 break; | 12208 break; |
12197 case VariableLocation::LOOKUP: | 12209 case VariableLocation::LOOKUP: |
12198 return Bailout(kUnsupportedLookupSlotInDeclaration); | 12210 return Bailout(kUnsupportedLookupSlotInDeclaration); |
| 12211 case VariableLocation::MODULE: |
| 12212 UNREACHABLE(); |
12199 } | 12213 } |
12200 } | 12214 } |
12201 | 12215 |
12202 | 12216 |
12203 void HOptimizedGraphBuilder::VisitFunctionDeclaration( | 12217 void HOptimizedGraphBuilder::VisitFunctionDeclaration( |
12204 FunctionDeclaration* declaration) { | 12218 FunctionDeclaration* declaration) { |
12205 VariableProxy* proxy = declaration->proxy(); | 12219 VariableProxy* proxy = declaration->proxy(); |
12206 Variable* variable = proxy->var(); | 12220 Variable* variable = proxy->var(); |
12207 switch (variable->location()) { | 12221 switch (variable->location()) { |
12208 case VariableLocation::GLOBAL: | 12222 case VariableLocation::GLOBAL: |
(...skipping 21 matching lines...) Expand all Loading... |
12230 HValue* context = environment()->context(); | 12244 HValue* context = environment()->context(); |
12231 HStoreContextSlot* store = Add<HStoreContextSlot>( | 12245 HStoreContextSlot* store = Add<HStoreContextSlot>( |
12232 context, variable->index(), HStoreContextSlot::kNoCheck, value); | 12246 context, variable->index(), HStoreContextSlot::kNoCheck, value); |
12233 if (store->HasObservableSideEffects()) { | 12247 if (store->HasObservableSideEffects()) { |
12234 Add<HSimulate>(proxy->id(), REMOVABLE_SIMULATE); | 12248 Add<HSimulate>(proxy->id(), REMOVABLE_SIMULATE); |
12235 } | 12249 } |
12236 break; | 12250 break; |
12237 } | 12251 } |
12238 case VariableLocation::LOOKUP: | 12252 case VariableLocation::LOOKUP: |
12239 return Bailout(kUnsupportedLookupSlotInDeclaration); | 12253 return Bailout(kUnsupportedLookupSlotInDeclaration); |
| 12254 case VariableLocation::MODULE: |
| 12255 UNREACHABLE(); |
12240 } | 12256 } |
12241 } | 12257 } |
12242 | 12258 |
12243 | 12259 |
12244 void HOptimizedGraphBuilder::VisitRewritableExpression( | 12260 void HOptimizedGraphBuilder::VisitRewritableExpression( |
12245 RewritableExpression* node) { | 12261 RewritableExpression* node) { |
12246 CHECK_ALIVE(Visit(node->expression())); | 12262 CHECK_ALIVE(Visit(node->expression())); |
12247 } | 12263 } |
12248 | 12264 |
12249 | 12265 |
(...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13421 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13437 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
13422 } | 13438 } |
13423 | 13439 |
13424 #ifdef DEBUG | 13440 #ifdef DEBUG |
13425 graph_->Verify(false); // No full verify. | 13441 graph_->Verify(false); // No full verify. |
13426 #endif | 13442 #endif |
13427 } | 13443 } |
13428 | 13444 |
13429 } // namespace internal | 13445 } // namespace internal |
13430 } // namespace v8 | 13446 } // namespace v8 |
OLD | NEW |