5 #ifndef V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ 6 #define V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_ 8 #include "src/base/flags.h" 9 #include "src/compiler/graph-reducer.h" 10 #include "src/deoptimize-reason.h" 11 #include "src/objects/map.h" 21 class StringConstantBase;
26 enum class AccessMode;
27 class CommonOperatorBuilder;
28 class CompilationDependencies;
29 class ElementAccessInfo;
32 class JSOperatorBuilder;
33 class MachineOperatorBuilder;
34 class PropertyAccessInfo;
35 class SimplifiedOperatorBuilder;
48 kAccessorInliningEnabled = 1u << 0,
49 kBailoutOnUninitialized = 1u << 1
59 const char* reducer_name()
const override {
60 return "JSNativeContextSpecialization";
95 MapHandles
const& receiver_maps,
96 AccessMode access_mode,
97 KeyedAccessLoadMode load_mode,
98 KeyedAccessStoreMode store_mode);
101 AccessMode access_mode,
102 KeyedAccessLoadMode load_mode,
103 KeyedAccessStoreMode store_mode);
107 AccessMode access_mode);
109 MapHandles
const& receiver_maps,
111 Node* index =
nullptr);
114 Node* index =
nullptr);
116 Reduction ReduceSoftDeoptimize(
Node* node, DeoptimizeReason reason);
122 class ValueEffectControl final {
125 : value_(
nullptr), effect_(
nullptr), control_(
nullptr) {}
126 ValueEffectControl(
Node* value,
Node* effect,
Node* control)
127 : value_(value), effect_(effect), control_(control) {}
129 Node* value()
const {
return value_; }
130 Node* effect()
const {
return effect_; }
131 Node* control()
const {
return control_; }
140 ValueEffectControl BuildPropertyAccess(
Node* receiver,
Node* value,
146 AccessMode access_mode);
147 ValueEffectControl BuildPropertyLoad(
Node* receiver,
Node* context,
153 ValueEffectControl BuildPropertyStore(
Node* receiver,
Node* value,
159 AccessMode access_mode);
162 Node* InlinePropertyGetterCall(
Node* receiver,
Node* context,
167 void InlinePropertySetterCall(
Node* receiver,
Node* value,
Node* context,
178 ValueEffectControl BuildElementAccess(
181 KeyedAccessLoadMode load_mode, KeyedAccessStoreMode store_mode);
186 KeyedAccessLoadMode load_mode);
200 bool CanTreatHoleAsUndefined(MapHandles
const& receiver_maps);
204 bool ExtractReceiverMaps(
Node* receiver,
Node* effect,
206 MapHandles* receiver_maps);
212 bool InferReceiverMaps(
Node* receiver,
Node* effect,
213 MapHandles* receiver_maps);
221 enum InferHasInPrototypeChainResult {
223 kIsNotInPrototypeChain,
224 kMayBeInPrototypeChain
226 InferHasInPrototypeChainResult InferHasInPrototypeChain(
229 Graph* graph()
const;
230 JSGraph* jsgraph()
const {
return jsgraph_; }
238 Flags flags()
const {
return flags_; }
241 NativeContextRef native_context()
const {
return broker()->native_context(); }
243 Zone* zone()
const {
return zone_; }
244 Zone* shared_zone()
const {
return shared_zone_; }
253 Zone*
const shared_zone_;
265 #endif // V8_COMPILER_JS_NATIVE_CONTEXT_SPECIALIZATION_H_