| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ | 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ |
| 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ | 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ |
| 7 | 7 |
| 8 #include <iosfwd> | 8 #include <iosfwd> |
| 9 | 9 |
| 10 #include "src/v8.h" | 10 #include "src/v8.h" |
| (...skipping 2296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2307 pass_argument_count_(pass_argument_count), | 2307 pass_argument_count_(pass_argument_count), |
| 2308 has_stack_check_(has_stack_check) { | 2308 has_stack_check_(has_stack_check) { |
| 2309 SetOperandAt(0, function); | 2309 SetOperandAt(0, function); |
| 2310 } | 2310 } |
| 2311 | 2311 |
| 2312 bool pass_argument_count_; | 2312 bool pass_argument_count_; |
| 2313 bool has_stack_check_; | 2313 bool has_stack_check_; |
| 2314 }; | 2314 }; |
| 2315 | 2315 |
| 2316 | 2316 |
| 2317 enum CallMode { NORMAL_CALL, TAIL_CALL }; |
| 2318 |
| 2319 |
| 2317 class HCallWithDescriptor FINAL : public HInstruction { | 2320 class HCallWithDescriptor FINAL : public HInstruction { |
| 2318 public: | 2321 public: |
| 2319 static HCallWithDescriptor* New(Zone* zone, HValue* context, HValue* target, | 2322 static HCallWithDescriptor* New(Zone* zone, HValue* context, HValue* target, |
| 2320 int argument_count, | 2323 int argument_count, |
| 2321 CallInterfaceDescriptor descriptor, | 2324 CallInterfaceDescriptor descriptor, |
| 2322 const Vector<HValue*>& operands) { | 2325 const Vector<HValue*>& operands, |
| 2326 CallMode call_mode = NORMAL_CALL) { |
| 2323 DCHECK(operands.length() == descriptor.GetEnvironmentLength()); | 2327 DCHECK(operands.length() == descriptor.GetEnvironmentLength()); |
| 2324 HCallWithDescriptor* res = new (zone) | 2328 HCallWithDescriptor* res = new (zone) HCallWithDescriptor( |
| 2325 HCallWithDescriptor(target, argument_count, descriptor, operands, zone); | 2329 target, argument_count, descriptor, operands, call_mode, zone); |
| 2326 return res; | 2330 return res; |
| 2327 } | 2331 } |
| 2328 | 2332 |
| 2329 int OperandCount() const FINAL { return values_.length(); } | 2333 int OperandCount() const FINAL { return values_.length(); } |
| 2330 HValue* OperandAt(int index) const FINAL { return values_[index]; } | 2334 HValue* OperandAt(int index) const FINAL { return values_[index]; } |
| 2331 | 2335 |
| 2332 Representation RequiredInputRepresentation(int index) FINAL { | 2336 Representation RequiredInputRepresentation(int index) FINAL { |
| 2333 if (index == 0) { | 2337 if (index == 0) { |
| 2334 return Representation::Tagged(); | 2338 return Representation::Tagged(); |
| 2335 } else { | 2339 } else { |
| 2336 int par_index = index - 1; | 2340 int par_index = index - 1; |
| 2337 DCHECK(par_index < descriptor_.GetEnvironmentLength()); | 2341 DCHECK(par_index < descriptor_.GetEnvironmentLength()); |
| 2338 return descriptor_.GetParameterRepresentation(par_index); | 2342 return descriptor_.GetParameterRepresentation(par_index); |
| 2339 } | 2343 } |
| 2340 } | 2344 } |
| 2341 | 2345 |
| 2342 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor) | 2346 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor) |
| 2343 | 2347 |
| 2344 HType CalculateInferredType() FINAL { return HType::Tagged(); } | 2348 HType CalculateInferredType() FINAL { return HType::Tagged(); } |
| 2345 | 2349 |
| 2350 bool IsTailCall() const { return call_mode_ == TAIL_CALL; } |
| 2351 |
| 2346 virtual int argument_count() const { | 2352 virtual int argument_count() const { |
| 2347 return argument_count_; | 2353 return argument_count_; |
| 2348 } | 2354 } |
| 2349 | 2355 |
| 2350 int argument_delta() const OVERRIDE { return -argument_count_; } | 2356 int argument_delta() const OVERRIDE { return -argument_count_; } |
| 2351 | 2357 |
| 2352 CallInterfaceDescriptor descriptor() const { return descriptor_; } | 2358 CallInterfaceDescriptor descriptor() const { return descriptor_; } |
| 2353 | 2359 |
| 2354 HValue* target() { | 2360 HValue* target() { |
| 2355 return OperandAt(0); | 2361 return OperandAt(0); |
| 2356 } | 2362 } |
| 2357 | 2363 |
| 2358 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 2364 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 2359 | 2365 |
| 2360 private: | 2366 private: |
| 2361 // The argument count includes the receiver. | 2367 // The argument count includes the receiver. |
| 2362 HCallWithDescriptor(HValue* target, int argument_count, | 2368 HCallWithDescriptor(HValue* target, int argument_count, |
| 2363 CallInterfaceDescriptor descriptor, | 2369 CallInterfaceDescriptor descriptor, |
| 2364 const Vector<HValue*>& operands, Zone* zone) | 2370 const Vector<HValue*>& operands, CallMode call_mode, |
| 2371 Zone* zone) |
| 2365 : descriptor_(descriptor), | 2372 : descriptor_(descriptor), |
| 2366 values_(descriptor.GetEnvironmentLength() + 1, zone) { | 2373 values_(descriptor.GetEnvironmentLength() + 1, zone), |
| 2367 argument_count_ = argument_count; | 2374 argument_count_(argument_count), |
| 2375 call_mode_(call_mode) { |
| 2376 // We can only tail call without any stack arguments. |
| 2377 DCHECK(call_mode != TAIL_CALL || argument_count == 0); |
| 2368 AddOperand(target, zone); | 2378 AddOperand(target, zone); |
| 2369 for (int i = 0; i < operands.length(); i++) { | 2379 for (int i = 0; i < operands.length(); i++) { |
| 2370 AddOperand(operands[i], zone); | 2380 AddOperand(operands[i], zone); |
| 2371 } | 2381 } |
| 2372 this->set_representation(Representation::Tagged()); | 2382 this->set_representation(Representation::Tagged()); |
| 2373 this->SetAllSideEffects(); | 2383 this->SetAllSideEffects(); |
| 2374 } | 2384 } |
| 2375 | 2385 |
| 2376 void AddOperand(HValue* v, Zone* zone) { | 2386 void AddOperand(HValue* v, Zone* zone) { |
| 2377 values_.Add(NULL, zone); | 2387 values_.Add(NULL, zone); |
| 2378 SetOperandAt(values_.length() - 1, v); | 2388 SetOperandAt(values_.length() - 1, v); |
| 2379 } | 2389 } |
| 2380 | 2390 |
| 2381 void InternalSetOperandAt(int index, HValue* value) FINAL { | 2391 void InternalSetOperandAt(int index, HValue* value) FINAL { |
| 2382 values_[index] = value; | 2392 values_[index] = value; |
| 2383 } | 2393 } |
| 2384 | 2394 |
| 2385 CallInterfaceDescriptor descriptor_; | 2395 CallInterfaceDescriptor descriptor_; |
| 2386 ZoneList<HValue*> values_; | 2396 ZoneList<HValue*> values_; |
| 2387 int argument_count_; | 2397 int argument_count_; |
| 2398 CallMode call_mode_; |
| 2388 }; | 2399 }; |
| 2389 | 2400 |
| 2390 | 2401 |
| 2391 class HInvokeFunction FINAL : public HBinaryCall { | 2402 class HInvokeFunction FINAL : public HBinaryCall { |
| 2392 public: | 2403 public: |
| 2393 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInvokeFunction, HValue*, int); | 2404 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInvokeFunction, HValue*, int); |
| 2394 | 2405 |
| 2395 HInvokeFunction(HValue* context, | 2406 HInvokeFunction(HValue* context, |
| 2396 HValue* function, | 2407 HValue* function, |
| 2397 Handle<JSFunction> known_function, | 2408 Handle<JSFunction> known_function, |
| (...skipping 2949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5347 private: | 5358 private: |
| 5348 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count) | 5359 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count) |
| 5349 : HUnaryCall(context, argument_count), | 5360 : HUnaryCall(context, argument_count), |
| 5350 major_key_(major_key) { | 5361 major_key_(major_key) { |
| 5351 } | 5362 } |
| 5352 | 5363 |
| 5353 CodeStub::Major major_key_; | 5364 CodeStub::Major major_key_; |
| 5354 }; | 5365 }; |
| 5355 | 5366 |
| 5356 | 5367 |
| 5357 class HTailCallThroughMegamorphicCache FINAL : public HTemplateInstruction<3> { | 5368 class HTailCallThroughMegamorphicCache FINAL : public HInstruction { |
| 5358 public: | 5369 public: |
| 5359 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HTailCallThroughMegamorphicCache, | 5370 enum Flags { |
| 5360 HValue*, HValue*, Code::Flags); | 5371 NONE = 0, |
| 5372 CALLED_FROM_KEYED_LOAD = 1 << 0, |
| 5373 PERFORM_MISS_ONLY = 1 << 1 |
| 5374 }; |
| 5375 |
| 5376 static Flags ComputeFlags(bool called_from_keyed_load, |
| 5377 bool perform_miss_only) { |
| 5378 Flags flags = NONE; |
| 5379 if (called_from_keyed_load) { |
| 5380 flags = static_cast<Flags>(flags | CALLED_FROM_KEYED_LOAD); |
| 5381 } |
| 5382 if (perform_miss_only) { |
| 5383 flags = static_cast<Flags>(flags | PERFORM_MISS_ONLY); |
| 5384 } |
| 5385 return flags; |
| 5386 } |
| 5387 |
| 5388 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5( |
| 5389 HTailCallThroughMegamorphicCache, HValue*, HValue*, HValue*, HValue*, |
| 5390 HTailCallThroughMegamorphicCache::Flags); |
| 5391 |
| 5392 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HTailCallThroughMegamorphicCache, |
| 5393 HValue*, HValue*); |
| 5361 | 5394 |
| 5362 Representation RequiredInputRepresentation(int index) OVERRIDE { | 5395 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| 5363 return Representation::Tagged(); | 5396 return Representation::Tagged(); |
| 5364 } | 5397 } |
| 5365 | 5398 |
| 5399 virtual int OperandCount() const FINAL OVERRIDE { |
| 5400 return FLAG_vector_ics ? 5 : 3; |
| 5401 } |
| 5402 virtual HValue* OperandAt(int i) const FINAL OVERRIDE { return inputs_[i]; } |
| 5403 |
| 5366 HValue* context() const { return OperandAt(0); } | 5404 HValue* context() const { return OperandAt(0); } |
| 5367 HValue* receiver() const { return OperandAt(1); } | 5405 HValue* receiver() const { return OperandAt(1); } |
| 5368 HValue* name() const { return OperandAt(2); } | 5406 HValue* name() const { return OperandAt(2); } |
| 5369 Code::Flags flags() const { return flags_; } | 5407 HValue* slot() const { |
| 5408 DCHECK(FLAG_vector_ics); |
| 5409 return OperandAt(3); |
| 5410 } |
| 5411 HValue* vector() const { |
| 5412 DCHECK(FLAG_vector_ics); |
| 5413 return OperandAt(4); |
| 5414 } |
| 5415 Code::Flags flags() const; |
| 5416 |
| 5417 bool is_keyed_load() const { return flags_ & CALLED_FROM_KEYED_LOAD; } |
| 5418 bool is_just_miss() const { return flags_ & PERFORM_MISS_ONLY; } |
| 5370 | 5419 |
| 5371 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 5420 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 5372 | 5421 |
| 5373 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache) | 5422 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache) |
| 5374 | 5423 |
| 5424 protected: |
| 5425 virtual void InternalSetOperandAt(int i, HValue* value) FINAL OVERRIDE { |
| 5426 inputs_[i] = value; |
| 5427 } |
| 5428 |
| 5375 private: | 5429 private: |
| 5376 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, | 5430 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, |
| 5377 HValue* name, Code::Flags flags) | 5431 HValue* name, HValue* slot, HValue* vector, |
| 5432 Flags flags) |
| 5378 : flags_(flags) { | 5433 : flags_(flags) { |
| 5434 DCHECK(FLAG_vector_ics); |
| 5435 SetOperandAt(0, context); |
| 5436 SetOperandAt(1, receiver); |
| 5437 SetOperandAt(2, name); |
| 5438 SetOperandAt(3, slot); |
| 5439 SetOperandAt(4, vector); |
| 5440 } |
| 5441 |
| 5442 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, |
| 5443 HValue* name) |
| 5444 : flags_(NONE) { |
| 5379 SetOperandAt(0, context); | 5445 SetOperandAt(0, context); |
| 5380 SetOperandAt(1, receiver); | 5446 SetOperandAt(1, receiver); |
| 5381 SetOperandAt(2, name); | 5447 SetOperandAt(2, name); |
| 5382 } | 5448 } |
| 5383 | 5449 |
| 5384 Code::Flags flags_; | 5450 EmbeddedContainer<HValue*, 5> inputs_; |
| 5451 Flags flags_; |
| 5385 }; | 5452 }; |
| 5386 | 5453 |
| 5387 | 5454 |
| 5388 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> { | 5455 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> { |
| 5389 public: | 5456 public: |
| 5390 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int); | 5457 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int); |
| 5391 | 5458 |
| 5392 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 5459 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 5393 | 5460 |
| 5394 Representation RequiredInputRepresentation(int index) OVERRIDE { | 5461 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5463 | 5530 |
| 5464 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> { | 5531 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> { |
| 5465 public: | 5532 public: |
| 5466 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*, | 5533 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*, |
| 5467 Handle<String>, bool); | 5534 Handle<String>, bool); |
| 5468 | 5535 |
| 5469 HValue* context() { return OperandAt(0); } | 5536 HValue* context() { return OperandAt(0); } |
| 5470 HValue* global_object() { return OperandAt(1); } | 5537 HValue* global_object() { return OperandAt(1); } |
| 5471 Handle<String> name() const { return name_; } | 5538 Handle<String> name() const { return name_; } |
| 5472 bool for_typeof() const { return for_typeof_; } | 5539 bool for_typeof() const { return for_typeof_; } |
| 5473 FeedbackVectorICSlot slot() const { | 5540 FeedbackVectorICSlot slot() const { return slot_; } |
| 5474 DCHECK(FLAG_vector_ics && !slot_.IsInvalid()); | |
| 5475 return slot_; | |
| 5476 } | |
| 5477 Handle<TypeFeedbackVector> feedback_vector() const { | 5541 Handle<TypeFeedbackVector> feedback_vector() const { |
| 5478 return feedback_vector_; | 5542 return feedback_vector_; |
| 5479 } | 5543 } |
| 5544 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
| 5480 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 5545 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
| 5481 FeedbackVectorICSlot slot) { | 5546 FeedbackVectorICSlot slot) { |
| 5482 DCHECK(FLAG_vector_ics); | 5547 DCHECK(FLAG_vector_ics); |
| 5483 feedback_vector_ = vector; | 5548 feedback_vector_ = vector; |
| 5484 slot_ = slot; | 5549 slot_ = slot; |
| 5485 } | 5550 } |
| 5486 | 5551 |
| 5487 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 5552 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 5488 | 5553 |
| 5489 Representation RequiredInputRepresentation(int index) OVERRIDE { | 5554 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| (...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6522 | 6587 |
| 6523 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { | 6588 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { |
| 6524 public: | 6589 public: |
| 6525 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, | 6590 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, |
| 6526 Handle<Object>); | 6591 Handle<Object>); |
| 6527 | 6592 |
| 6528 HValue* context() const { return OperandAt(0); } | 6593 HValue* context() const { return OperandAt(0); } |
| 6529 HValue* object() const { return OperandAt(1); } | 6594 HValue* object() const { return OperandAt(1); } |
| 6530 Handle<Object> name() const { return name_; } | 6595 Handle<Object> name() const { return name_; } |
| 6531 | 6596 |
| 6532 FeedbackVectorICSlot slot() const { | 6597 FeedbackVectorICSlot slot() const { return slot_; } |
| 6533 DCHECK(FLAG_vector_ics && !slot_.IsInvalid()); | |
| 6534 return slot_; | |
| 6535 } | |
| 6536 Handle<TypeFeedbackVector> feedback_vector() const { | 6598 Handle<TypeFeedbackVector> feedback_vector() const { |
| 6537 return feedback_vector_; | 6599 return feedback_vector_; |
| 6538 } | 6600 } |
| 6601 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
| 6539 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 6602 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
| 6540 FeedbackVectorICSlot slot) { | 6603 FeedbackVectorICSlot slot) { |
| 6541 DCHECK(FLAG_vector_ics); | 6604 DCHECK(FLAG_vector_ics); |
| 6542 feedback_vector_ = vector; | 6605 feedback_vector_ = vector; |
| 6543 slot_ = slot; | 6606 slot_ = slot; |
| 6544 } | 6607 } |
| 6545 | 6608 |
| 6546 Representation RequiredInputRepresentation(int index) OVERRIDE { | 6609 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| 6547 return Representation::Tagged(); | 6610 return Representation::Tagged(); |
| 6548 } | 6611 } |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6687 | 6750 |
| 6688 Range* InferRange(Zone* zone) OVERRIDE; | 6751 Range* InferRange(Zone* zone) OVERRIDE; |
| 6689 | 6752 |
| 6690 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) | 6753 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) |
| 6691 | 6754 |
| 6692 protected: | 6755 protected: |
| 6693 bool DataEquals(HValue* other) OVERRIDE { | 6756 bool DataEquals(HValue* other) OVERRIDE { |
| 6694 if (!other->IsLoadKeyed()) return false; | 6757 if (!other->IsLoadKeyed()) return false; |
| 6695 HLoadKeyed* other_load = HLoadKeyed::cast(other); | 6758 HLoadKeyed* other_load = HLoadKeyed::cast(other); |
| 6696 | 6759 |
| 6697 if (IsDehoisted() && base_offset() != other_load->base_offset()) | 6760 if (base_offset() != other_load->base_offset()) return false; |
| 6698 return false; | |
| 6699 return elements_kind() == other_load->elements_kind(); | 6761 return elements_kind() == other_load->elements_kind(); |
| 6700 } | 6762 } |
| 6701 | 6763 |
| 6702 private: | 6764 private: |
| 6703 HLoadKeyed(HValue* obj, | 6765 HLoadKeyed(HValue* obj, |
| 6704 HValue* key, | 6766 HValue* key, |
| 6705 HValue* dependency, | 6767 HValue* dependency, |
| 6706 ElementsKind elements_kind, | 6768 ElementsKind elements_kind, |
| 6707 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, | 6769 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, |
| 6708 int offset = kDefaultKeyedHeaderOffsetSentinel) | 6770 int offset = kDefaultKeyedHeaderOffsetSentinel) |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6801 }; | 6863 }; |
| 6802 | 6864 |
| 6803 | 6865 |
| 6804 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { | 6866 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { |
| 6805 public: | 6867 public: |
| 6806 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, | 6868 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, |
| 6807 HValue*); | 6869 HValue*); |
| 6808 HValue* object() const { return OperandAt(0); } | 6870 HValue* object() const { return OperandAt(0); } |
| 6809 HValue* key() const { return OperandAt(1); } | 6871 HValue* key() const { return OperandAt(1); } |
| 6810 HValue* context() const { return OperandAt(2); } | 6872 HValue* context() const { return OperandAt(2); } |
| 6811 FeedbackVectorICSlot slot() const { | 6873 FeedbackVectorICSlot slot() const { return slot_; } |
| 6812 DCHECK(FLAG_vector_ics && !slot_.IsInvalid()); | |
| 6813 return slot_; | |
| 6814 } | |
| 6815 Handle<TypeFeedbackVector> feedback_vector() const { | 6874 Handle<TypeFeedbackVector> feedback_vector() const { |
| 6816 return feedback_vector_; | 6875 return feedback_vector_; |
| 6817 } | 6876 } |
| 6877 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
| 6818 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 6878 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
| 6819 FeedbackVectorICSlot slot) { | 6879 FeedbackVectorICSlot slot) { |
| 6820 DCHECK(FLAG_vector_ics); | 6880 DCHECK(FLAG_vector_ics); |
| 6821 feedback_vector_ = vector; | 6881 feedback_vector_ = vector; |
| 6822 slot_ = slot; | 6882 slot_ = slot; |
| 6823 } | 6883 } |
| 6824 | 6884 |
| 6825 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 6885 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 6826 | 6886 |
| 6827 Representation RequiredInputRepresentation(int index) OVERRIDE { | 6887 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| (...skipping 1132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7960 }; | 8020 }; |
| 7961 | 8021 |
| 7962 | 8022 |
| 7963 | 8023 |
| 7964 #undef DECLARE_INSTRUCTION | 8024 #undef DECLARE_INSTRUCTION |
| 7965 #undef DECLARE_CONCRETE_INSTRUCTION | 8025 #undef DECLARE_CONCRETE_INSTRUCTION |
| 7966 | 8026 |
| 7967 } } // namespace v8::internal | 8027 } } // namespace v8::internal |
| 7968 | 8028 |
| 7969 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 8029 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
| OLD | NEW |