5 #ifndef V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ 6 #define V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ 8 #include "src/compiler/common-operator.h" 9 #include "src/compiler/graph-assembler.h" 10 #include "src/compiler/node.h" 11 #include "src/compiler/simplified-operator.h" 12 #include "src/globals.h" 23 class CommonOperatorBuilder;
24 class SimplifiedOperatorBuilder;
25 class MachineOperatorBuilder;
29 class SourcePositionTable;
30 class NodeOriginTable;
34 enum MaskArrayIndexEnable { kDoNotMaskArrayIndex, kMaskArrayIndex };
39 MaskArrayIndexEnable mask_array_index);
44 void ProcessNode(
Node* node,
Node** frame_state,
Node** effect,
47 bool TryWireInStateEffect(
Node* node,
Node* frame_state,
Node** effect,
49 Node* LowerChangeBitToTagged(
Node* node);
50 Node* LowerChangeInt31ToTaggedSigned(
Node* node);
51 Node* LowerChangeInt32ToTagged(
Node* node);
52 Node* LowerChangeInt64ToTagged(
Node* node);
53 Node* LowerChangeUint32ToTagged(
Node* node);
54 Node* LowerChangeUint64ToTagged(
Node* node);
55 Node* LowerChangeFloat64ToTagged(
Node* node);
56 Node* LowerChangeFloat64ToTaggedPointer(
Node* node);
57 Node* LowerChangeTaggedSignedToInt32(
Node* node);
58 Node* LowerChangeTaggedSignedToInt64(
Node* node);
59 Node* LowerChangeTaggedToBit(
Node* node);
60 Node* LowerChangeTaggedToInt32(
Node* node);
61 Node* LowerChangeTaggedToUint32(
Node* node);
62 Node* LowerChangeTaggedToInt64(
Node* node);
63 Node* LowerChangeTaggedToTaggedSigned(
Node* node);
65 Node* LowerCheckInternalizedString(
Node* node,
Node* frame_state);
66 void LowerCheckMaps(
Node* node,
Node* frame_state);
70 Node* LowerCheckReceiverOrNullOrUndefined(
Node* node,
Node* frame_state);
73 void LowerCheckIf(
Node* node,
Node* frame_state);
74 Node* LowerCheckedInt32Add(
Node* node,
Node* frame_state);
75 Node* LowerCheckedInt32Sub(
Node* node,
Node* frame_state);
76 Node* LowerCheckedInt32Div(
Node* node,
Node* frame_state);
77 Node* LowerCheckedInt32Mod(
Node* node,
Node* frame_state);
78 Node* LowerCheckedUint32Div(
Node* node,
Node* frame_state);
79 Node* LowerCheckedUint32Mod(
Node* node,
Node* frame_state);
80 Node* LowerCheckedInt32Mul(
Node* node,
Node* frame_state);
81 Node* LowerCheckedInt32ToTaggedSigned(
Node* node,
Node* frame_state);
82 Node* LowerCheckedInt64ToInt32(
Node* node,
Node* frame_state);
83 Node* LowerCheckedInt64ToTaggedSigned(
Node* node,
Node* frame_state);
84 Node* LowerCheckedUint32Bounds(
Node* node,
Node* frame_state);
85 Node* LowerCheckedUint32ToInt32(
Node* node,
Node* frame_state);
86 Node* LowerCheckedUint32ToTaggedSigned(
Node* node,
Node* frame_state);
87 Node* LowerCheckedUint64Bounds(
Node* node,
Node* frame_state);
88 Node* LowerCheckedUint64ToInt32(
Node* node,
Node* frame_state);
89 Node* LowerCheckedUint64ToTaggedSigned(
Node* node,
Node* frame_state);
90 Node* LowerCheckedFloat64ToInt32(
Node* node,
Node* frame_state);
91 Node* LowerCheckedFloat64ToInt64(
Node* node,
Node* frame_state);
92 Node* LowerCheckedTaggedSignedToInt32(
Node* node,
Node* frame_state);
93 Node* LowerCheckedTaggedToInt32(
Node* node,
Node* frame_state);
94 Node* LowerCheckedTaggedToInt64(
Node* node,
Node* frame_state);
95 Node* LowerCheckedTaggedToFloat64(
Node* node,
Node* frame_state);
96 Node* LowerCheckedTaggedToTaggedSigned(
Node* node,
Node* frame_state);
97 Node* LowerCheckedTaggedToTaggedPointer(
Node* node,
Node* frame_state);
98 Node* LowerChangeTaggedToFloat64(
Node* node);
100 Node* LowerTruncateTaggedToBit(
Node* node);
101 Node* LowerTruncateTaggedPointerToBit(
Node* node);
102 Node* LowerTruncateTaggedToFloat64(
Node* node);
103 Node* LowerTruncateTaggedToWord32(
Node* node);
104 Node* LowerCheckedTruncateTaggedToWord32(
Node* node,
Node* frame_state);
106 Node* LowerNumberToString(
Node* node);
107 Node* LowerObjectIsArrayBufferView(
Node* node);
108 Node* LowerObjectIsBigInt(
Node* node);
109 Node* LowerObjectIsCallable(
Node* node);
110 Node* LowerObjectIsConstructor(
Node* node);
111 Node* LowerObjectIsDetectableCallable(
Node* node);
112 Node* LowerObjectIsMinusZero(
Node* node);
113 Node* LowerNumberIsMinusZero(
Node* node);
116 Node* LowerObjectIsNonCallable(
Node* node);
117 Node* LowerObjectIsNumber(
Node* node);
118 Node* LowerObjectIsReceiver(
Node* node);
120 Node* LowerObjectIsString(
Node* node);
121 Node* LowerObjectIsSymbol(
Node* node);
122 Node* LowerObjectIsUndetectable(
Node* node);
123 Node* LowerNumberIsFloat64Hole(
Node* node);
124 Node* LowerNumberIsFinite(
Node* node);
125 Node* LowerObjectIsFiniteNumber(
Node* node);
126 Node* LowerNumberIsInteger(
Node* node);
127 Node* LowerObjectIsInteger(
Node* node);
128 Node* LowerNumberIsSafeInteger(
Node* node);
129 Node* LowerObjectIsSafeInteger(
Node* node);
130 Node* LowerArgumentsFrame(
Node* node);
131 Node* LowerArgumentsLength(
Node* node);
132 Node* LowerNewDoubleElements(
Node* node);
133 Node* LowerNewSmiOrObjectElements(
Node* node);
134 Node* LowerNewArgumentsElements(
Node* node);
135 Node* LowerNewConsString(
Node* node);
138 Node* LowerStringConcat(
Node* node);
139 Node* LowerStringToNumber(
Node* node);
140 Node* LowerStringCharCodeAt(
Node* node);
141 Node* LowerStringCodePointAt(
Node* node, UnicodeEncoding encoding);
142 Node* LowerStringToLowerCaseIntl(
Node* node);
143 Node* LowerStringToUpperCaseIntl(
Node* node);
144 Node* LowerStringFromSingleCharCode(
Node* node);
145 Node* LowerStringFromSingleCodePoint(
Node* node);
146 Node* LowerStringIndexOf(
Node* node);
147 Node* LowerStringSubstring(
Node* node);
148 Node* LowerStringLength(
Node* node);
150 Node* LowerStringLessThan(
Node* node);
151 Node* LowerStringLessThanOrEqual(
Node* node);
152 Node* LowerCheckFloat64Hole(
Node* node,
Node* frame_state);
153 Node* LowerCheckNotTaggedHole(
Node* node,
Node* frame_state);
154 Node* LowerConvertTaggedHoleToUndefined(
Node* node);
155 void LowerCheckEqualsInternalizedString(
Node* node,
Node* frame_state);
156 void LowerCheckEqualsSymbol(
Node* node,
Node* frame_state);
159 Node* LowerPlainPrimitiveToNumber(
Node* node);
160 Node* LowerPlainPrimitiveToWord32(
Node* node);
161 Node* LowerPlainPrimitiveToFloat64(
Node* node);
162 Node* LowerEnsureWritableFastElements(
Node* node);
163 Node* LowerMaybeGrowFastElements(
Node* node,
Node* frame_state);
164 void LowerTransitionElementsKind(
Node* node);
165 Node* LowerLoadFieldByIndex(
Node* node);
166 Node* LowerLoadTypedElement(
Node* node);
167 Node* LowerLoadDataViewElement(
Node* node);
168 void LowerStoreTypedElement(
Node* node);
169 void LowerStoreDataViewElement(
Node* node);
170 void LowerStoreSignedSmallElement(
Node* node);
171 Node* LowerFindOrderedHashMapEntry(
Node* node);
172 Node* LowerFindOrderedHashMapEntryForInt32Key(
Node* node);
173 void LowerTransitionAndStoreElement(
Node* node);
174 void LowerTransitionAndStoreNumberElement(
Node* node);
175 void LowerTransitionAndStoreNonNumberElement(
Node* node);
176 void LowerRuntimeAbort(
Node* node);
177 Node* LowerConvertReceiver(
Node* node);
186 Node* AllocateHeapNumberWithValue(
Node* node);
187 Node* BuildCheckedFloat64ToInt32(CheckForMinusZeroMode mode,
190 Node* BuildCheckedFloat64ToInt64(CheckForMinusZeroMode mode,
193 Node* BuildCheckedHeapNumberOrOddballToFloat64(CheckTaggedInputMode mode,
197 Node* BuildReverseBytes(ExternalArrayType
type,
Node* value);
198 Node* BuildFloat64RoundDown(
Node* value);
199 Node* BuildFloat64RoundTruncate(
Node* input);
201 Node* ComputeUnseededHash(
Node* value);
203 Node* IsElementsKindGreaterThan(
Node* kind, ElementsKind reference_kind);
205 Node* ChangeInt32ToSmi(
Node* value);
206 Node* ChangeInt32ToIntPtr(
Node* value);
207 Node* ChangeInt64ToSmi(
Node* value);
208 Node* ChangeIntPtrToInt32(
Node* value);
209 Node* ChangeIntPtrToSmi(
Node* value);
210 Node* ChangeUint32ToUintPtr(
Node* value);
211 Node* ChangeUint32ToSmi(
Node* value);
212 Node* ChangeSmiToIntPtr(
Node* value);
213 Node* ChangeSmiToInt32(
Node* value);
214 Node* ChangeSmiToInt64(
Node* value);
218 Node* SmiMaxValueConstant();
219 Node* SmiShiftBitsConstant();
220 void TransitionElementsTo(
Node* node,
Node* array, ElementsKind from,
225 JSGraph* jsgraph()
const {
return js_graph_; }
226 Graph* graph()
const;
227 Schedule* schedule()
const {
return schedule_; }
228 Zone* temp_zone()
const {
return temp_zone_; }
238 MaskArrayIndexEnable mask_array_index_;
239 RegionObservability region_observability_ = RegionObservability::kObservable;
243 Node* frame_state_zapper_;
250 #endif // V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_