From ee9e04cc4fb5fbaf52bb5341bd494eea276a8272 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Fri, 6 Mar 2015 07:33:11 +0000 Subject: [PATCH] Fix crash in SpeculativeJIT::compile() when loading theblaze.com =================================================================== Gbp-Pq: Name fix-jit-crash.patch --- .../dfg/DFGSpeculativeJIT32_64.cpp | 21 +++++++++++++++++- .../dfg/DFGSpeculativeJIT64.cpp | 22 +++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp index 82a0b28a51..ac57b380a4 100644 --- a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp +++ b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp @@ -1692,7 +1692,26 @@ void SpeculativeJIT::compile(Node* node) break; case Identity: { - RELEASE_ASSERT_NOT_REACHED(); + speculate(node, node->child1()); + switch (node->child1().useKind()) { + case DoubleRepUse: + case DoubleRepRealUse: { + SpeculateDoubleOperand op(this, node->child1()); + doubleResult(op.fpr(), node); + break; + } + case Int52RepUse: + case MachineIntUse: + case DoubleRepMachineIntUse: { + RELEASE_ASSERT_NOT_REACHED(); + break; + } + default: { + JSValueOperand op(this, node->child1()); + jsValueResult(op.tagGPR(), op.payloadGPR(), node); + break; + } + } // switch break; } diff --git a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp index b78cfbb460..627f019325 100644 --- a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp +++ b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp @@ -1795,8 +1795,26 @@ void SpeculativeJIT::compile(Node* node) break; case Identity: { - // CSE should always eliminate this. - DFG_CRASH(m_jit.graph(), node, "Unexpected Identity node"); + speculate(node, node->child1()); + switch (node->child1().useKind()) { + case DoubleRepUse: + case DoubleRepRealUse: + case DoubleRepMachineIntUse: { + SpeculateDoubleOperand op(this, node->child1()); + doubleResult(op.fpr(), node); + break; + } + case Int52RepUse: { + SpeculateInt52Operand op(this, node->child1()); + int52Result(op.gpr(), node); + break; + } + default: { + JSValueOperand op(this, node->child1()); + jsValueResult(op.gpr(), node); + break; + } + } // switch break; } -- 2.30.2