diff options
Diffstat (limited to 'deps/v8/src/compiler/effect-control-linearizer.h')
-rw-r--r-- | deps/v8/src/compiler/effect-control-linearizer.h | 250 |
1 files changed, 10 insertions, 240 deletions
diff --git a/deps/v8/src/compiler/effect-control-linearizer.h b/deps/v8/src/compiler/effect-control-linearizer.h index 70970b3d79..1942b870d5 100644 --- a/deps/v8/src/compiler/effect-control-linearizer.h +++ b/deps/v8/src/compiler/effect-control-linearizer.h @@ -5,259 +5,29 @@ #ifndef V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ #define V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ -#include "src/compiler/common-operator.h" -#include "src/compiler/graph-assembler.h" -#include "src/compiler/node.h" -#include "src/compiler/simplified-operator.h" -#include "src/globals.h" +#include <vector> + +#include "src/handles/handles.h" namespace v8 { namespace internal { -// Forward declarations. -class Callable; +class Map; class Zone; namespace compiler { -class CommonOperatorBuilder; -class SimplifiedOperatorBuilder; -class MachineOperatorBuilder; class JSGraph; -class Graph; +class NodeOriginTable; class Schedule; class SourcePositionTable; -class NodeOriginTable; - -class V8_EXPORT_PRIVATE EffectControlLinearizer { - public: - enum MaskArrayIndexEnable { kDoNotMaskArrayIndex, kMaskArrayIndex }; - - EffectControlLinearizer(JSGraph* graph, Schedule* schedule, Zone* temp_zone, - SourcePositionTable* source_positions, - NodeOriginTable* node_origins, - MaskArrayIndexEnable mask_array_index, - std::vector<Handle<Map>>* embedded_maps); - - void Run(); - - private: - void ProcessNode(Node* node, Node** frame_state, Node** effect, - Node** control); - - bool TryWireInStateEffect(Node* node, Node* frame_state, Node** effect, - Node** control); - Node* LowerChangeBitToTagged(Node* node); - Node* LowerChangeInt31ToTaggedSigned(Node* node); - Node* LowerChangeInt32ToTagged(Node* node); - Node* LowerChangeInt64ToTagged(Node* node); - Node* LowerChangeUint32ToTagged(Node* node); - Node* LowerChangeUint64ToTagged(Node* node); - Node* LowerChangeFloat64ToTagged(Node* node); - Node* LowerChangeFloat64ToTaggedPointer(Node* node); - Node* LowerChangeTaggedSignedToInt32(Node* node); - Node* LowerChangeTaggedSignedToInt64(Node* node); - Node* LowerChangeTaggedToBit(Node* node); - Node* LowerChangeTaggedToInt32(Node* node); - Node* LowerChangeTaggedToUint32(Node* node); - Node* LowerChangeTaggedToInt64(Node* node); - Node* LowerChangeTaggedToTaggedSigned(Node* node); - Node* LowerChangeCompressedToTaggedSigned(Node* node); - Node* LowerChangeTaggedToCompressedSigned(Node* node); - Node* LowerPoisonIndex(Node* node); - Node* LowerCheckInternalizedString(Node* node, Node* frame_state); - void LowerCheckMaps(Node* node, Node* frame_state); - Node* LowerCompareMaps(Node* node); - Node* LowerCheckNumber(Node* node, Node* frame_state); - Node* LowerCheckReceiver(Node* node, Node* frame_state); - Node* LowerCheckReceiverOrNullOrUndefined(Node* node, Node* frame_state); - Node* LowerCheckString(Node* node, Node* frame_state); - Node* LowerCheckSymbol(Node* node, Node* frame_state); - void LowerCheckIf(Node* node, Node* frame_state); - Node* LowerCheckedInt32Add(Node* node, Node* frame_state); - Node* LowerCheckedInt32Sub(Node* node, Node* frame_state); - Node* LowerCheckedInt32Div(Node* node, Node* frame_state); - Node* LowerCheckedInt32Mod(Node* node, Node* frame_state); - Node* LowerCheckedUint32Div(Node* node, Node* frame_state); - Node* LowerCheckedUint32Mod(Node* node, Node* frame_state); - Node* LowerCheckedInt32Mul(Node* node, Node* frame_state); - Node* LowerCheckedInt32ToTaggedSigned(Node* node, Node* frame_state); - Node* LowerCheckedInt64ToInt32(Node* node, Node* frame_state); - Node* LowerCheckedInt64ToTaggedSigned(Node* node, Node* frame_state); - Node* LowerCheckedUint32Bounds(Node* node, Node* frame_state); - Node* LowerCheckedUint32ToInt32(Node* node, Node* frame_state); - Node* LowerCheckedUint32ToTaggedSigned(Node* node, Node* frame_state); - Node* LowerCheckedUint64Bounds(Node* node, Node* frame_state); - Node* LowerCheckedUint64ToInt32(Node* node, Node* frame_state); - Node* LowerCheckedUint64ToTaggedSigned(Node* node, Node* frame_state); - Node* LowerCheckedFloat64ToInt32(Node* node, Node* frame_state); - Node* LowerCheckedFloat64ToInt64(Node* node, Node* frame_state); - Node* LowerCheckedTaggedSignedToInt32(Node* node, Node* frame_state); - Node* LowerCheckedTaggedToInt32(Node* node, Node* frame_state); - Node* LowerCheckedTaggedToInt64(Node* node, Node* frame_state); - Node* LowerCheckedTaggedToFloat64(Node* node, Node* frame_state); - Node* LowerCheckedTaggedToTaggedSigned(Node* node, Node* frame_state); - Node* LowerCheckedTaggedToTaggedPointer(Node* node, Node* frame_state); - Node* LowerCheckedCompressedToTaggedSigned(Node* node, Node* frame_state); - Node* LowerCheckedCompressedToTaggedPointer(Node* node, Node* frame_state); - Node* LowerCheckedTaggedToCompressedSigned(Node* node, Node* frame_state); - Node* LowerCheckedTaggedToCompressedPointer(Node* node, Node* frame_state); - Node* LowerChangeTaggedToFloat64(Node* node); - void TruncateTaggedPointerToBit(Node* node, GraphAssemblerLabel<1>* done); - Node* LowerTruncateTaggedToBit(Node* node); - Node* LowerTruncateTaggedPointerToBit(Node* node); - Node* LowerTruncateTaggedToFloat64(Node* node); - Node* LowerTruncateTaggedToWord32(Node* node); - Node* LowerCheckedTruncateTaggedToWord32(Node* node, Node* frame_state); - Node* LowerAllocate(Node* node); - Node* LowerNumberToString(Node* node); - Node* LowerObjectIsArrayBufferView(Node* node); - Node* LowerObjectIsBigInt(Node* node); - Node* LowerObjectIsCallable(Node* node); - Node* LowerObjectIsConstructor(Node* node); - Node* LowerObjectIsDetectableCallable(Node* node); - Node* LowerObjectIsMinusZero(Node* node); - Node* LowerNumberIsMinusZero(Node* node); - Node* LowerObjectIsNaN(Node* node); - Node* LowerNumberIsNaN(Node* node); - Node* LowerObjectIsNonCallable(Node* node); - Node* LowerObjectIsNumber(Node* node); - Node* LowerObjectIsReceiver(Node* node); - Node* LowerObjectIsSmi(Node* node); - Node* LowerObjectIsString(Node* node); - Node* LowerObjectIsSymbol(Node* node); - Node* LowerObjectIsUndetectable(Node* node); - Node* LowerNumberIsFloat64Hole(Node* node); - Node* LowerNumberIsFinite(Node* node); - Node* LowerObjectIsFiniteNumber(Node* node); - Node* LowerNumberIsInteger(Node* node); - Node* LowerObjectIsInteger(Node* node); - Node* LowerNumberIsSafeInteger(Node* node); - Node* LowerObjectIsSafeInteger(Node* node); - Node* LowerArgumentsFrame(Node* node); - Node* LowerArgumentsLength(Node* node); - Node* LowerNewDoubleElements(Node* node); - Node* LowerNewSmiOrObjectElements(Node* node); - Node* LowerNewArgumentsElements(Node* node); - Node* LowerNewConsString(Node* node); - Node* LowerSameValue(Node* node); - Node* LowerNumberSameValue(Node* node); - Node* LowerDeadValue(Node* node); - Node* LowerStringConcat(Node* node); - Node* LowerStringToNumber(Node* node); - Node* LowerStringCharCodeAt(Node* node); - Node* LowerStringCodePointAt(Node* node, UnicodeEncoding encoding); - Node* LowerStringToLowerCaseIntl(Node* node); - Node* LowerStringToUpperCaseIntl(Node* node); - Node* LowerStringFromSingleCharCode(Node* node); - Node* LowerStringFromSingleCodePoint(Node* node); - Node* LowerStringIndexOf(Node* node); - Node* LowerStringSubstring(Node* node); - Node* LowerStringLength(Node* node); - Node* LowerStringEqual(Node* node); - Node* LowerStringLessThan(Node* node); - Node* LowerStringLessThanOrEqual(Node* node); - Node* LowerCheckFloat64Hole(Node* node, Node* frame_state); - Node* LowerCheckNotTaggedHole(Node* node, Node* frame_state); - Node* LowerConvertTaggedHoleToUndefined(Node* node); - void LowerCheckEqualsInternalizedString(Node* node, Node* frame_state); - void LowerCheckEqualsSymbol(Node* node, Node* frame_state); - Node* LowerTypeOf(Node* node); - Node* LowerToBoolean(Node* node); - Node* LowerPlainPrimitiveToNumber(Node* node); - Node* LowerPlainPrimitiveToWord32(Node* node); - Node* LowerPlainPrimitiveToFloat64(Node* node); - Node* LowerEnsureWritableFastElements(Node* node); - Node* LowerMaybeGrowFastElements(Node* node, Node* frame_state); - void LowerTransitionElementsKind(Node* node); - Node* LowerLoadFieldByIndex(Node* node); - Node* LowerLoadMessage(Node* node); - Node* LowerLoadTypedElement(Node* node); - Node* LowerLoadDataViewElement(Node* node); - Node* LowerLoadStackArgument(Node* node); - void LowerStoreMessage(Node* node); - void LowerStoreTypedElement(Node* node); - void LowerStoreDataViewElement(Node* node); - void LowerStoreSignedSmallElement(Node* node); - Node* LowerFindOrderedHashMapEntry(Node* node); - Node* LowerFindOrderedHashMapEntryForInt32Key(Node* node); - void LowerTransitionAndStoreElement(Node* node); - void LowerTransitionAndStoreNumberElement(Node* node); - void LowerTransitionAndStoreNonNumberElement(Node* node); - void LowerRuntimeAbort(Node* node); - Node* LowerConvertReceiver(Node* node); - Node* LowerDateNow(Node* node); - - // Lowering of optional operators. - Maybe<Node*> LowerFloat64RoundUp(Node* node); - Maybe<Node*> LowerFloat64RoundDown(Node* node); - Maybe<Node*> LowerFloat64RoundTiesEven(Node* node); - Maybe<Node*> LowerFloat64RoundTruncate(Node* node); - - Node* AllocateHeapNumberWithValue(Node* node); - Node* BuildCheckedFloat64ToInt32(CheckForMinusZeroMode mode, - const VectorSlotPair& feedback, Node* value, - Node* frame_state); - Node* BuildCheckedFloat64ToInt64(CheckForMinusZeroMode mode, - const VectorSlotPair& feedback, Node* value, - Node* frame_state); - Node* BuildCheckedHeapNumberOrOddballToFloat64(CheckTaggedInputMode mode, - const VectorSlotPair& feedback, - Node* value, - Node* frame_state); - Node* BuildReverseBytes(ExternalArrayType type, Node* value); - Node* BuildFloat64RoundDown(Node* value); - Node* BuildFloat64RoundTruncate(Node* input); - Node* BuildUint32Mod(Node* lhs, Node* rhs); - Node* ComputeUnseededHash(Node* value); - Node* LowerStringComparison(Callable const& callable, Node* node); - Node* IsElementsKindGreaterThan(Node* kind, ElementsKind reference_kind); - - Node* ChangeInt32ToSmi(Node* value); - Node* ChangeInt32ToIntPtr(Node* value); - Node* ChangeInt64ToSmi(Node* value); - Node* ChangeIntPtrToInt32(Node* value); - Node* ChangeIntPtrToSmi(Node* value); - Node* ChangeUint32ToUintPtr(Node* value); - Node* ChangeUint32ToSmi(Node* value); - Node* ChangeSmiToIntPtr(Node* value); - Node* ChangeSmiToInt32(Node* value); - Node* ChangeSmiToInt64(Node* value); - Node* ObjectIsSmi(Node* value); - Node* LoadFromSeqString(Node* receiver, Node* position, Node* is_one_byte); - - Node* SmiMaxValueConstant(); - Node* SmiShiftBitsConstant(); - void TransitionElementsTo(Node* node, Node* array, ElementsKind from, - ElementsKind to); - - Factory* factory() const; - Isolate* isolate() const; - JSGraph* jsgraph() const { return js_graph_; } - Graph* graph() const; - Schedule* schedule() const { return schedule_; } - Zone* temp_zone() const { return temp_zone_; } - CommonOperatorBuilder* common() const; - SimplifiedOperatorBuilder* simplified() const; - MachineOperatorBuilder* machine() const; - std::vector<Handle<Map>>* embedded_maps() { return embedded_maps_; } - - GraphAssembler* gasm() { return &graph_assembler_; } - JSGraph* js_graph_; - Schedule* schedule_; - Zone* temp_zone_; - MaskArrayIndexEnable mask_array_index_; - RegionObservability region_observability_ = RegionObservability::kObservable; - SourcePositionTable* source_positions_; - NodeOriginTable* node_origins_; - GraphAssembler graph_assembler_; - Node* frame_state_zapper_; // For tracking down compiler::Node::New crashes. +enum class MaskArrayIndexEnable { kDoNotMaskArrayIndex, kMaskArrayIndex }; - // embedded_maps_ keeps track of maps we've embedded as Uint32 constants. - // We do this in order to notify the garbage collector at code-gen time. - std::vector<Handle<Map>>* embedded_maps_; -}; +V8_EXPORT_PRIVATE void LinearizeEffectControl( + JSGraph* graph, Schedule* schedule, Zone* temp_zone, + SourcePositionTable* source_positions, NodeOriginTable* node_origins, + MaskArrayIndexEnable mask_array_index); } // namespace compiler } // namespace internal |