Title: [215644] trunk/Source/_javascript_Core
Revision
215644
Author
sbar...@apple.com
Date
2017-04-21 14:45:12 -0700 (Fri, 21 Apr 2017)

Log Message

SharedArrayBuffer-opt.js fails with Briggs
https://bugs.webkit.org/show_bug.cgi?id=170948
<rdar://problem/31740568>

Reviewed by Michael Saboff.

The bug was not actually with Briggs, but instead was with
our X86-64 MacroAssembler. Michael fixed the bug here:
https://trac.webkit.org/changeset/215618/webkit

The issue was we weren't adding the REX byte for AtomicXchg8,
leading to the incorrect encoding for the result register depending
on which register it was. If you look at this code, you'll see the issue:

  Int32 @38 = AtomicXchg(@59, @64, width = 8, range = 0, fenceRange = 0, ControlDependent|Fence|Writes:0|Reads:0, DFG:@49)
      AtomicXchg8 %rsi, (%rax,%rdx), @38
          0x2dcb5bc0015e: lock xchg %dh, (%rax,%rdx)
  Int32 @66 = Const32(255, DFG:@49)
  Int32 @67 = BitAnd(@38, $255(@66), DFG:@49)
      ZeroExtend8To32 %rsi, %rax, @67
          0x2dcb5bc00162: movzx %sil, %eax

Air thought the result was in the lower 8 bits of %rsi,
however, the code we emitted stored it in the [8-15] bits
of %rdx. Since this issue is fixed, I'm turning Briggs back
on.

* b3/air/AirAllocateRegistersByGraphColoring.h:
(JSC::B3::Air::useIRC):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (215643 => 215644)


--- trunk/Source/_javascript_Core/ChangeLog	2017-04-21 21:43:40 UTC (rev 215643)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-04-21 21:45:12 UTC (rev 215644)
@@ -1,3 +1,35 @@
+2017-04-21  Saam Barati  <sbar...@apple.com>
+
+        SharedArrayBuffer-opt.js fails with Briggs
+        https://bugs.webkit.org/show_bug.cgi?id=170948
+        <rdar://problem/31740568>
+
+        Reviewed by Michael Saboff.
+
+        The bug was not actually with Briggs, but instead was with
+        our X86-64 MacroAssembler. Michael fixed the bug here:
+        https://trac.webkit.org/changeset/215618/webkit
+        
+        The issue was we weren't adding the REX byte for AtomicXchg8,
+        leading to the incorrect encoding for the result register depending
+        on which register it was. If you look at this code, you'll see the issue:
+
+          Int32 @38 = AtomicXchg(@59, @64, width = 8, range = 0, fenceRange = 0, ControlDependent|Fence|Writes:0|Reads:0, DFG:@49)
+              AtomicXchg8 %rsi, (%rax,%rdx), @38
+                  0x2dcb5bc0015e: lock xchg %dh, (%rax,%rdx)
+          Int32 @66 = Const32(255, DFG:@49)
+          Int32 @67 = BitAnd(@38, $255(@66), DFG:@49)
+              ZeroExtend8To32 %rsi, %rax, @67
+                  0x2dcb5bc00162: movzx %sil, %eax
+
+        Air thought the result was in the lower 8 bits of %rsi,
+        however, the code we emitted stored it in the [8-15] bits
+        of %rdx. Since this issue is fixed, I'm turning Briggs back
+        on.
+
+        * b3/air/AirAllocateRegistersByGraphColoring.h:
+        (JSC::B3::Air::useIRC):
+
 2017-04-20  Mark Lam  <mark....@apple.com>
 
         Refactor MASM probe to allow printing of custom types.

Modified: trunk/Source/_javascript_Core/b3/air/AirAllocateRegistersByGraphColoring.h (215643 => 215644)


--- trunk/Source/_javascript_Core/b3/air/AirAllocateRegistersByGraphColoring.h	2017-04-21 21:43:40 UTC (rev 215643)
+++ trunk/Source/_javascript_Core/b3/air/AirAllocateRegistersByGraphColoring.h	2017-04-21 21:45:12 UTC (rev 215644)
@@ -36,12 +36,6 @@
 
 inline bool useIRC()
 {
-    // FIXME: Currently, the Briggs allocator has bugs that our regression tests detect. Hence, it is
-    // unconditionally disabled.
-    // https://bugs.webkit.org/show_bug.cgi?id=170948
-    if (true)
-        return true;
-    
     return Options::airForceIRCAllocator()
         || (!isARM64() && !Options::airForceBriggsAllocator());
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to