Diff
Modified: branches/dfgFourthTier/Source/_javascript_Core/ChangeLog (149907 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ChangeLog 2013-05-10 21:28:14 UTC (rev 149907)
+++ branches/dfgFourthTier/Source/_javascript_Core/ChangeLog 2013-05-10 22:22:30 UTC (rev 149908)
@@ -1,5 +1,45 @@
2013-05-10 Filip Pizlo <[email protected]>
+ fourthTier: FTL should support CompareEqConstant
+ https://bugs.webkit.org/show_bug.cgi?id=115939
+
+ Reviewed by Oliver Hunt and Mark Hahnenberg.
+
+ The most interesting part of this patch is the way I make it easier to deal with
+ the inputs to Phi functions. This adds the notion of ValueFromBlock, which you
+ can get by doing m_out.anchor(value). You can build up a vector of these, and then
+ pass them to m_out.phi(type, vector) in one go.
+
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * ftl/FTLAbbreviatedTypes.h: Added.
+ (FTL):
+ * ftl/FTLAbbreviations.h:
+ (FTL):
+ (JSC::FTL::addIncoming):
+ (JSC::FTL::buildPhi):
+ * ftl/FTLAbstractHeapRepository.h:
+ (FTL):
+ * ftl/FTLCapabilities.cpp:
+ (JSC::FTL::canCompile):
+ * ftl/FTLLowerDFGToLLVM.cpp:
+ (JSC::FTL::LowerDFGToLLVM::compileNode):
+ (JSC::FTL::LowerDFGToLLVM::compileCompareEqConstant):
+ (LowerDFGToLLVM):
+ (JSC::FTL::LowerDFGToLLVM::lowDouble):
+ (JSC::FTL::LowerDFGToLLVM::masqueradesAsUndefinedWatchpointIfIsStillValid):
+ * ftl/FTLOutput.h:
+ (JSC::FTL::Output::phi):
+ (Output):
+ (JSC::FTL::Output::anchor):
+ * ftl/FTLValueFromBlock.h: Added.
+ (FTL):
+ (ValueFromBlock):
+ (JSC::FTL::ValueFromBlock::ValueFromBlock):
+ (JSC::FTL::ValueFromBlock::value):
+ (JSC::FTL::ValueFromBlock::block):
+
+2013-05-10 Filip Pizlo <[email protected]>
+
fourthTier: FTL should support CompareStrictEq
https://bugs.webkit.org/show_bug.cgi?id=115927
Modified: branches/dfgFourthTier/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (149907 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2013-05-10 21:28:14 UTC (rev 149907)
+++ branches/dfgFourthTier/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2013-05-10 22:22:30 UTC (rev 149908)
@@ -316,6 +316,8 @@
0FD82E56141DAF0800179C94 /* DFGOSREntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD82E52141DAEDE00179C94 /* DFGOSREntry.cpp */; };
0FD82E57141DAF1000179C94 /* DFGOSREntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD82E53141DAEDE00179C94 /* DFGOSREntry.h */; settings = {ATTRIBUTES = (Private, ); }; };
0FD82E86141F3FF100179C94 /* SpeculatedType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD82E84141F3FDA00179C94 /* SpeculatedType.cpp */; };
+ 0FDB2CC9173DA520007B3C1B /* FTLAbbreviatedTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDB2CC7173DA51E007B3C1B /* FTLAbbreviatedTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 0FDB2CCA173DA523007B3C1B /* FTLValueFromBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDB2CC8173DA51E007B3C1B /* FTLValueFromBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
0FDDBFB51666EED800C55FEF /* DFGVariableAccessDataDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FDDBFB21666EED500C55FEF /* DFGVariableAccessDataDump.cpp */; };
0FDDBFB61666EEDA00C55FEF /* DFGVariableAccessDataDump.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDDBFB31666EED500C55FEF /* DFGVariableAccessDataDump.h */; settings = {ATTRIBUTES = (Private, ); }; };
0FE228ED1436AB2700196C48 /* Options.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE228EB1436AB2300196C48 /* Options.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -1302,6 +1304,8 @@
0FD82E52141DAEDE00179C94 /* DFGOSREntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGOSREntry.cpp; path = dfg/DFGOSREntry.cpp; sourceTree = "<group>"; };
0FD82E53141DAEDE00179C94 /* DFGOSREntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGOSREntry.h; path = dfg/DFGOSREntry.h; sourceTree = "<group>"; };
0FD82E84141F3FDA00179C94 /* SpeculatedType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpeculatedType.cpp; sourceTree = "<group>"; };
+ 0FDB2CC7173DA51E007B3C1B /* FTLAbbreviatedTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FTLAbbreviatedTypes.h; path = ftl/FTLAbbreviatedTypes.h; sourceTree = "<group>"; };
+ 0FDB2CC8173DA51E007B3C1B /* FTLValueFromBlock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FTLValueFromBlock.h; path = ftl/FTLValueFromBlock.h; sourceTree = "<group>"; };
0FDDBFB21666EED500C55FEF /* DFGVariableAccessDataDump.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGVariableAccessDataDump.cpp; path = dfg/DFGVariableAccessDataDump.cpp; sourceTree = "<group>"; };
0FDDBFB31666EED500C55FEF /* DFGVariableAccessDataDump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGVariableAccessDataDump.h; path = dfg/DFGVariableAccessDataDump.h; sourceTree = "<group>"; };
0FE228EA1436AB2300196C48 /* Options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Options.cpp; sourceTree = "<group>"; };
@@ -2105,6 +2109,7 @@
0FEA09FC1705137F00BB722C /* ftl */ = {
isa = PBXGroup;
children = (
+ 0FDB2CC7173DA51E007B3C1B /* FTLAbbreviatedTypes.h */,
0FEA09FD170513DB00BB722C /* FTLAbbreviations.h */,
0FEA0A171708B00700BB722C /* FTLAbstractHeap.cpp */,
0FEA0A181708B00700BB722C /* FTLAbstractHeap.h */,
@@ -2151,6 +2156,7 @@
0FEA0A1B1708B00700BB722C /* FTLTypedPointer.h */,
0F235BCD17178E1C00690C7F /* FTLValueFormat.cpp */,
0F235BCE17178E1C00690C7F /* FTLValueFormat.h */,
+ 0FDB2CC8173DA51E007B3C1B /* FTLValueFromBlock.h */,
0F235BCF17178E1C00690C7F /* FTLValueSource.cpp */,
0F235BD017178E1C00690C7F /* FTLValueSource.h */,
0F6E5C181724AF3D005C574F /* WebKitLLVMLibraryAnchor.cpp */,
@@ -3427,6 +3433,7 @@
0F919D0D157EE0A2004A4E7D /* JSSymbolTableObject.h in Headers */,
BC18C42A0E16F5CD00B34460 /* JSType.h in Headers */,
6507D29E0E871E5E00D7D896 /* JSTypeInfo.h in Headers */,
+ 0FDB2CCA173DA523007B3C1B /* FTLValueFromBlock.h in Headers */,
86E3C612167BABD7006D760A /* JSValue.h in Headers */,
0F7025AA1714B0FC00382C0E /* DFGOSRExitCompilerCommon.h in Headers */,
BC18C42C0E16F5CD00B34460 /* JSValueRef.h in Headers */,
@@ -3541,6 +3548,7 @@
0FF729BE166AD360000F5BA3 /* ProfilerExecutionCounter.h in Headers */,
0FF729BF166AD360000F5BA3 /* ProfilerOrigin.h in Headers */,
0FF729C0166AD360000F5BA3 /* ProfilerOriginStack.h in Headers */,
+ 0FDB2CC9173DA520007B3C1B /* FTLAbbreviatedTypes.h in Headers */,
0FB1058C1675483300F8AB6E /* ProfilerOSRExit.h in Headers */,
0FB1058E1675483A00F8AB6E /* ProfilerOSRExitSite.h in Headers */,
0F235BE617178E1C00690C7F /* FTLValueSource.h in Headers */,
Added: branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbbreviatedTypes.h (0 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbbreviatedTypes.h (rev 0)
+++ branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbbreviatedTypes.h 2013-05-10 22:22:30 UTC (rev 149908)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FTLAbbreviatedTypes_h
+#define FTLAbbreviatedTypes_h
+
+#include <wtf/Platform.h>
+
+#if ENABLE(FTL_JIT)
+
+#include "FTLLLVMHeaders.h"
+
+namespace JSC { namespace FTL {
+
+typedef LLVMBasicBlockRef LBasicBlock;
+typedef LLVMBuilderRef LBuilder;
+typedef LLVMCallConv LCallConv;
+typedef LLVMIntPredicate LIntPredicate;
+typedef LLVMRealPredicate LRealPredicate;
+typedef LLVMLinkage LLinkage;
+typedef LLVMModuleRef LModule;
+typedef LLVMTypeRef LType;
+typedef LLVMValueRef LValue;
+
+} } // namespace JSC::FTL
+
+#endif // ENABLE(FTL_JIT)
+
+#endif // FTLAbbreviatedTypes_h
+
Modified: branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbbreviations.h (149907 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbbreviations.h 2013-05-10 21:28:14 UTC (rev 149907)
+++ branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbbreviations.h 2013-05-10 22:22:30 UTC (rev 149908)
@@ -30,7 +30,8 @@
#if ENABLE(FTL_JIT)
-#include "FTLLLVMHeaders.h"
+#include "FTLAbbreviatedTypes.h"
+#include "FTLValueFromBlock.h"
namespace JSC { namespace FTL {
@@ -43,16 +44,6 @@
#error "The FTL backend assumes that pointers are 64-bit."
#endif
-typedef LLVMBasicBlockRef LBasicBlock;
-typedef LLVMBuilderRef LBuilder;
-typedef LLVMCallConv LCallConv;
-typedef LLVMIntPredicate LIntPredicate;
-typedef LLVMRealPredicate LRealPredicate;
-typedef LLVMLinkage LLinkage;
-typedef LLVMModuleRef LModule;
-typedef LLVMTypeRef LType;
-typedef LLVMValueRef LValue;
-
static inline LType voidType() { return LLVMVoidType(); }
static inline LType int1Type() { return LLVMInt1Type(); }
static inline LType int8Type() { return LLVMInt8Type(); }
@@ -149,34 +140,29 @@
{
LLVMAddIncoming(phi, const_cast<LValue*>(values), const_cast<LBasicBlock*>(blocks), numPredecessors);
}
-template<typename ValueVectorType, typename BlockVectorType>
-static inline void addIncoming(LValue phi, const ValueVectorType& values, const BlockVectorType& blocks)
+static inline void addIncoming(LValue phi, ValueFromBlock value1)
{
- ASSERT(values.size() == blocks.size());
- addIncoming(phi, values.begin(), blocks.begin(), values.size());
+ LValue value = value1.value();
+ LBasicBlock block = value1.block();
+ addIncoming(phi, &value, &block, 1);
}
-static inline void addIncoming(LValue phi, LValue value1, LBasicBlock block1)
+static inline void addIncoming(LValue phi, ValueFromBlock value1, ValueFromBlock value2)
{
- addIncoming(phi, &value1, &block1, 1);
-}
-static inline void addIncoming(LValue phi, LValue value1, LBasicBlock block1, LValue value2, LBasicBlock block2)
-{
- LValue values[] = { value1, value2 };
- LBasicBlock blocks[] = { block1, block2 };
+ LValue values[] = { value1.value(), value2.value() };
+ LBasicBlock blocks[] = { value1.block(), value2.block() };
addIncoming(phi, values, blocks, 2);
}
-static inline LValue buildPhi(LBuilder builder, LType type, LValue value1, LBasicBlock block1)
+static inline LValue buildPhi(LBuilder builder, LType type, ValueFromBlock value1)
{
LValue result = buildPhi(builder, type);
- addIncoming(result, value1, block1);
+ addIncoming(result, value1);
return result;
}
static inline LValue buildPhi(
- LBuilder builder, LType type, LValue value1, LBasicBlock block1, LValue value2,
- LBasicBlock block2)
+ LBuilder builder, LType type, ValueFromBlock value1, ValueFromBlock value2)
{
LValue result = buildPhi(builder, type);
- addIncoming(result, value1, block1, value2, block2);
+ addIncoming(result, value1, value2);
return result;
}
Modified: branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.h (149907 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.h 2013-05-10 21:28:14 UTC (rev 149907)
+++ branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.h 2013-05-10 22:22:30 UTC (rev 149908)
@@ -42,6 +42,7 @@
macro(JSCell_structure, JSCell::structureOffset()) \
macro(JSObject_butterfly, JSObject::butterflyOffset()) \
macro(Butterfly_publicLength, Butterfly::offsetOfPublicLength()) \
+ macro(Structure_globalObject, Structure::globalObjectOffset()) \
macro(Structure_typeInfoFlags, Structure::typeInfoFlagsOffset())
#define FOR_EACH_INDEXED_ABSTRACT_HEAP(macro) \
Modified: branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLCapabilities.cpp (149907 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLCapabilities.cpp 2013-05-10 21:28:14 UTC (rev 149907)
+++ branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLCapabilities.cpp 2013-05-10 22:22:30 UTC (rev 149908)
@@ -100,6 +100,7 @@
case ArithNegate:
case UInt32ToNumber:
case Int32ToDouble:
+ case CompareEqConstant:
// These are OK.
break;
case GetArrayLength:
Modified: branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp (149907 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp 2013-05-10 21:28:14 UTC (rev 149907)
+++ branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp 2013-05-10 22:22:30 UTC (rev 149908)
@@ -364,6 +364,9 @@
case CompareEq:
compileCompareEq();
break;
+ case CompareEqConstant:
+ compileCompareEqConstant();
+ break;
case CompareStrictEq:
compileCompareStrictEq();
break;
@@ -965,6 +968,62 @@
RELEASE_ASSERT_NOT_REACHED();
}
+ void compileCompareEqConstant()
+ {
+ ASSERT(m_graph.valueOfJSConstant(m_node->child2().node()).isNull());
+
+ bool validWatchpoint = masqueradesAsUndefinedWatchpointIfIsStillValid();
+
+ LValue value = lowJSValue(m_node->child1());
+
+ LBasicBlock cellCase = FTL_NEW_BLOCK(m_out, ("CompareEqConstant cell case"));
+ LBasicBlock primitiveCase = FTL_NEW_BLOCK(m_out, ("CompareEqConstant primitive case"));
+ LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("CompareEqConstant continuation"));
+
+ m_out.branch(isNotCell(value), primitiveCase, cellCase);
+
+ LBasicBlock lastNext = m_out.appendTo(cellCase, primitiveCase);
+
+ Vector<ValueFromBlock, 3> results;
+
+ if (validWatchpoint) {
+ results.append(m_out.anchor(m_out.booleanFalse));
+ m_out.jump(continuation);
+ } else {
+ LBasicBlock masqueradesCase =
+ FTL_NEW_BLOCK(m_out, ("CompareEqConstant masquerades case"));
+
+ LValue structure = m_out.loadPtr(value, m_heaps.JSCell_structure);
+
+ results.append(m_out.anchor(m_out.booleanFalse));
+
+ m_out.branch(
+ m_out.testNonZero8(
+ m_out.load8(structure, m_heaps.Structure_typeInfoFlags),
+ m_out.constInt8(MasqueradesAsUndefined)),
+ masqueradesCase, continuation);
+
+ m_out.appendTo(masqueradesCase, primitiveCase);
+
+ results.append(m_out.anchor(
+ m_out.equal(
+ m_out.constIntPtr(m_graph.globalObjectFor(m_node->codeOrigin)),
+ m_out.loadPtr(structure, m_heaps.Structure_globalObject))));
+ m_out.jump(continuation);
+ }
+
+ m_out.appendTo(primitiveCase, continuation);
+
+ results.append(m_out.anchor(m_out.equal(
+ m_out.bitAnd(value, m_out.constInt64(~TagBitUndefined)),
+ m_out.constInt64(ValueNull))));
+ m_out.jump(continuation);
+
+ m_out.appendTo(continuation, lastNext);
+
+ m_booleanValues.add(m_node, m_out.phi(m_out.boolean, results));
+ }
+
void compileCompareStrictEq()
{
if (m_node->isBinaryUseKind(Int32Use)) {
@@ -1264,8 +1323,8 @@
LBasicBlock lastNext = m_out.appendTo(intCase, doubleCase);
- LValue intToDouble = m_out.intToDouble(unboxInt32(boxedResult));
- LBasicBlock intToDoubleBlock = m_out.m_block;
+ ValueFromBlock intToDouble = m_out.anchor(
+ m_out.intToDouble(unboxInt32(boxedResult)));
m_out.jump(continuation);
m_out.appendTo(doubleCase, continuation);
@@ -1273,16 +1332,12 @@
FTL_TYPE_CHECK(
jsValueValue(boxedResult), edge, SpecNumber, isCellOrMisc(boxedResult));
- LValue unboxedDouble = unboxDouble(boxedResult);
- LBasicBlock unboxedDoubleBlock = m_out.m_block;
+ ValueFromBlock unboxedDouble = m_out.anchor(unboxDouble(boxedResult));
m_out.jump(continuation);
m_out.appendTo(continuation, lastNext);
- LValue result = m_out.phi(
- m_out.doubleType,
- intToDouble, intToDoubleBlock,
- unboxedDouble, unboxedDoubleBlock);
+ LValue result = m_out.phi(m_out.doubleType, intToDouble, unboxedDouble);
m_doubleValues.add(edge.node(), result);
return result;
@@ -1484,13 +1539,14 @@
return m_graph.masqueradesAsUndefinedWatchpointIsStillValid(m_node->codeOrigin);
}
- void masqueradesAsUndefinedWatchpointIfIsStillValid()
+ bool masqueradesAsUndefinedWatchpointIfIsStillValid()
{
if (!masqueradesAsUndefinedWatchpointIsStillValid())
- return;
+ return false;
// FIXME: Implement masquerades-as-undefined watchpoints.
// https://bugs.webkit.org/show_bug.cgi?id=113647
+ return true;
}
bool isLive(Node* node)
Modified: branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLOutput.h (149907 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLOutput.h 2013-05-10 21:28:14 UTC (rev 149907)
+++ branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLOutput.h 2013-05-10 22:22:30 UTC (rev 149908)
@@ -113,14 +113,22 @@
LValue constDouble(double value) { return constReal(doubleType, value); }
LValue phi(LType type) { return buildPhi(m_builder, type); }
- LValue phi(LType type, LValue value1, LBasicBlock block1)
+ LValue phi(LType type, ValueFromBlock value1)
{
- return buildPhi(m_builder, type, value1, block1);
+ return buildPhi(m_builder, type, value1);
}
- LValue phi(LType type, LValue value1, LBasicBlock block1, LValue value2, LBasicBlock block2)
+ LValue phi(LType type, ValueFromBlock value1, ValueFromBlock value2)
{
- return buildPhi(m_builder, type, value1, block1, value2, block2);
+ return buildPhi(m_builder, type, value1, value2);
}
+ template<typename VectorType>
+ LValue phi(LType type, const VectorType& vector)
+ {
+ LValue result = phi(type);
+ for (unsigned i = 0; i < vector.size(); ++i)
+ addIncoming(result, vector[i]);
+ return result;
+ }
LValue add(LValue left, LValue right) { return buildAdd(m_builder, left, right); }
LValue sub(LValue left, LValue right) { return buildSub(m_builder, left, right); }
@@ -311,6 +319,11 @@
void unreachable() { buildUnreachable(m_builder); }
+ ValueFromBlock anchor(LValue value)
+ {
+ return ValueFromBlock(value, m_block);
+ }
+
LValue m_function;
AbstractHeapRepository* m_heaps;
LBuilder m_builder;
Added: branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLValueFromBlock.h (0 => 149908)
--- branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLValueFromBlock.h (rev 0)
+++ branches/dfgFourthTier/Source/_javascript_Core/ftl/FTLValueFromBlock.h 2013-05-10 22:22:30 UTC (rev 149908)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FTLValueFromBlock_h
+#define FTLValueFromBlock_h
+
+#include <wtf/Platform.h>
+
+#if ENABLE(FTL_JIT)
+
+#include "FTLAbbreviatedTypes.h"
+
+namespace JSC { namespace FTL {
+
+class ValueFromBlock {
+public:
+ ValueFromBlock(LValue value, LBasicBlock block)
+ : m_value(value)
+ , m_block(block)
+ {
+ }
+
+ LValue value() const { return m_value; }
+ LBasicBlock block() const { return m_block; }
+
+private:
+ LValue m_value;
+ LBasicBlock m_block;
+};
+
+} } // namespace JSC::FTL
+
+#endif // ENABLE(FTL_JIT)
+
+#endif // FTLValueFromBlock_h
+