Title: [293141] trunk/Source/_javascript_Core
Revision
293141
Author
ysuz...@apple.com
Date
2022-04-20 20:32:52 -0700 (Wed, 20 Apr 2022)

Log Message

Fix GPRInfo inconsistency in unlinked DFG bringup
https://bugs.webkit.org/show_bug.cgi?id=239573

Reviewed by Mark Lam.

Previously, we forgot changing GPRInfo::toIndex of x64 so that we got assertion in ScratchRegisterAllocator.
This patch fixes it and test this consistency in testmasm.
It allows unlinked DFG style register usage in x64, so we reenabled it again.

* Source/_javascript_Core/assembler/testmasm.cpp:
(JSC::testGPRInfoConsistency):
* Source/_javascript_Core/dfg/DFGPlan.cpp:
(JSC::DFG::Plan::compileInThreadImpl):
* Source/_javascript_Core/jit/GPRInfo.h:
(JSC::GPRInfo::toRegister):
(JSC::GPRInfo::toArgumentRegister):
(JSC::GPRInfo::toIndex):

Canonical link: https://commits.webkit.org/249839@main

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (293140 => 293141)


--- trunk/Source/_javascript_Core/ChangeLog	2022-04-21 02:48:24 UTC (rev 293140)
+++ trunk/Source/_javascript_Core/ChangeLog	2022-04-21 03:32:52 UTC (rev 293141)
@@ -1,3 +1,23 @@
+2022-04-20  Yusuke Suzuki  <ysuz...@apple.com>
+
+        Fix GPRInfo inconsistency in unlinked DFG bringup
+        https://bugs.webkit.org/show_bug.cgi?id=239573
+
+        Reviewed by Mark Lam.
+
+        Previously, we forgot changing GPRInfo::toIndex of x64 so that we got assertion in ScratchRegisterAllocator.
+        This patch fixes it and test this consistency in testmasm.
+        It allows unlinked DFG style register usage in x64, so we reenabled it again.
+
+        * assembler/testmasm.cpp:
+        (JSC::testGPRInfoConsistency):
+        * dfg/DFGPlan.cpp:
+        (JSC::DFG::Plan::compileInThreadImpl):
+        * jit/GPRInfo.h:
+        (JSC::GPRInfo::toRegister):
+        (JSC::GPRInfo::toArgumentRegister):
+        (JSC::GPRInfo::toIndex):
+
 2022-04-20  Zan Dobersek  <zdober...@igalia.com>
 
         Unreviewed, RISC-V build fix.

Modified: trunk/Source/_javascript_Core/assembler/testmasm.cpp (293140 => 293141)


--- trunk/Source/_javascript_Core/assembler/testmasm.cpp	2022-04-21 02:48:24 UTC (rev 293140)
+++ trunk/Source/_javascript_Core/assembler/testmasm.cpp	2022-04-21 03:32:52 UTC (rev 293141)
@@ -5675,6 +5675,24 @@
     CHECK_EQ(invoke<bool>(isNotType, &cell), true);
 }
 
