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 2534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2545 case Token::NE: | 2545 case Token::NE: |
2546 op = javascript()->NotEqual(); | 2546 op = javascript()->NotEqual(); |
2547 break; | 2547 break; |
2548 case Token::EQ_STRICT: | 2548 case Token::EQ_STRICT: |
2549 op = javascript()->StrictEqual(); | 2549 op = javascript()->StrictEqual(); |
2550 break; | 2550 break; |
2551 case Token::NE_STRICT: | 2551 case Token::NE_STRICT: |
2552 op = javascript()->StrictNotEqual(); | 2552 op = javascript()->StrictNotEqual(); |
2553 break; | 2553 break; |
2554 case Token::LT: | 2554 case Token::LT: |
2555 op = javascript()->LessThan(language_mode()); | 2555 op = javascript()->LessThan(strength(language_mode())); |
2556 break; | 2556 break; |
2557 case Token::GT: | 2557 case Token::GT: |
2558 op = javascript()->GreaterThan(language_mode()); | 2558 op = javascript()->GreaterThan(strength(language_mode())); |
2559 break; | 2559 break; |
2560 case Token::LTE: | 2560 case Token::LTE: |
2561 op = javascript()->LessThanOrEqual(language_mode()); | 2561 op = javascript()->LessThanOrEqual(strength(language_mode())); |
2562 break; | 2562 break; |
2563 case Token::GTE: | 2563 case Token::GTE: |
2564 op = javascript()->GreaterThanOrEqual(language_mode()); | 2564 op = javascript()->GreaterThanOrEqual(strength(language_mode())); |
2565 break; | 2565 break; |
2566 case Token::INSTANCEOF: | 2566 case Token::INSTANCEOF: |
2567 op = javascript()->InstanceOf(); | 2567 op = javascript()->InstanceOf(); |
2568 break; | 2568 break; |
2569 case Token::IN: | 2569 case Token::IN: |
2570 op = javascript()->HasProperty(); | 2570 op = javascript()->HasProperty(); |
2571 break; | 2571 break; |
2572 default: | 2572 default: |
2573 op = NULL; | 2573 op = NULL; |
2574 UNREACHABLE(); | 2574 UNREACHABLE(); |
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3412 Node* AstGraphBuilder::BuildThrow(Node* exception_value) { | 3412 Node* AstGraphBuilder::BuildThrow(Node* exception_value) { |
3413 NewNode(javascript()->CallRuntime(Runtime::kReThrow, 1), exception_value); | 3413 NewNode(javascript()->CallRuntime(Runtime::kReThrow, 1), exception_value); |
3414 Node* control = NewNode(common()->Throw(), exception_value); | 3414 Node* control = NewNode(common()->Throw(), exception_value); |
3415 UpdateControlDependencyToLeaveFunction(control); | 3415 UpdateControlDependencyToLeaveFunction(control); |
3416 return control; | 3416 return control; |
3417 } | 3417 } |
3418 | 3418 |
3419 | 3419 |
3420 Node* AstGraphBuilder::BuildBinaryOp(Node* left, Node* right, Token::Value op) { | 3420 Node* AstGraphBuilder::BuildBinaryOp(Node* left, Node* right, Token::Value op) { |
3421 const Operator* js_op; | 3421 const Operator* js_op; |
| 3422 Strength op_strength = strength(language_mode()); |
3422 switch (op) { | 3423 switch (op) { |
3423 case Token::BIT_OR: | 3424 case Token::BIT_OR: |
3424 js_op = javascript()->BitwiseOr(language_mode()); | 3425 js_op = javascript()->BitwiseOr(op_strength); |
3425 break; | 3426 break; |
3426 case Token::BIT_AND: | 3427 case Token::BIT_AND: |
3427 js_op = javascript()->BitwiseAnd(language_mode()); | 3428 js_op = javascript()->BitwiseAnd(op_strength); |
3428 break; | 3429 break; |
3429 case Token::BIT_XOR: | 3430 case Token::BIT_XOR: |
3430 js_op = javascript()->BitwiseXor(language_mode()); | 3431 js_op = javascript()->BitwiseXor(op_strength); |
3431 break; | 3432 break; |
3432 case Token::SHL: | 3433 case Token::SHL: |
3433 js_op = javascript()->ShiftLeft(language_mode()); | 3434 js_op = javascript()->ShiftLeft(op_strength); |
3434 break; | 3435 break; |
3435 case Token::SAR: | 3436 case Token::SAR: |
3436 js_op = javascript()->ShiftRight(language_mode()); | 3437 js_op = javascript()->ShiftRight(op_strength); |
3437 break; | 3438 break; |
3438 case Token::SHR: | 3439 case Token::SHR: |
3439 js_op = javascript()->ShiftRightLogical(language_mode()); | 3440 js_op = javascript()->ShiftRightLogical(op_strength); |
3440 break; | 3441 break; |
3441 case Token::ADD: | 3442 case Token::ADD: |
3442 js_op = javascript()->Add(language_mode()); | 3443 js_op = javascript()->Add(op_strength); |
3443 break; | 3444 break; |
3444 case Token::SUB: | 3445 case Token::SUB: |
3445 js_op = javascript()->Subtract(language_mode()); | 3446 js_op = javascript()->Subtract(op_strength); |
3446 break; | 3447 break; |
3447 case Token::MUL: | 3448 case Token::MUL: |
3448 js_op = javascript()->Multiply(language_mode()); | 3449 js_op = javascript()->Multiply(op_strength); |
3449 break; | 3450 break; |
3450 case Token::DIV: | 3451 case Token::DIV: |
3451 js_op = javascript()->Divide(language_mode()); | 3452 js_op = javascript()->Divide(op_strength); |
3452 break; | 3453 break; |
3453 case Token::MOD: | 3454 case Token::MOD: |
3454 js_op = javascript()->Modulus(language_mode()); | 3455 js_op = javascript()->Modulus(op_strength); |
3455 break; | 3456 break; |
3456 default: | 3457 default: |
3457 UNREACHABLE(); | 3458 UNREACHABLE(); |
3458 js_op = NULL; | 3459 js_op = NULL; |
3459 } | 3460 } |
3460 return NewNode(js_op, left, right); | 3461 return NewNode(js_op, left, right); |
3461 } | 3462 } |
3462 | 3463 |
3463 | 3464 |
3464 bool AstGraphBuilder::CheckOsrEntry(IterationStatement* stmt) { | 3465 bool AstGraphBuilder::CheckOsrEntry(IterationStatement* stmt) { |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3791 // Phi does not exist yet, introduce one. | 3792 // Phi does not exist yet, introduce one. |
3792 value = NewPhi(inputs, value, control); | 3793 value = NewPhi(inputs, value, control); |
3793 value->ReplaceInput(inputs - 1, other); | 3794 value->ReplaceInput(inputs - 1, other); |
3794 } | 3795 } |
3795 return value; | 3796 return value; |
3796 } | 3797 } |
3797 | 3798 |
3798 } // namespace compiler | 3799 } // namespace compiler |
3799 } // namespace internal | 3800 } // namespace internal |
3800 } // namespace v8 | 3801 } // namespace v8 |
OLD | NEW |