Bug 865883. (r=jandem)
authorShu-yu Guo <shu@rfrn.org>
Thu, 02 May 2013 14:12:15 -0700
changeset 141627 10c6814d775e84443a7c7418d12321b2c32ff74e
parent 141626 19c4bcde66f10ba5b6a407fed71361f9b0300bdc
child 141628 f47c18bd70e37cb9504e63252382d41fa925552a
push id2579
push userakeybl@mozilla.com
push dateMon, 24 Jun 2013 18:52:47 +0000
treeherdermozilla-beta@b69b7de8a05a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjandem
bugs865883
milestone23.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 865883. (r=jandem)
js/src/ion/LinearScan.cpp
js/src/ion/LinearScan.h
--- a/js/src/ion/LinearScan.cpp
+++ b/js/src/ion/LinearScan.cpp
@@ -730,18 +730,22 @@ LinearScanAllocator::assign(LAllocation 
 }
 
 uint32_t
 LinearScanAllocator::allocateSlotFor(const LiveInterval *interval)
 {
     LinearScanVirtualRegister *reg = &vregs[interval->vreg()];
 
     SlotList *freed;
-    if (reg->type() == LDefinition::DOUBLE || IsNunbox(reg))
+    if (reg->type() == LDefinition::DOUBLE)
         freed = &finishedDoubleSlots_;
+#ifdef JS_NUNBOX32
+    else if (IsNunbox(reg))
+        freed = &finishedNunboxSlots_;
+#endif
     else
         freed = &finishedSlots_;
 
     if (!freed->empty()) {
         LiveInterval *maybeDead = freed->back();
         if (maybeDead->end() < reg->getInterval(0)->start()) {
             // This spill slot is dead before the start of the interval trying
             // to reuse the slot, so reuse is safe. Otherwise, we could
@@ -836,17 +840,17 @@ LinearScanAllocator::freeAllocation(Live
 
         JS_ASSERT_IF(mine->canonicalSpill() && other->canonicalSpill(),
                      mine->canonicalSpill()->isStackSlot() == other->canonicalSpill()->isStackSlot());
 
         LinearScanVirtualRegister *candidate = mine->canonicalSpill() ? mine : other;
         if (!candidate->canonicalSpill()->isStackSlot())
             return;
 
-        finishedDoubleSlots_.append(candidate->lastInterval());
+        finishedNunboxSlots_.append(candidate->lastInterval());
     }
 #endif
 }
 
 void
 LinearScanAllocator::finishInterval(LiveInterval *interval)
 {
     LAllocation *alloc = interval->getAllocation();
--- a/js/src/ion/LinearScan.h
+++ b/js/src/ion/LinearScan.h
@@ -75,16 +75,19 @@ class LinearScanAllocator : public LiveR
         void assertSorted();
 
         LiveInterval *dequeue();
     };
 
     typedef Vector<LiveInterval *, 0, SystemAllocPolicy> SlotList;
     SlotList finishedSlots_;
     SlotList finishedDoubleSlots_;
+#ifdef JS_NUNBOX32
+    SlotList finishedNunboxSlots_;
+#endif
 
     // Run-time state
     UnhandledQueue unhandled;
     InlineList<LiveInterval> active;
     InlineList<LiveInterval> inactive;
     InlineList<LiveInterval> fixed;
     InlineList<LiveInterval> handled;
     LiveInterval *current;