From 3ce397f975674fc73c4ef2cf15a0ed8a548db6e7 Mon Sep 17 00:00:00 2001 From: "svenpanne@chromium.org" Date: Thu, 28 Jul 2011 14:56:08 +0000 Subject: [PATCH] Optimization: Do not assign an environment to LBranch when are sure that we will never deopt later. Review URL: http://codereview.chromium.org/7524025 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8760 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/ia32/lithium-ia32.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc index fbeb42b..07867c7 100644 --- a/src/ia32/lithium-ia32.cc +++ b/src/ia32/lithium-ia32.cc @@ -1042,9 +1042,15 @@ LInstruction* LChunkBuilder::DoBranch(HBranch* instr) { return new LGoto(successor->block_id()); } ToBooleanStub::Types expected = instr->expected_input_types(); + // We need a temporary register when we have to access the map *or* we have + // no type info yet, in which case we handle all cases (including the ones + // involving maps). bool needs_temp = expected.NeedsMap() || expected.IsEmpty(); LOperand* temp = needs_temp ? TempRegister() : NULL; - return AssignEnvironment(new LBranch(UseRegister(v), temp)); + LInstruction* branch = new LBranch(UseRegister(v), temp); + // When we handle all cases, we never deopt, so we don't need to assign the + // environment then. + return expected.IsAll() ? branch : AssignEnvironment(branch); } -- 2.7.4