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