| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 9175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9186 int left_position, | 9186 int left_position, |
| 9187 int right_position, | 9187 int right_position, |
| 9188 BailoutId bailout_id) { | 9188 BailoutId bailout_id) { |
| 9189 Representation left_rep = Representation::FromType(left_type); | 9189 Representation left_rep = Representation::FromType(left_type); |
| 9190 Representation right_rep = Representation::FromType(right_type); | 9190 Representation right_rep = Representation::FromType(right_type); |
| 9191 Representation combined_rep = Representation::FromType(combined_type); | 9191 Representation combined_rep = Representation::FromType(combined_type); |
| 9192 | 9192 |
| 9193 if (combined_type->Is(Type::Receiver())) { | 9193 if (combined_type->Is(Type::Receiver())) { |
| 9194 if (Token::IsEqualityOp(op)) { | 9194 if (Token::IsEqualityOp(op)) { |
| 9195 // Can we get away with map check and not instance type check? | 9195 // Can we get away with map check and not instance type check? |
| 9196 HValue* operand_to_check = |
| 9197 left->block()->block_id() < right->block()->block_id() ? left : right; |
| 9196 if (combined_type->IsClass()) { | 9198 if (combined_type->IsClass()) { |
| 9197 Handle<Map> map = combined_type->AsClass(); | 9199 Handle<Map> map = combined_type->AsClass(); |
| 9198 AddCheckMap(left, map); | 9200 AddCheckMap(operand_to_check, map); |
| 9199 AddCheckMap(right, map); | |
| 9200 HCompareObjectEqAndBranch* result = | 9201 HCompareObjectEqAndBranch* result = |
| 9201 New<HCompareObjectEqAndBranch>(left, right); | 9202 New<HCompareObjectEqAndBranch>(left, right); |
| 9202 if (FLAG_emit_opt_code_positions) { | 9203 if (FLAG_emit_opt_code_positions) { |
| 9203 result->set_operand_position(zone(), 0, left_position); | 9204 result->set_operand_position(zone(), 0, left_position); |
| 9204 result->set_operand_position(zone(), 1, right_position); | 9205 result->set_operand_position(zone(), 1, right_position); |
| 9205 } | 9206 } |
| 9206 return result; | 9207 return result; |
| 9207 } else { | 9208 } else { |
| 9208 BuildCheckHeapObject(left); | 9209 BuildCheckHeapObject(operand_to_check); |
| 9209 Add<HCheckInstanceType>(left, HCheckInstanceType::IS_SPEC_OBJECT); | 9210 Add<HCheckInstanceType>(operand_to_check, |
| 9210 BuildCheckHeapObject(right); | 9211 HCheckInstanceType::IS_SPEC_OBJECT); |
| 9211 Add<HCheckInstanceType>(right, HCheckInstanceType::IS_SPEC_OBJECT); | |
| 9212 HCompareObjectEqAndBranch* result = | 9212 HCompareObjectEqAndBranch* result = |
| 9213 New<HCompareObjectEqAndBranch>(left, right); | 9213 New<HCompareObjectEqAndBranch>(left, right); |
| 9214 return result; | 9214 return result; |
| 9215 } | 9215 } |
| 9216 } else { | 9216 } else { |
| 9217 Bailout(kUnsupportedNonPrimitiveCompare); | 9217 Bailout(kUnsupportedNonPrimitiveCompare); |
| 9218 return NULL; | 9218 return NULL; |
| 9219 } | 9219 } |
| 9220 } else if (combined_type->Is(Type::InternalizedString()) && | 9220 } else if (combined_type->Is(Type::InternalizedString()) && |
| 9221 Token::IsEqualityOp(op)) { | 9221 Token::IsEqualityOp(op)) { |
| (...skipping 1555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10777 if (ShouldProduceTraceOutput()) { | 10777 if (ShouldProduceTraceOutput()) { |
| 10778 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 10778 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
| 10779 } | 10779 } |
| 10780 | 10780 |
| 10781 #ifdef DEBUG | 10781 #ifdef DEBUG |
| 10782 graph_->Verify(false); // No full verify. | 10782 graph_->Verify(false); // No full verify. |
| 10783 #endif | 10783 #endif |
| 10784 } | 10784 } |
| 10785 | 10785 |
| 10786 } } // namespace v8::internal | 10786 } } // namespace v8::internal |
| OLD | NEW |