Title: [259849] trunk/Source/_javascript_Core
Revision
259849
Author
[email protected]
Date
2020-04-09 23:48:09 -0700 (Thu, 09 Apr 2020)

Log Message

[JSC] Use UnconditionalWriteBarrier in Baseline effectively to reduce code size
https://bugs.webkit.org/show_bug.cgi?id=209395

Reviewed by Tadeu Zagallo.

In put/delete we always need to emit write-barrier if the base is a cell since IC can write things (writing new StructureID etc.).
We should use emitWriteBarrier with UnconditionalWriteBarrier to remove unnecessary branch.

* jit/JITPropertyAccess.cpp:
(JSC::JIT::emitPutByValWithCachedId):
(JSC::JIT::emit_op_del_by_id):
(JSC::JIT::emit_op_del_by_val):
(JSC::JIT::emit_op_put_by_id):
* jit/JITPropertyAccess32_64.cpp:
(JSC::JIT::emitPutByValWithCachedId):
(JSC::JIT::emit_op_put_by_id):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (259848 => 259849)


--- trunk/Source/_javascript_Core/ChangeLog	2020-04-10 06:25:42 UTC (rev 259848)
+++ trunk/Source/_javascript_Core/ChangeLog	2020-04-10 06:48:09 UTC (rev 259849)
@@ -1,3 +1,22 @@
+2020-04-09  Yusuke Suzuki  <[email protected]>
+
+        [JSC] Use UnconditionalWriteBarrier in Baseline effectively to reduce code size
+        https://bugs.webkit.org/show_bug.cgi?id=209395
+
+        Reviewed by Tadeu Zagallo.
+
+        In put/delete we always need to emit write-barrier if the base is a cell since IC can write things (writing new StructureID etc.).
+        We should use emitWriteBarrier with UnconditionalWriteBarrier to remove unnecessary branch.
+
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::emitPutByValWithCachedId):
+        (JSC::JIT::emit_op_del_by_id):
+        (JSC::JIT::emit_op_del_by_val):
+        (JSC::JIT::emit_op_put_by_id):
+        * jit/JITPropertyAccess32_64.cpp:
+        (JSC::JIT::emitPutByValWithCachedId):
+        (JSC::JIT::emit_op_put_by_id):
+
 2020-04-09  Mark Lam  <[email protected]>
 
         Fix bad tests in testmasm's testCagePreservesPACFailureBit().

Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (259848 => 259849)


--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2020-04-10 06:25:42 UTC (rev 259848)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2020-04-10 06:48:09 UTC (rev 259849)
@@ -290,9 +290,8 @@
         JSValueRegs(regT0), JSValueRegs(regT1), regT2, bytecode.m_ecmaMode, putKind);
     gen.generateFastPath(*this);
     // IC can write new Structure without write-barrier if a base is cell.
-    // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
-    // https://bugs.webkit.org/show_bug.cgi?id=209395
-    emitWriteBarrier(base, ShouldFilterBase);
+    // We emit write-barrier unconditionally since we know baseVRege is a cell.
+    emitWriteBarrier(base, UnconditionalWriteBarrier);
     doneCases.append(jump());
 
     Label coldPathBegin = label();
@@ -409,10 +408,9 @@
     emitPutVirtualRegister(dst, JSValueRegs(regT0));
 
     // IC can write new Structure without write-barrier if a base is cell.
+    // We emit write-barrier unconditionally since we know baseVRege is a cell.
     // We should emit write-barrier at the end of sequence since write-barrier clobbers registers.
-    // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
-    // https://bugs.webkit.org/show_bug.cgi?id=209395
-    emitWriteBarrier(base, ShouldFilterBase);
+    emitWriteBarrier(base, UnconditionalWriteBarrier);
 }
 
 void JIT::emitSlow_op_del_by_id(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
@@ -459,9 +457,8 @@
 
     // We should emit write-barrier at the end of sequence since write-barrier clobbers registers.
     // IC can write new Structure without write-barrier if a base is cell.
-    // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
-    // https://bugs.webkit.org/show_bug.cgi?id=209395
-    emitWriteBarrier(base, ShouldFilterBase);
+    // We emit write-barrier unconditionally since we know baseVRege is a cell.
+    emitWriteBarrier(base, UnconditionalWriteBarrier);
 }
 
 void JIT::emitSlow_op_del_by_val(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
@@ -678,9 +675,8 @@
     m_putByIds.append(gen);
     
     // IC can write new Structure without write-barrier if a base is cell.
-    // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
-    // https://bugs.webkit.org/show_bug.cgi?id=209395
-    emitWriteBarrier(baseVReg, ShouldFilterBase);
+    // We emit write-barrier unconditionally since we know baseVRege is a cell.
+    emitWriteBarrier(baseVReg, UnconditionalWriteBarrier);
 }
 
 void JIT::emitSlow_op_put_by_id(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)

Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (259848 => 259849)


--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp	2020-04-10 06:25:42 UTC (rev 259848)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp	2020-04-10 06:48:09 UTC (rev 259849)
@@ -369,10 +369,9 @@
     // reload the registers.
     //
     // IC can write new Structure without write-barrier if a base is cell.
+    // We emit write-barrier unconditionally since we know baseVRege is a cell.
     // We are emitting write-barrier before writing here but this is OK since 32bit JSC does not have concurrent GC.
-    // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
-    // https://bugs.webkit.org/show_bug.cgi?id=209395
-    emitWriteBarrier(base, ShouldFilterBase);
+    emitWriteBarrier(base, UnconditionalWriteBarrier);
     emitLoadPayload(base, regT0);
     emitLoad(value, regT3, regT2);
 
@@ -623,9 +622,8 @@
     m_putByIds.append(gen);
     
     // IC can write new Structure without write-barrier if a base is cell.
-    // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
-    // https://bugs.webkit.org/show_bug.cgi?id=209395
-    emitWriteBarrier(base, ShouldFilterBase);
+    // We emit write-barrier unconditionally since we know baseVRege is a cell.
+    emitWriteBarrier(base, UnconditionalWriteBarrier);
 }
 
 void JIT::emitSlow_op_put_by_id(const Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to