Make sure polymorphic element access creates non-replaying phis.
authormstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 9 Aug 2013 15:23:15 +0000 (15:23 +0000)
committermstarzinger@chromium.org <mstarzinger@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 9 Aug 2013 15:23:15 +0000 (15:23 +0000)
R=danno@chromium.org
BUG=v8:2815

Review URL: https://codereview.chromium.org/22589005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16136 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/arm/lithium-arm.cc
src/hydrogen.cc
src/ia32/lithium-ia32.cc
src/mips/lithium-mips.cc
src/x64/lithium-x64.cc

index 6060ef2..4363197 100644 (file)
@@ -815,11 +815,7 @@ void LChunkBuilder::DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block) {
     HEnvironment* last_environment = pred->last_environment();
     for (int i = 0; i < block->phis()->length(); ++i) {
       HPhi* phi = block->phis()->at(i);
-      // TODO(mstarzinger): The length check below should actually not
-      // be necessary, but some array stubs already rely on it. This
-      // should be investigated and fixed.
-      if (phi->HasMergedIndex() &&
-          phi->merged_index() < last_environment->length()) {
+      if (phi->HasMergedIndex()) {
         last_environment->SetValueAt(phi->merged_index(), phi);
       }
     }
index e5af9f8..f90dc0b 100644 (file)
@@ -5701,6 +5701,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
     if (!is_store) {
       Push(access);
     }
+    NoObservableSideEffectsScope scope(this);
     current_block()->GotoNoSimulate(join);
     set_current_block(other_map);
   }
index 323cd72..65637b4 100644 (file)
@@ -870,11 +870,7 @@ void LChunkBuilder::DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block) {
     HEnvironment* last_environment = pred->last_environment();
     for (int i = 0; i < block->phis()->length(); ++i) {
       HPhi* phi = block->phis()->at(i);
-      // TODO(mstarzinger): The length check below should actually not
-      // be necessary, but some array stubs already rely on it. This
-      // should be investigated and fixed.
-      if (phi->HasMergedIndex() &&
-          phi->merged_index() < last_environment->length()) {
+      if (phi->HasMergedIndex()) {
         last_environment->SetValueAt(phi->merged_index(), phi);
       }
     }
index 09ec478..fa415e5 100644 (file)
@@ -820,11 +820,7 @@ void LChunkBuilder::DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block) {
     HEnvironment* last_environment = pred->last_environment();
     for (int i = 0; i < block->phis()->length(); ++i) {
       HPhi* phi = block->phis()->at(i);
-      // TODO(mstarzinger): The length check below should actually not
-      // be necessary, but some array stubs already rely on it. This
-      // should be investigated and fixed.
-      if (phi->HasMergedIndex() &&
-          phi->merged_index() < last_environment->length()) {
+      if (phi->HasMergedIndex()) {
         last_environment->SetValueAt(phi->merged_index(), phi);
       }
     }
index ac372b6..1b1de34 100644 (file)
@@ -814,11 +814,7 @@ void LChunkBuilder::DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block) {
     HEnvironment* last_environment = pred->last_environment();
     for (int i = 0; i < block->phis()->length(); ++i) {
       HPhi* phi = block->phis()->at(i);
-      // TODO(mstarzinger): The length check below should actually not
-      // be necessary, but some array stubs already rely on it. This
-      // should be investigated and fixed.
-      if (phi->HasMergedIndex() &&
-          phi->merged_index() < last_environment->length()) {
+      if (phi->HasMergedIndex()) {
         last_environment->SetValueAt(phi->merged_index(), phi);
       }
     }