+static void testGPRInfoConsistency()
+{
+    for (unsigned index = 0; index < GPRInfo::numberOfRegisters; ++index) {
+        GPRReg reg = GPRInfo::toRegister(index);
+        CHECK_EQ(GPRInfo::toIndex(reg), index);
+    }
+    for (auto reg = CCallHelpers::firstRegister(); reg <= CCallHelpers::lastRegister(); reg = nextID(reg)) {
+        if (isSpecialGPR(reg))
+            continue;
+        unsigned index = GPRInfo::toIndex(reg);
+        if (index == GPRInfo::InvalidIndex) {
+            CHECK_EQ(index >= GPRInfo::numberOfRegisters, true);
+            continue;
+        }
+        CHECK_EQ(index < GPRInfo::numberOfRegisters, true);
+    }
+}
+
 #define RUN(test) do {                          \
         if (!shouldRun(#test))                  \
             break;                              \
@@ -5912,6 +5930,8 @@
 
     RUN(testAndOrDouble());
 
+    RUN(testGPRInfoConsistency());
+
     if (tasks.isEmpty())
         usage();
 

Modified: trunk/Source/_javascript_Core/dfg/DFGPlan.cpp (293140 => 293141)


--- trunk/Source/_javascript_Core/dfg/DFGPlan.cpp	2022-04-21 02:48:24 UTC (rev 293140)
+++ trunk/Source/_javascript_Core/dfg/DFGPlan.cpp	2022-04-21 03:32:52 UTC (rev 293141)
@@ -316,10 +316,6 @@
         dfg.ensureCPSNaturalLoops();
     }
 
-    // Currently, due to GPRInfo::numberOfRegisters issue, we cannot enable it on x64.
-    if (isX86_64())
-        RELEASE_ASSERT(m_mode != JITCompilationMode::UnlinkedDFG);
-
     switch (m_mode) {
     case JITCompilationMode::DFG:
     case JITCompilationMode::UnlinkedDFG: {

Modified: trunk/Source/_javascript_Core/jit/GPRInfo.h (293140 => 293141)


--- trunk/Source/_javascript_Core/jit/GPRInfo.h	2022-04-21 02:48:24 UTC (rev 293140)
+++ trunk/Source/_javascript_Core/jit/GPRInfo.h	2022-04-21 03:32:52 UTC (rev 293141)
@@ -384,7 +384,7 @@
 
     static GPRReg toArgumentRegister(unsigned)
     {
-        UNREACHABLE_FOR_PLATFORM();
+        ASSERT_NOT_REACHED();
         return InvalidGPRReg;
     }
 
@@ -393,8 +393,7 @@
         ASSERT(reg != InvalidGPRReg);
         ASSERT(static_cast<int>(reg) < 8);
         static const unsigned indexForRegister[8] = { 0, 2, 1, 3, InvalidIndex, InvalidIndex, 4, 5 };
-        unsigned result = indexForRegister[reg];
-        return result;
+        return indexForRegister[reg];
     }
 
     static const char* debugName(GPRReg reg)
@@ -420,7 +419,7 @@
 class GPRInfo {
 public:
     typedef GPRReg RegisterType;
-    static constexpr unsigned numberOfRegisters = 11;
+    static constexpr unsigned numberOfRegisters = 10;
     static constexpr unsigned numberOfArgumentRegisters = NUMBER_OF_ARGUMENT_REGISTERS;
 
     // These registers match the baseline JIT.
@@ -498,9 +497,9 @@
     {
         ASSERT(index < numberOfRegisters);
 #if !OS(WINDOWS)
-        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regT6, regT7, regCS0, regCS1, regCS2 };
+        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regT6, regT7, regCS0, regCS1 };
 #else
-        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regCS0, regCS1, regCS2, regCS3, regCS4 };
+        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regCS0, regCS1, regCS2, regCS3 };
 #endif
         return registerForIndex[index];
     }
@@ -521,9 +520,9 @@
         ASSERT(reg != InvalidGPRReg);
         ASSERT(static_cast<int>(reg) < 16);
 #if !OS(WINDOWS)
-        static const unsigned indexForRegister[16] = { 0, 3, 2, 8, InvalidIndex, InvalidIndex, 1, 6, 4, 7, 5, InvalidIndex, 9, 10, InvalidIndex, InvalidIndex };
+        static const unsigned indexForRegister[16] = { 0, 3, 2, 8, InvalidIndex, InvalidIndex, 1, 6, 4, 7, 5, InvalidIndex, 9, InvalidIndex, InvalidIndex, InvalidIndex };
 #else
-        static const unsigned indexForRegister[16] = { 0, 5, 1, 6, InvalidIndex, InvalidIndex, 7, 8, 2, 3, 4, InvalidIndex, 9, 10, InvalidIndex, InvalidIndex };
+        static const unsigned indexForRegister[16] = { 0, 5, 1, 6, InvalidIndex, InvalidIndex, 7, 8, 2, 3, 4, InvalidIndex, 9, InvalidIndex, InvalidIndex, InvalidIndex };
 #endif
         return indexForRegister[reg];
     }
@@ -805,8 +804,7 @@
             InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex,
             InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex
         };
-        unsigned result = indexForRegister[reg];
-        return result;
+        return indexForRegister[reg];
     }
 
     static const char* debugName(GPRReg reg)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to