summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp')
-rw-r--r--Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp42
1 files changed, 24 insertions, 18 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp b/Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp
index 98c891ac7..f5e03973c 100644
--- a/Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp
+++ b/Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp
@@ -36,15 +36,15 @@ void OSRExitCompiler::compileExit(const OSRExit& exit, SpeculationRecovery* reco
{
// 1) Pro-forma stuff.
#if DFG_ENABLE(DEBUG_VERBOSE)
- fprintf(stderr, "OSR exit for Node @%d (", (int)exit.m_nodeIndex);
+ dataLog("OSR exit for Node @%d (", (int)exit.m_nodeIndex);
for (CodeOrigin codeOrigin = exit.m_codeOrigin; ; codeOrigin = codeOrigin.inlineCallFrame->caller) {
- fprintf(stderr, "bc#%u", codeOrigin.bytecodeIndex);
+ dataLog("bc#%u", codeOrigin.bytecodeIndex);
if (!codeOrigin.inlineCallFrame)
break;
- fprintf(stderr, " -> %p ", codeOrigin.inlineCallFrame->executable.get());
+ dataLog(" -> %p ", codeOrigin.inlineCallFrame->executable.get());
}
- fprintf(stderr, ") ");
- exit.dump(stderr);
+ dataLog(") ");
+ exit.dump(WTF::dataFile());
#endif
#if DFG_ENABLE(VERBOSE_SPECULATION_FAILURE)
SpeculationFailureDebugInfo* debugInfo = new SpeculationFailureDebugInfo;
@@ -88,14 +88,20 @@ void OSRExitCompiler::compileExit(const OSRExit& exit, SpeculationRecovery* reco
// 3) Refine some value profile, if appropriate.
if (!!exit.m_jsValueSource && !!exit.m_valueProfile) {
+ EncodedJSValue* bucket = exit.m_valueProfile.getSpecFailBucket(0);
+
+#if DFG_ENABLE(VERBOSE_SPECULATION_FAILURE)
+ dataLog(" (have exit profile, bucket %p) ", bucket);
+#endif
+
if (exit.m_jsValueSource.isAddress()) {
// We can't be sure that we have a spare register. So use the tagTypeNumberRegister,
// since we know how to restore it.
m_jit.loadPtr(AssemblyHelpers::Address(exit.m_jsValueSource.asAddress()), GPRInfo::tagTypeNumberRegister);
- m_jit.storePtr(GPRInfo::tagTypeNumberRegister, exit.m_valueProfile->specFailBucket(0));
+ m_jit.storePtr(GPRInfo::tagTypeNumberRegister, bucket);
m_jit.move(AssemblyHelpers::TrustedImmPtr(bitwise_cast<void*>(TagTypeNumber)), GPRInfo::tagTypeNumberRegister);
} else
- m_jit.storePtr(exit.m_jsValueSource.gpr(), exit.m_valueProfile->specFailBucket(0));
+ m_jit.storePtr(exit.m_jsValueSource.gpr(), bucket);
}
// 4) Figure out how many scratch slots we'll need. We need one for every GPR/FPR
@@ -184,24 +190,24 @@ void OSRExitCompiler::compileExit(const OSRExit& exit, SpeculationRecovery* reco
}
#if DFG_ENABLE(DEBUG_VERBOSE)
- fprintf(stderr, " ");
+ dataLog(" ");
if (numberOfPoisonedVirtualRegisters)
- fprintf(stderr, "Poisoned=%u ", numberOfPoisonedVirtualRegisters);
+ dataLog("Poisoned=%u ", numberOfPoisonedVirtualRegisters);
if (numberOfDisplacedVirtualRegisters)
- fprintf(stderr, "Displaced=%u ", numberOfDisplacedVirtualRegisters);
+ dataLog("Displaced=%u ", numberOfDisplacedVirtualRegisters);
if (haveUnboxedInt32s)
- fprintf(stderr, "UnboxedInt32 ");
+ dataLog("UnboxedInt32 ");
if (haveUnboxedDoubles)
- fprintf(stderr, "UnboxedDoubles ");
+ dataLog("UnboxedDoubles ");
if (haveUInt32s)
- fprintf(stderr, "UInt32 ");
+ dataLog("UInt32 ");
if (haveFPRs)
- fprintf(stderr, "FPR ");
+ dataLog("FPR ");
if (haveConstants)
- fprintf(stderr, "Constants ");
+ dataLog("Constants ");
if (haveUndefined)
- fprintf(stderr, "Undefined ");
- fprintf(stderr, " ");
+ dataLog("Undefined ");
+ dataLog(" ");
#endif
EncodedJSValue* scratchBuffer = static_cast<EncodedJSValue*>(m_jit.globalData()->scratchBufferForSize(sizeof(EncodedJSValue) * std::max(haveUInt32s ? 2u : 0u, numberOfPoisonedVirtualRegisters + (numberOfDisplacedVirtualRegisters <= GPRInfo::numberOfRegisters ? 0 : numberOfDisplacedVirtualRegisters))));
@@ -624,7 +630,7 @@ void OSRExitCompiler::compileExit(const OSRExit& exit, SpeculationRecovery* reco
m_jit.jump(GPRInfo::regT1);
#if DFG_ENABLE(DEBUG_VERBOSE)
- fprintf(stderr, "-> %p\n", jumpTarget);
+ dataLog("-> %p\n", jumpTarget);
#endif
}