OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/compiler/ast-graph-builder.h" | 5 #include "src/compiler/ast-graph-builder.h" |
6 | 6 |
7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
8 #include "src/compiler/ast-loop-assignment-analyzer.h" | 8 #include "src/compiler/ast-loop-assignment-analyzer.h" |
9 #include "src/compiler/control-builders.h" | 9 #include "src/compiler/control-builders.h" |
10 #include "src/compiler/js-type-feedback.h" | 10 #include "src/compiler/js-type-feedback.h" |
(...skipping 2529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2540 case Token::NE: | 2540 case Token::NE: |
2541 op = javascript()->NotEqual(); | 2541 op = javascript()->NotEqual(); |
2542 break; | 2542 break; |
2543 case Token::EQ_STRICT: | 2543 case Token::EQ_STRICT: |
2544 op = javascript()->StrictEqual(); | 2544 op = javascript()->StrictEqual(); |
2545 break; | 2545 break; |
2546 case Token::NE_STRICT: | 2546 case Token::NE_STRICT: |
2547 op = javascript()->StrictNotEqual(); | 2547 op = javascript()->StrictNotEqual(); |
2548 break; | 2548 break; |
2549 case Token::LT: | 2549 case Token::LT: |
2550 op = javascript()->LessThan(language_mode()); | 2550 op = javascript()->LessThan(strength(language_mode())); |
2551 break; | 2551 break; |
2552 case Token::GT: | 2552 case Token::GT: |
2553 op = javascript()->GreaterThan(language_mode()); | 2553 op = javascript()->GreaterThan(strength(language_mode())); |
2554 break; | 2554 break; |
2555 case Token::LTE: | 2555 case Token::LTE: |
2556 op = javascript()->LessThanOrEqual(language_mode()); | 2556 op = javascript()->LessThanOrEqual(strength(language_mode())); |
2557 break; | 2557 break; |
2558 case Token::GTE: | 2558 case Token::GTE: |
2559 op = javascript()->GreaterThanOrEqual(language_mode()); | 2559 op = javascript()->GreaterThanOrEqual(strength(language_mode())); |
2560 break; | 2560 break; |
2561 case Token::INSTANCEOF: | 2561 case Token::INSTANCEOF: |
2562 op = javascript()->InstanceOf(); | 2562 op = javascript()->InstanceOf(); |
2563 break; | 2563 break; |
2564 case Token::IN: | 2564 case Token::IN: |
2565 op = javascript()->HasProperty(); | 2565 op = javascript()->HasProperty(); |
2566 break; | 2566 break; |
2567 default: | 2567 default: |
2568 op = NULL; | 2568 op = NULL; |
2569 UNREACHABLE(); | 2569 UNREACHABLE(); |
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3407 Node* AstGraphBuilder::BuildThrow(Node* exception_value) { | 3407 Node* AstGraphBuilder::BuildThrow(Node* exception_value) { |
3408 NewNode(javascript()->CallRuntime(Runtime::kReThrow, 1), exception_value); | 3408 NewNode(javascript()->CallRuntime(Runtime::kReThrow, 1), exception_value); |
3409 Node* control = NewNode(common()->Throw(), exception_value); | 3409 Node* control = NewNode(common()->Throw(), exception_value); |
3410 UpdateControlDependencyToLeaveFunction(control); | 3410 UpdateControlDependencyToLeaveFunction(control); |
3411 return control; | 3411 return control; |
3412 } | 3412 } |
3413 | 3413 |
3414 | 3414 |
3415 Node* AstGraphBuilder::BuildBinaryOp(Node* left, Node* right, Token::Value op) { | 3415 Node* AstGraphBuilder::BuildBinaryOp(Node* left, Node* right, Token::Value op) { |
3416 const Operator* js_op; | 3416 const Operator* js_op; |
| 3417 Strength op_strength = strength(language_mode()); |
3417 switch (op) { | 3418 switch (op) { |
3418 case Token::BIT_OR: | 3419 case Token::BIT_OR: |
3419 js_op = javascript()->BitwiseOr(language_mode()); | 3420 js_op = javascript()->BitwiseOr(op_strength); |
3420 break; | 3421 break; |
3421 case Token::BIT_AND: | 3422 case Token::BIT_AND: |
3422 js_op = javascript()->BitwiseAnd(language_mode()); | 3423 js_op = javascript()->BitwiseAnd(op_strength); |
3423 break; | 3424 break; |
3424 case Token::BIT_XOR: | 3425 case Token::BIT_XOR: |
3425 js_op = javascript()->BitwiseXor(language_mode()); | 3426 js_op = javascript()->BitwiseXor(op_strength); |
3426 break; | 3427 break; |
3427 case Token::SHL: | 3428 case Token::SHL: |
3428 js_op = javascript()->ShiftLeft(language_mode()); | 3429 js_op = javascript()->ShiftLeft(op_strength); |
3429 break; | 3430 break; |
3430 case Token::SAR: | 3431 case Token::SAR: |
3431 js_op = javascript()->ShiftRight(language_mode()); | 3432 js_op = javascript()->ShiftRight(op_strength); |
3432 break; | 3433 break; |
3433 case Token::SHR: | 3434 case Token::SHR: |
3434 js_op = javascript()->ShiftRightLogical(language_mode()); | 3435 js_op = javascript()->ShiftRightLogical(op_strength); |
3435 break; | 3436 break; |
3436 case Token::ADD: | 3437 case Token::ADD: |
3437 js_op = javascript()->Add(language_mode()); | 3438 js_op = javascript()->Add(op_strength); |
3438 break; | 3439 break; |
3439 case Token::SUB: | 3440 case Token::SUB: |
3440 js_op = javascript()->Subtract(language_mode()); | 3441 js_op = javascript()->Subtract(op_strength); |
3441 break; | 3442 break; |
3442 case Token::MUL: | 3443 case Token::MUL: |
3443 js_op = javascript()->Multiply(language_mode()); | 3444 js_op = javascript()->Multiply(op_strength); |
3444 break; | 3445 break; |
3445 case Token::DIV: | 3446 case Token::DIV: |
3446 js_op = javascript()->Divide(language_mode()); | 3447 js_op = javascript()->Divide(op_strength); |
3447 break; | 3448 break; |
3448 case Token::MOD: | 3449 case Token::MOD: |
3449 js_op = javascript()->Modulus(language_mode()); | 3450 js_op = javascript()->Modulus(op_strength); |
3450 break; | 3451 break; |
3451 default: | 3452 default: |
3452 UNREACHABLE(); | 3453 UNREACHABLE(); |
3453 js_op = NULL; | 3454 js_op = NULL; |
3454 } | 3455 } |
3455 return NewNode(js_op, left, right); | 3456 return NewNode(js_op, left, right); |
3456 } | 3457 } |
3457 | 3458 |
3458 | 3459 |
3459 bool AstGraphBuilder::CheckOsrEntry(IterationStatement* stmt) { | 3460 bool AstGraphBuilder::CheckOsrEntry(IterationStatement* stmt) { |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3786 // Phi does not exist yet, introduce one. | 3787 // Phi does not exist yet, introduce one. |
3787 value = NewPhi(inputs, value, control); | 3788 value = NewPhi(inputs, value, control); |
3788 value->ReplaceInput(inputs - 1, other); | 3789 value->ReplaceInput(inputs - 1, other); |
3789 } | 3790 } |
3790 return value; | 3791 return value; |
3791 } | 3792 } |
3792 | 3793 |
3793 } // namespace compiler | 3794 } // namespace compiler |
3794 } // namespace internal | 3795 } // namespace internal |
3795 } // namespace v8 | 3796 } // namespace v8 |
OLD | NEW |