From 8683920e3ffa05b2fb66ef075734a2565e9a6e09 Mon Sep 17 00:00:00 2001 From: "danno@chromium.org" Date: Wed, 18 Dec 2013 17:18:23 +0000 Subject: [PATCH] Improve ==/=== comparison in Hydrogen for monomorphic maps R=titzer@chromium.org Review URL: https://codereview.chromium.org/108083004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18357 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hydrogen.cc b/src/hydrogen.cc index b3549f5..339a623 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -9193,10 +9193,11 @@ HControlInstruction* HOptimizedGraphBuilder::BuildCompareInstruction( if (combined_type->Is(Type::Receiver())) { if (Token::IsEqualityOp(op)) { // Can we get away with map check and not instance type check? + HValue* operand_to_check = + left->block()->block_id() < right->block()->block_id() ? left : right; if (combined_type->IsClass()) { Handle map = combined_type->AsClass(); - AddCheckMap(left, map); - AddCheckMap(right, map); + AddCheckMap(operand_to_check, map); HCompareObjectEqAndBranch* result = New(left, right); if (FLAG_emit_opt_code_positions) { @@ -9205,10 +9206,9 @@ HControlInstruction* HOptimizedGraphBuilder::BuildCompareInstruction( } return result; } else { - BuildCheckHeapObject(left); - Add(left, HCheckInstanceType::IS_SPEC_OBJECT); - BuildCheckHeapObject(right); - Add(right, HCheckInstanceType::IS_SPEC_OBJECT); + BuildCheckHeapObject(operand_to_check); + Add(operand_to_check, + HCheckInstanceType::IS_SPEC_OBJECT); HCompareObjectEqAndBranch* result = New(left, right); return result; -- 2.7.4