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/hydrogen.h" | 5 #include "src/hydrogen.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/allocation-site-scopes.h" | 9 #include "src/allocation-site-scopes.h" |
10 #include "src/ast-numbering.h" | 10 #include "src/ast-numbering.h" |
(...skipping 11632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11643 New<HCompareObjectEqAndBranch>(left, right); | 11643 New<HCompareObjectEqAndBranch>(left, right); |
11644 return result; | 11644 return result; |
11645 } else if (combined_type->Is(Type::String())) { | 11645 } else if (combined_type->Is(Type::String())) { |
11646 BuildCheckHeapObject(left); | 11646 BuildCheckHeapObject(left); |
11647 Add<HCheckInstanceType>(left, HCheckInstanceType::IS_STRING); | 11647 Add<HCheckInstanceType>(left, HCheckInstanceType::IS_STRING); |
11648 BuildCheckHeapObject(right); | 11648 BuildCheckHeapObject(right); |
11649 Add<HCheckInstanceType>(right, HCheckInstanceType::IS_STRING); | 11649 Add<HCheckInstanceType>(right, HCheckInstanceType::IS_STRING); |
11650 HStringCompareAndBranch* result = | 11650 HStringCompareAndBranch* result = |
11651 New<HStringCompareAndBranch>(left, right, op); | 11651 New<HStringCompareAndBranch>(left, right, op); |
11652 return result; | 11652 return result; |
| 11653 } else if (combined_type->Is(Type::Boolean())) { |
| 11654 AddCheckMap(left, isolate()->factory()->boolean_map()); |
| 11655 AddCheckMap(right, isolate()->factory()->boolean_map()); |
| 11656 if (Token::IsEqualityOp(op)) { |
| 11657 HCompareObjectEqAndBranch* result = |
| 11658 New<HCompareObjectEqAndBranch>(left, right); |
| 11659 return result; |
| 11660 } |
| 11661 left = Add<HLoadNamedField>( |
| 11662 left, nullptr, |
| 11663 HObjectAccess::ForOddballToNumber(Representation::Smi())); |
| 11664 right = Add<HLoadNamedField>( |
| 11665 right, nullptr, |
| 11666 HObjectAccess::ForOddballToNumber(Representation::Smi())); |
| 11667 HCompareNumericAndBranch* result = |
| 11668 New<HCompareNumericAndBranch>(left, right, op); |
| 11669 return result; |
11653 } else { | 11670 } else { |
11654 if (combined_rep.IsTagged() || combined_rep.IsNone()) { | 11671 if (combined_rep.IsTagged() || combined_rep.IsNone()) { |
11655 HCompareGeneric* result = Add<HCompareGeneric>( | 11672 HCompareGeneric* result = Add<HCompareGeneric>( |
11656 left, right, op, strength(function_language_mode())); | 11673 left, right, op, strength(function_language_mode())); |
11657 result->set_observed_input_representation(1, left_rep); | 11674 result->set_observed_input_representation(1, left_rep); |
11658 result->set_observed_input_representation(2, right_rep); | 11675 result->set_observed_input_representation(2, right_rep); |
11659 if (result->HasObservableSideEffects()) { | 11676 if (result->HasObservableSideEffects()) { |
11660 if (push_sim_result == PUSH_BEFORE_SIMULATE) { | 11677 if (push_sim_result == PUSH_BEFORE_SIMULATE) { |
11661 Push(result); | 11678 Push(result); |
11662 AddSimulate(bailout_id, REMOVABLE_SIMULATE); | 11679 AddSimulate(bailout_id, REMOVABLE_SIMULATE); |
(...skipping 1940 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13603 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13620 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
13604 } | 13621 } |
13605 | 13622 |
13606 #ifdef DEBUG | 13623 #ifdef DEBUG |
13607 graph_->Verify(false); // No full verify. | 13624 graph_->Verify(false); // No full verify. |
13608 #endif | 13625 #endif |
13609 } | 13626 } |
13610 | 13627 |
13611 } // namespace internal | 13628 } // namespace internal |
13612 } // namespace v8 | 13629 } // namespace v8 |
OLD | NEW |