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 2320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2331 pass_argument_count_(pass_argument_count), | 2331 pass_argument_count_(pass_argument_count), |
2332 has_stack_check_(has_stack_check) { | 2332 has_stack_check_(has_stack_check) { |
2333 SetOperandAt(0, function); | 2333 SetOperandAt(0, function); |
2334 } | 2334 } |
2335 | 2335 |
2336 bool pass_argument_count_; | 2336 bool pass_argument_count_; |
2337 bool has_stack_check_; | 2337 bool has_stack_check_; |
2338 }; | 2338 }; |
2339 | 2339 |
2340 | 2340 |
| 2341 enum CallMode { NORMAL_CALL, TAIL_CALL }; |
| 2342 |
| 2343 |
2341 class HCallWithDescriptor FINAL : public HInstruction { | 2344 class HCallWithDescriptor FINAL : public HInstruction { |
2342 public: | 2345 public: |
2343 static HCallWithDescriptor* New(Zone* zone, HValue* context, HValue* target, | 2346 static HCallWithDescriptor* New(Zone* zone, HValue* context, HValue* target, |
2344 int argument_count, | 2347 int argument_count, |
2345 CallInterfaceDescriptor descriptor, | 2348 CallInterfaceDescriptor descriptor, |
2346 const Vector<HValue*>& operands) { | 2349 const Vector<HValue*>& operands, |
| 2350 CallMode call_mode = NORMAL_CALL) { |
2347 DCHECK(operands.length() == descriptor.GetEnvironmentLength()); | 2351 DCHECK(operands.length() == descriptor.GetEnvironmentLength()); |
2348 HCallWithDescriptor* res = new (zone) | 2352 HCallWithDescriptor* res = new (zone) HCallWithDescriptor( |
2349 HCallWithDescriptor(target, argument_count, descriptor, operands, zone); | 2353 target, argument_count, descriptor, operands, call_mode, zone); |
2350 return res; | 2354 return res; |
2351 } | 2355 } |
2352 | 2356 |
2353 virtual int OperandCount() const FINAL OVERRIDE { | 2357 virtual int OperandCount() const FINAL OVERRIDE { |
2354 return values_.length(); | 2358 return values_.length(); |
2355 } | 2359 } |
2356 virtual HValue* OperandAt(int index) const FINAL OVERRIDE { | 2360 virtual HValue* OperandAt(int index) const FINAL OVERRIDE { |
2357 return values_[index]; | 2361 return values_[index]; |
2358 } | 2362 } |
2359 | 2363 |
2360 virtual Representation RequiredInputRepresentation( | 2364 virtual Representation RequiredInputRepresentation( |
2361 int index) FINAL OVERRIDE { | 2365 int index) FINAL OVERRIDE { |
2362 if (index == 0) { | 2366 if (index == 0) { |
2363 return Representation::Tagged(); | 2367 return Representation::Tagged(); |
2364 } else { | 2368 } else { |
2365 int par_index = index - 1; | 2369 int par_index = index - 1; |
2366 DCHECK(par_index < descriptor_.GetEnvironmentLength()); | 2370 DCHECK(par_index < descriptor_.GetEnvironmentLength()); |
2367 return descriptor_.GetParameterRepresentation(par_index); | 2371 return descriptor_.GetParameterRepresentation(par_index); |
2368 } | 2372 } |
2369 } | 2373 } |
2370 | 2374 |
2371 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor) | 2375 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor) |
2372 | 2376 |
2373 virtual HType CalculateInferredType() FINAL OVERRIDE { | 2377 virtual HType CalculateInferredType() FINAL OVERRIDE { |
2374 return HType::Tagged(); | 2378 return HType::Tagged(); |
2375 } | 2379 } |
2376 | 2380 |
| 2381 bool IsTailCall() const { return call_mode_ == TAIL_CALL; } |
| 2382 |
2377 virtual int argument_count() const { | 2383 virtual int argument_count() const { |
2378 return argument_count_; | 2384 return argument_count_; |
2379 } | 2385 } |
2380 | 2386 |
2381 virtual int argument_delta() const OVERRIDE { | 2387 virtual int argument_delta() const OVERRIDE { |
2382 return -argument_count_; | 2388 return -argument_count_; |
2383 } | 2389 } |
2384 | 2390 |
2385 CallInterfaceDescriptor descriptor() const { return descriptor_; } | 2391 CallInterfaceDescriptor descriptor() const { return descriptor_; } |
2386 | 2392 |
2387 HValue* target() { | 2393 HValue* target() { |
2388 return OperandAt(0); | 2394 return OperandAt(0); |
2389 } | 2395 } |
2390 | 2396 |
2391 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 2397 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
2392 | 2398 |
2393 private: | 2399 private: |
2394 // The argument count includes the receiver. | 2400 // The argument count includes the receiver. |
2395 HCallWithDescriptor(HValue* target, int argument_count, | 2401 HCallWithDescriptor(HValue* target, int argument_count, |
2396 CallInterfaceDescriptor descriptor, | 2402 CallInterfaceDescriptor descriptor, |
2397 const Vector<HValue*>& operands, Zone* zone) | 2403 const Vector<HValue*>& operands, CallMode call_mode, |
| 2404 Zone* zone) |
2398 : descriptor_(descriptor), | 2405 : descriptor_(descriptor), |
2399 values_(descriptor.GetEnvironmentLength() + 1, zone) { | 2406 values_(descriptor.GetEnvironmentLength() + 1, zone), |
2400 argument_count_ = argument_count; | 2407 argument_count_(argument_count), |
| 2408 call_mode_(call_mode) { |
| 2409 // We can only tail call without any stack arguments. |
| 2410 DCHECK(call_mode != TAIL_CALL || argument_count == 0); |
2401 AddOperand(target, zone); | 2411 AddOperand(target, zone); |
2402 for (int i = 0; i < operands.length(); i++) { | 2412 for (int i = 0; i < operands.length(); i++) { |
2403 AddOperand(operands[i], zone); | 2413 AddOperand(operands[i], zone); |
2404 } | 2414 } |
2405 this->set_representation(Representation::Tagged()); | 2415 this->set_representation(Representation::Tagged()); |
2406 this->SetAllSideEffects(); | 2416 this->SetAllSideEffects(); |
2407 } | 2417 } |
2408 | 2418 |
2409 void AddOperand(HValue* v, Zone* zone) { | 2419 void AddOperand(HValue* v, Zone* zone) { |
2410 values_.Add(NULL, zone); | 2420 values_.Add(NULL, zone); |
2411 SetOperandAt(values_.length() - 1, v); | 2421 SetOperandAt(values_.length() - 1, v); |
2412 } | 2422 } |
2413 | 2423 |
2414 void InternalSetOperandAt(int index, | 2424 void InternalSetOperandAt(int index, |
2415 HValue* value) FINAL OVERRIDE { | 2425 HValue* value) FINAL OVERRIDE { |
2416 values_[index] = value; | 2426 values_[index] = value; |
2417 } | 2427 } |
2418 | 2428 |
2419 CallInterfaceDescriptor descriptor_; | 2429 CallInterfaceDescriptor descriptor_; |
2420 ZoneList<HValue*> values_; | 2430 ZoneList<HValue*> values_; |
2421 int argument_count_; | 2431 int argument_count_; |
| 2432 CallMode call_mode_; |
2422 }; | 2433 }; |
2423 | 2434 |
2424 | 2435 |
2425 class HInvokeFunction FINAL : public HBinaryCall { | 2436 class HInvokeFunction FINAL : public HBinaryCall { |
2426 public: | 2437 public: |
2427 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInvokeFunction, HValue*, int); | 2438 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInvokeFunction, HValue*, int); |
2428 | 2439 |
2429 HInvokeFunction(HValue* context, | 2440 HInvokeFunction(HValue* context, |
2430 HValue* function, | 2441 HValue* function, |
2431 Handle<JSFunction> known_function, | 2442 Handle<JSFunction> known_function, |
(...skipping 2967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5399 private: | 5410 private: |
5400 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count) | 5411 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count) |
5401 : HUnaryCall(context, argument_count), | 5412 : HUnaryCall(context, argument_count), |
5402 major_key_(major_key) { | 5413 major_key_(major_key) { |
5403 } | 5414 } |
5404 | 5415 |
5405 CodeStub::Major major_key_; | 5416 CodeStub::Major major_key_; |
5406 }; | 5417 }; |
5407 | 5418 |
5408 | 5419 |
5409 class HTailCallThroughMegamorphicCache FINAL : public HTemplateInstruction<3> { | 5420 class HTailCallThroughMegamorphicCache FINAL : public HInstruction { |
5410 public: | 5421 public: |
5411 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HTailCallThroughMegamorphicCache, | 5422 enum Flags { |
5412 HValue*, HValue*, Code::Flags); | 5423 NONE = 0, |
| 5424 CALLED_FROM_KEYED_LOAD = 1 << 0, |
| 5425 PERFORM_MISS_ONLY = 1 << 1 |
| 5426 }; |
| 5427 |
| 5428 static Flags ComputeFlags(bool called_from_keyed_load, |
| 5429 bool perform_miss_only) { |
| 5430 Flags flags = NONE; |
| 5431 if (called_from_keyed_load) { |
| 5432 flags = static_cast<Flags>(flags | CALLED_FROM_KEYED_LOAD); |
| 5433 } |
| 5434 if (perform_miss_only) { |
| 5435 flags = static_cast<Flags>(flags | PERFORM_MISS_ONLY); |
| 5436 } |
| 5437 return flags; |
| 5438 } |
| 5439 |
| 5440 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5( |
| 5441 HTailCallThroughMegamorphicCache, HValue*, HValue*, HValue*, HValue*, |
| 5442 HTailCallThroughMegamorphicCache::Flags); |
| 5443 |
| 5444 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HTailCallThroughMegamorphicCache, |
| 5445 HValue*, HValue*); |
5413 | 5446 |
5414 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { | 5447 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { |
5415 return Representation::Tagged(); | 5448 return Representation::Tagged(); |
5416 } | 5449 } |
5417 | 5450 |
| 5451 virtual int OperandCount() const FINAL OVERRIDE { |
| 5452 return FLAG_vector_ics ? 5 : 3; |
| 5453 } |
| 5454 virtual HValue* OperandAt(int i) const FINAL OVERRIDE { return inputs_[i]; } |
| 5455 |
5418 HValue* context() const { return OperandAt(0); } | 5456 HValue* context() const { return OperandAt(0); } |
5419 HValue* receiver() const { return OperandAt(1); } | 5457 HValue* receiver() const { return OperandAt(1); } |
5420 HValue* name() const { return OperandAt(2); } | 5458 HValue* name() const { return OperandAt(2); } |
5421 Code::Flags flags() const { return flags_; } | 5459 HValue* slot() const { |
| 5460 DCHECK(FLAG_vector_ics); |
| 5461 return OperandAt(3); |
| 5462 } |
| 5463 HValue* vector() const { |
| 5464 DCHECK(FLAG_vector_ics); |
| 5465 return OperandAt(4); |
| 5466 } |
| 5467 Code::Flags flags() const; |
| 5468 |
| 5469 bool is_keyed_load() const { return flags_ & CALLED_FROM_KEYED_LOAD; } |
| 5470 bool is_just_miss() const { return flags_ & PERFORM_MISS_ONLY; } |
5422 | 5471 |
5423 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 5472 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
5424 | 5473 |
5425 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache) | 5474 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache) |
5426 | 5475 |
| 5476 protected: |
| 5477 virtual void InternalSetOperandAt(int i, HValue* value) FINAL OVERRIDE { |
| 5478 inputs_[i] = value; |
| 5479 } |
| 5480 |
5427 private: | 5481 private: |
5428 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, | 5482 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, |
5429 HValue* name, Code::Flags flags) | 5483 HValue* name, HValue* slot, HValue* vector, |
| 5484 Flags flags) |
5430 : flags_(flags) { | 5485 : flags_(flags) { |
| 5486 DCHECK(FLAG_vector_ics); |
| 5487 SetOperandAt(0, context); |
| 5488 SetOperandAt(1, receiver); |
| 5489 SetOperandAt(2, name); |
| 5490 SetOperandAt(3, slot); |
| 5491 SetOperandAt(4, vector); |
| 5492 } |
| 5493 |
| 5494 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, |
| 5495 HValue* name) |
| 5496 : flags_(NONE) { |
5431 SetOperandAt(0, context); | 5497 SetOperandAt(0, context); |
5432 SetOperandAt(1, receiver); | 5498 SetOperandAt(1, receiver); |
5433 SetOperandAt(2, name); | 5499 SetOperandAt(2, name); |
5434 } | 5500 } |
5435 | 5501 |
5436 Code::Flags flags_; | 5502 EmbeddedContainer<HValue*, 5> inputs_; |
| 5503 Flags flags_; |
5437 }; | 5504 }; |
5438 | 5505 |
5439 | 5506 |
5440 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> { | 5507 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> { |
5441 public: | 5508 public: |
5442 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int); | 5509 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int); |
5443 | 5510 |
5444 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 5511 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
5445 | 5512 |
5446 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { | 5513 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5519 | 5586 |
5520 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> { | 5587 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> { |
5521 public: | 5588 public: |
5522 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*, | 5589 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*, |
5523 Handle<String>, bool); | 5590 Handle<String>, bool); |
5524 | 5591 |
5525 HValue* context() { return OperandAt(0); } | 5592 HValue* context() { return OperandAt(0); } |
5526 HValue* global_object() { return OperandAt(1); } | 5593 HValue* global_object() { return OperandAt(1); } |
5527 Handle<String> name() const { return name_; } | 5594 Handle<String> name() const { return name_; } |
5528 bool for_typeof() const { return for_typeof_; } | 5595 bool for_typeof() const { return for_typeof_; } |
5529 FeedbackVectorICSlot slot() const { | 5596 FeedbackVectorICSlot slot() const { return slot_; } |
5530 DCHECK(FLAG_vector_ics && !slot_.IsInvalid()); | |
5531 return slot_; | |
5532 } | |
5533 Handle<TypeFeedbackVector> feedback_vector() const { | 5597 Handle<TypeFeedbackVector> feedback_vector() const { |
5534 return feedback_vector_; | 5598 return feedback_vector_; |
5535 } | 5599 } |
| 5600 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
5536 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 5601 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
5537 FeedbackVectorICSlot slot) { | 5602 FeedbackVectorICSlot slot) { |
5538 DCHECK(FLAG_vector_ics); | 5603 DCHECK(FLAG_vector_ics); |
5539 feedback_vector_ = vector; | 5604 feedback_vector_ = vector; |
5540 slot_ = slot; | 5605 slot_ = slot; |
5541 } | 5606 } |
5542 | 5607 |
5543 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 5608 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
5544 | 5609 |
5545 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { | 5610 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { |
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6529 | 6594 |
6530 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { | 6595 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { |
6531 public: | 6596 public: |
6532 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, | 6597 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, |
6533 Handle<Object>); | 6598 Handle<Object>); |
6534 | 6599 |
6535 HValue* context() const { return OperandAt(0); } | 6600 HValue* context() const { return OperandAt(0); } |
6536 HValue* object() const { return OperandAt(1); } | 6601 HValue* object() const { return OperandAt(1); } |
6537 Handle<Object> name() const { return name_; } | 6602 Handle<Object> name() const { return name_; } |
6538 | 6603 |
6539 FeedbackVectorICSlot slot() const { | 6604 FeedbackVectorICSlot slot() const { return slot_; } |
6540 DCHECK(FLAG_vector_ics && !slot_.IsInvalid()); | |
6541 return slot_; | |
6542 } | |
6543 Handle<TypeFeedbackVector> feedback_vector() const { | 6605 Handle<TypeFeedbackVector> feedback_vector() const { |
6544 return feedback_vector_; | 6606 return feedback_vector_; |
6545 } | 6607 } |
| 6608 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
6546 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 6609 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
6547 FeedbackVectorICSlot slot) { | 6610 FeedbackVectorICSlot slot) { |
6548 DCHECK(FLAG_vector_ics); | 6611 DCHECK(FLAG_vector_ics); |
6549 feedback_vector_ = vector; | 6612 feedback_vector_ = vector; |
6550 slot_ = slot; | 6613 slot_ = slot; |
6551 } | 6614 } |
6552 | 6615 |
6553 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { | 6616 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { |
6554 return Representation::Tagged(); | 6617 return Representation::Tagged(); |
6555 } | 6618 } |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6694 | 6757 |
6695 virtual Range* InferRange(Zone* zone) OVERRIDE; | 6758 virtual Range* InferRange(Zone* zone) OVERRIDE; |
6696 | 6759 |
6697 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) | 6760 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) |
6698 | 6761 |
6699 protected: | 6762 protected: |
6700 virtual bool DataEquals(HValue* other) OVERRIDE { | 6763 virtual bool DataEquals(HValue* other) OVERRIDE { |
6701 if (!other->IsLoadKeyed()) return false; | 6764 if (!other->IsLoadKeyed()) return false; |
6702 HLoadKeyed* other_load = HLoadKeyed::cast(other); | 6765 HLoadKeyed* other_load = HLoadKeyed::cast(other); |
6703 | 6766 |
6704 if (IsDehoisted() && base_offset() != other_load->base_offset()) | 6767 if (base_offset() != other_load->base_offset()) return false; |
6705 return false; | |
6706 return elements_kind() == other_load->elements_kind(); | 6768 return elements_kind() == other_load->elements_kind(); |
6707 } | 6769 } |
6708 | 6770 |
6709 private: | 6771 private: |
6710 HLoadKeyed(HValue* obj, | 6772 HLoadKeyed(HValue* obj, |
6711 HValue* key, | 6773 HValue* key, |
6712 HValue* dependency, | 6774 HValue* dependency, |
6713 ElementsKind elements_kind, | 6775 ElementsKind elements_kind, |
6714 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, | 6776 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, |
6715 int offset = kDefaultKeyedHeaderOffsetSentinel) | 6777 int offset = kDefaultKeyedHeaderOffsetSentinel) |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6810 }; | 6872 }; |
6811 | 6873 |
6812 | 6874 |
6813 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { | 6875 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { |
6814 public: | 6876 public: |
6815 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, | 6877 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, |
6816 HValue*); | 6878 HValue*); |
6817 HValue* object() const { return OperandAt(0); } | 6879 HValue* object() const { return OperandAt(0); } |
6818 HValue* key() const { return OperandAt(1); } | 6880 HValue* key() const { return OperandAt(1); } |
6819 HValue* context() const { return OperandAt(2); } | 6881 HValue* context() const { return OperandAt(2); } |
6820 FeedbackVectorICSlot slot() const { | 6882 FeedbackVectorICSlot slot() const { return slot_; } |
6821 DCHECK(FLAG_vector_ics && !slot_.IsInvalid()); | |
6822 return slot_; | |
6823 } | |
6824 Handle<TypeFeedbackVector> feedback_vector() const { | 6883 Handle<TypeFeedbackVector> feedback_vector() const { |
6825 return feedback_vector_; | 6884 return feedback_vector_; |
6826 } | 6885 } |
| 6886 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
6827 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 6887 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
6828 FeedbackVectorICSlot slot) { | 6888 FeedbackVectorICSlot slot) { |
6829 DCHECK(FLAG_vector_ics); | 6889 DCHECK(FLAG_vector_ics); |
6830 feedback_vector_ = vector; | 6890 feedback_vector_ = vector; |
6831 slot_ = slot; | 6891 slot_ = slot; |
6832 } | 6892 } |
6833 | 6893 |
6834 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 6894 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
6835 | 6895 |
6836 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { | 6896 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { |
(...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7979 }; | 8039 }; |
7980 | 8040 |
7981 | 8041 |
7982 | 8042 |
7983 #undef DECLARE_INSTRUCTION | 8043 #undef DECLARE_INSTRUCTION |
7984 #undef DECLARE_CONCRETE_INSTRUCTION | 8044 #undef DECLARE_CONCRETE_INSTRUCTION |
7985 | 8045 |
7986 } } // namespace v8::internal | 8046 } } // namespace v8::internal |
7987 | 8047 |
7988 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 8048 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |