Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: src/hydrogen-instructions.h

Issue 12049012: Avoid handle dereference during graph optimization. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 GETTER_CALL_RETURN, // Returning from a getter, need to restore context. 1489 GETTER_CALL_RETURN, // Returning from a getter, need to restore context.
1490 SETTER_CALL_RETURN // Use the RHS of the assignment as the return value. 1490 SETTER_CALL_RETURN // Use the RHS of the assignment as the return value.
1491 }; 1491 };
1492 1492
1493 1493
1494 class HEnterInlined: public HTemplateInstruction<0> { 1494 class HEnterInlined: public HTemplateInstruction<0> {
1495 public: 1495 public:
1496 HEnterInlined(Handle<JSFunction> closure, 1496 HEnterInlined(Handle<JSFunction> closure,
1497 int arguments_count, 1497 int arguments_count,
1498 FunctionLiteral* function, 1498 FunctionLiteral* function,
1499 CallKind call_kind,
1500 InliningKind inlining_kind, 1499 InliningKind inlining_kind,
1501 Variable* arguments_var, 1500 Variable* arguments_var,
1502 ZoneList<HValue*>* arguments_values) 1501 ZoneList<HValue*>* arguments_values,
1502 bool undefined_receiver)
1503 : closure_(closure), 1503 : closure_(closure),
1504 arguments_count_(arguments_count), 1504 arguments_count_(arguments_count),
1505 arguments_pushed_(false), 1505 arguments_pushed_(false),
1506 function_(function), 1506 function_(function),
1507 call_kind_(call_kind),
1508 inlining_kind_(inlining_kind), 1507 inlining_kind_(inlining_kind),
1509 arguments_var_(arguments_var), 1508 arguments_var_(arguments_var),
1510 arguments_values_(arguments_values) { 1509 arguments_values_(arguments_values),
1510 undefined_receiver_(undefined_receiver) {
1511 } 1511 }
1512 1512
1513 virtual void PrintDataTo(StringStream* stream); 1513 virtual void PrintDataTo(StringStream* stream);
1514 1514
1515 Handle<JSFunction> closure() const { return closure_; } 1515 Handle<JSFunction> closure() const { return closure_; }
1516 int arguments_count() const { return arguments_count_; } 1516 int arguments_count() const { return arguments_count_; }
1517 bool arguments_pushed() const { return arguments_pushed_; } 1517 bool arguments_pushed() const { return arguments_pushed_; }
1518 void set_arguments_pushed() { arguments_pushed_ = true; } 1518 void set_arguments_pushed() { arguments_pushed_ = true; }
1519 FunctionLiteral* function() const { return function_; } 1519 FunctionLiteral* function() const { return function_; }
1520 CallKind call_kind() const { return call_kind_; }
1521 InliningKind inlining_kind() const { return inlining_kind_; } 1520 InliningKind inlining_kind() const { return inlining_kind_; }
1521 bool undefined_receiver() const { return undefined_receiver_; }
1522 1522
1523 virtual Representation RequiredInputRepresentation(int index) { 1523 virtual Representation RequiredInputRepresentation(int index) {
1524 return Representation::None(); 1524 return Representation::None();
1525 } 1525 }
1526 1526
1527 Variable* arguments_var() { return arguments_var_; } 1527 Variable* arguments_var() { return arguments_var_; }
1528 ZoneList<HValue*>* arguments_values() { return arguments_values_; } 1528 ZoneList<HValue*>* arguments_values() { return arguments_values_; }
1529 1529
1530 DECLARE_CONCRETE_INSTRUCTION(EnterInlined) 1530 DECLARE_CONCRETE_INSTRUCTION(EnterInlined)
1531 1531
1532 private: 1532 private:
1533 Handle<JSFunction> closure_; 1533 Handle<JSFunction> closure_;
1534 int arguments_count_; 1534 int arguments_count_;
1535 bool arguments_pushed_; 1535 bool arguments_pushed_;
1536 FunctionLiteral* function_; 1536 FunctionLiteral* function_;
1537 CallKind call_kind_;
1538 InliningKind inlining_kind_; 1537 InliningKind inlining_kind_;
1539 Variable* arguments_var_; 1538 Variable* arguments_var_;
1540 ZoneList<HValue*>* arguments_values_; 1539 ZoneList<HValue*>* arguments_values_;
1540 bool undefined_receiver_;
1541 }; 1541 };
1542 1542
1543 1543
1544 class HLeaveInlined: public HTemplateInstruction<0> { 1544 class HLeaveInlined: public HTemplateInstruction<0> {
1545 public: 1545 public:
1546 HLeaveInlined() { } 1546 HLeaveInlined() { }
1547 1547
1548 virtual Representation RequiredInputRepresentation(int index) { 1548 virtual Representation RequiredInputRepresentation(int index) {
1549 return Representation::None(); 1549 return Representation::None();
1550 } 1550 }
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
2315 SmallMapList map_set_; 2315 SmallMapList map_set_;
2316 }; 2316 };
2317 2317
2318 2318
2319 class HCheckFunction: public HUnaryOperation { 2319 class HCheckFunction: public HUnaryOperation {
2320 public: 2320 public:
2321 HCheckFunction(HValue* value, Handle<JSFunction> function) 2321 HCheckFunction(HValue* value, Handle<JSFunction> function)
2322 : HUnaryOperation(value), target_(function) { 2322 : HUnaryOperation(value), target_(function) {
2323 set_representation(Representation::Tagged()); 2323 set_representation(Representation::Tagged());
2324 SetFlag(kUseGVN); 2324 SetFlag(kUseGVN);
2325 target_in_new_space_ = Isolate::Current()->heap()->InNewSpace(*function);
2325 } 2326 }
2326 2327
2327 virtual Representation RequiredInputRepresentation(int index) { 2328 virtual Representation RequiredInputRepresentation(int index) {
2328 return Representation::Tagged(); 2329 return Representation::Tagged();
2329 } 2330 }
2330 virtual void PrintDataTo(StringStream* stream); 2331 virtual void PrintDataTo(StringStream* stream);
2331 virtual HType CalculateInferredType(); 2332 virtual HType CalculateInferredType();
2332 2333
2333 #ifdef DEBUG 2334 #ifdef DEBUG
2334 virtual void Verify(); 2335 virtual void Verify();
2335 #endif 2336 #endif
2336 2337
2337 Handle<JSFunction> target() const { return target_; } 2338 Handle<JSFunction> target() const { return target_; }
2339 bool target_in_new_space() const { return target_in_new_space_; }
2338 2340
2339 DECLARE_CONCRETE_INSTRUCTION(CheckFunction) 2341 DECLARE_CONCRETE_INSTRUCTION(CheckFunction)
2340 2342
2341 protected: 2343 protected:
2342 virtual bool DataEquals(HValue* other) { 2344 virtual bool DataEquals(HValue* other) {
2343 HCheckFunction* b = HCheckFunction::cast(other); 2345 HCheckFunction* b = HCheckFunction::cast(other);
2344 return target_.is_identical_to(b->target()); 2346 return target_.is_identical_to(b->target());
2345 } 2347 }
2346 2348
2347 private: 2349 private:
2348 Handle<JSFunction> target_; 2350 Handle<JSFunction> target_;
2351 bool target_in_new_space_;
2349 }; 2352 };
2350 2353
2351 2354
2352 class HCheckInstanceType: public HUnaryOperation { 2355 class HCheckInstanceType: public HUnaryOperation {
2353 public: 2356 public:
2354 static HCheckInstanceType* NewIsSpecObject(HValue* value, Zone* zone) { 2357 static HCheckInstanceType* NewIsSpecObject(HValue* value, Zone* zone) {
2355 return new(zone) HCheckInstanceType(value, IS_SPEC_OBJECT); 2358 return new(zone) HCheckInstanceType(value, IS_SPEC_OBJECT);
2356 } 2359 }
2357 static HCheckInstanceType* NewIsJSArray(HValue* value, Zone* zone) { 2360 static HCheckInstanceType* NewIsJSArray(HValue* value, Zone* zone) {
2358 return new(zone) HCheckInstanceType(value, IS_JS_ARRAY); 2361 return new(zone) HCheckInstanceType(value, IS_JS_ARRAY);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
2468 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps) 2471 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps)
2469 2472
2470 virtual Representation RequiredInputRepresentation(int index) { 2473 virtual Representation RequiredInputRepresentation(int index) {
2471 return Representation::None(); 2474 return Representation::None();
2472 } 2475 }
2473 2476
2474 virtual void PrintDataTo(StringStream* stream); 2477 virtual void PrintDataTo(StringStream* stream);
2475 2478
2476 virtual intptr_t Hashcode() { 2479 virtual intptr_t Hashcode() {
2477 ASSERT_ALLOCATION_DISABLED; 2480 ASSERT_ALLOCATION_DISABLED;
2481 // Dereferencing to use the object's raw address for hashing is safe.
2482 AllowHandleDereference allow_handle_deref;
2478 intptr_t hash = 0; 2483 intptr_t hash = 0;
2479 for (int i = 0; i < prototypes_.length(); i++) { 2484 for (int i = 0; i < prototypes_.length(); i++) {
2480 hash = 17 * hash + reinterpret_cast<intptr_t>(*prototypes_[i]); 2485 hash = 17 * hash + reinterpret_cast<intptr_t>(*prototypes_[i]);
2481 hash = 17 * hash + reinterpret_cast<intptr_t>(*maps_[i]); 2486 hash = 17 * hash + reinterpret_cast<intptr_t>(*maps_[i]);
2482 } 2487 }
2483 return hash; 2488 return hash;
2484 } 2489 }
2485 2490
2486 protected: 2491 protected:
2487 virtual bool DataEquals(HValue* other) { 2492 virtual bool DataEquals(HValue* other) {
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
2685 isnan(double_value_)) { 2690 isnan(double_value_)) {
2686 return true; 2691 return true;
2687 } 2692 }
2688 return false; 2693 return false;
2689 } 2694 }
2690 2695
2691 ASSERT(!handle_.is_null()); 2696 ASSERT(!handle_.is_null());
2692 Heap* heap = HEAP; 2697 Heap* heap = HEAP;
2693 // We should have handled minus_zero_value and nan_value in the 2698 // We should have handled minus_zero_value and nan_value in the
2694 // has_double_value_ clause above. 2699 // has_double_value_ clause above.
2700 // Dereferencing is safe to compare against singletons.
2701 AllowHandleDereference allow_handle_deref;
2695 ASSERT(*handle_ != heap->minus_zero_value()); 2702 ASSERT(*handle_ != heap->minus_zero_value());
2696 ASSERT(*handle_ != heap->nan_value()); 2703 ASSERT(*handle_ != heap->nan_value());
2697 if (*handle_ == heap->undefined_value()) return true; 2704 return *handle_ == heap->undefined_value() ||
2698 if (*handle_ == heap->null_value()) return true; 2705 *handle_ == heap->null_value() ||
2699 if (*handle_ == heap->true_value()) return true; 2706 *handle_ == heap->true_value() ||
2700 if (*handle_ == heap->false_value()) return true; 2707 *handle_ == heap->false_value() ||
2701 if (*handle_ == heap->the_hole_value()) return true; 2708 *handle_ == heap->the_hole_value() ||
2702 if (*handle_ == heap->empty_string()) return true; 2709 *handle_ == heap->empty_string();
2703 return false;
2704 } 2710 }
2705 2711
2706 virtual Representation RequiredInputRepresentation(int index) { 2712 virtual Representation RequiredInputRepresentation(int index) {
2707 return Representation::None(); 2713 return Representation::None();
2708 } 2714 }
2709 2715
2710 virtual bool IsConvertibleToInteger() const { 2716 virtual bool IsConvertibleToInteger() const {
2711 return has_int32_value_; 2717 return has_int32_value_;
2712 } 2718 }
2713 2719
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 virtual intptr_t Hashcode() { 2751 virtual intptr_t Hashcode() {
2746 ASSERT_ALLOCATION_DISABLED; 2752 ASSERT_ALLOCATION_DISABLED;
2747 intptr_t hash; 2753 intptr_t hash;
2748 2754
2749 if (has_int32_value_) { 2755 if (has_int32_value_) {
2750 hash = static_cast<intptr_t>(int32_value_); 2756 hash = static_cast<intptr_t>(int32_value_);
2751 } else if (has_double_value_) { 2757 } else if (has_double_value_) {
2752 hash = static_cast<intptr_t>(BitCast<int64_t>(double_value_)); 2758 hash = static_cast<intptr_t>(BitCast<int64_t>(double_value_));
2753 } else { 2759 } else {
2754 ASSERT(!handle_.is_null()); 2760 ASSERT(!handle_.is_null());
2761 // Dereferencing to use the object's raw address for hashing is safe.
2762 AllowHandleDereference allow_handle_deref;
2755 hash = reinterpret_cast<intptr_t>(*handle_); 2763 hash = reinterpret_cast<intptr_t>(*handle_);
2756 } 2764 }
2757 2765
2758 return hash; 2766 return hash;
2759 } 2767 }
2760 2768
2761 #ifdef DEBUG 2769 #ifdef DEBUG
2762 virtual void Verify() { } 2770 virtual void Verify() { }
2763 #endif 2771 #endif
2764 2772
2765 DECLARE_CONCRETE_INSTRUCTION(Constant) 2773 DECLARE_CONCRETE_INSTRUCTION(Constant)
2766 2774
2767 protected: 2775 protected:
2768 virtual Range* InferRange(Zone* zone); 2776 virtual Range* InferRange(Zone* zone);
2769 2777
2770 virtual bool DataEquals(HValue* other) { 2778 virtual bool DataEquals(HValue* other) {
2771 HConstant* other_constant = HConstant::cast(other); 2779 HConstant* other_constant = HConstant::cast(other);
2772 if (has_int32_value_) { 2780 if (has_int32_value_) {
2773 return other_constant->has_int32_value_ && 2781 return other_constant->has_int32_value_ &&
2774 int32_value_ == other_constant->int32_value_; 2782 int32_value_ == other_constant->int32_value_;
2775 } else if (has_double_value_) { 2783 } else if (has_double_value_) {
2776 return other_constant->has_double_value_ && 2784 return other_constant->has_double_value_ &&
2777 BitCast<int64_t>(double_value_) == 2785 BitCast<int64_t>(double_value_) ==
2778 BitCast<int64_t>(other_constant->double_value_); 2786 BitCast<int64_t>(other_constant->double_value_);
2779 } else { 2787 } else {
2780 ASSERT(!handle_.is_null()); 2788 ASSERT(!handle_.is_null());
2781 return !other_constant->handle_.is_null() && 2789 return !other_constant->handle_.is_null() &&
2782 *handle_ == *other_constant->handle_; 2790 handle_.is_identical_to(other_constant->handle_);
2783 } 2791 }
2784 } 2792 }
2785 2793
2786 private: 2794 private:
2787 virtual bool IsDeletable() const { return true; } 2795 virtual bool IsDeletable() const { return true; }
2788 2796
2789 // If this is a numerical constant, handle_ either points to to the 2797 // If this is a numerical constant, handle_ either points to to the
2790 // HeapObject the constant originated from or is null. If the 2798 // HeapObject the constant originated from or is null. If the
2791 // constant is non-numeric, handle_ always points to a valid 2799 // constant is non-numeric, handle_ always points to a valid
2792 // constant HeapObject. 2800 // constant HeapObject.
(...skipping 1213 matching lines...) Expand 10 before | Expand all | Expand 10 after
4006 4014
4007 class HLoadGlobalCell: public HTemplateInstruction<0> { 4015 class HLoadGlobalCell: public HTemplateInstruction<0> {
4008 public: 4016 public:
4009 HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, PropertyDetails details) 4017 HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, PropertyDetails details)
4010 : cell_(cell), details_(details) { 4018 : cell_(cell), details_(details) {
4011 set_representation(Representation::Tagged()); 4019 set_representation(Representation::Tagged());
4012 SetFlag(kUseGVN); 4020 SetFlag(kUseGVN);
4013 SetGVNFlag(kDependsOnGlobalVars); 4021 SetGVNFlag(kDependsOnGlobalVars);
4014 } 4022 }
4015 4023
4016 Handle<JSGlobalPropertyCell> cell() const { return cell_; } 4024 Handle<JSGlobalPropertyCell> cell() const { return cell_; }
4017 bool RequiresHoleCheck() const; 4025 bool RequiresHoleCheck() const;
4018 4026
4019 virtual void PrintDataTo(StringStream* stream); 4027 virtual void PrintDataTo(StringStream* stream);
4020 4028
4021 virtual intptr_t Hashcode() { 4029 virtual intptr_t Hashcode() {
4022 ASSERT_ALLOCATION_DISABLED; 4030 ASSERT_ALLOCATION_DISABLED;
4031 // Dereferencing to use the object's raw address for hashing is safe.
4032 AllowHandleDereference allow_handle_deref;
4023 return reinterpret_cast<intptr_t>(*cell_); 4033 return reinterpret_cast<intptr_t>(*cell_);
4024 } 4034 }
4025 4035
4026 virtual Representation RequiredInputRepresentation(int index) { 4036 virtual Representation RequiredInputRepresentation(int index) {
4027 return Representation::None(); 4037 return Representation::None();
4028 } 4038 }
4029 4039
4030 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell) 4040 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell)
4031 4041
4032 protected: 4042 protected:
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after
4805 StrictModeFlag strict_mode_flag_; 4815 StrictModeFlag strict_mode_flag_;
4806 }; 4816 };
4807 4817
4808 4818
4809 class HTransitionElementsKind: public HTemplateInstruction<1> { 4819 class HTransitionElementsKind: public HTemplateInstruction<1> {
4810 public: 4820 public:
4811 HTransitionElementsKind(HValue* object, 4821 HTransitionElementsKind(HValue* object,
4812 Handle<Map> original_map, 4822 Handle<Map> original_map,
4813 Handle<Map> transitioned_map) 4823 Handle<Map> transitioned_map)
4814 : original_map_(original_map), 4824 : original_map_(original_map),
4815 transitioned_map_(transitioned_map) { 4825 transitioned_map_(transitioned_map),
4826 from_kind_(original_map->elements_kind()),
4827 to_kind_(transitioned_map->elements_kind()) {
4816 SetOperandAt(0, object); 4828 SetOperandAt(0, object);
4817 SetFlag(kUseGVN); 4829 SetFlag(kUseGVN);
4818 SetGVNFlag(kChangesElementsKind); 4830 SetGVNFlag(kChangesElementsKind);
4819 if (original_map->has_fast_double_elements()) { 4831 if (original_map->has_fast_double_elements()) {
4820 SetGVNFlag(kChangesElementsPointer); 4832 SetGVNFlag(kChangesElementsPointer);
4821 SetGVNFlag(kChangesNewSpacePromotion); 4833 SetGVNFlag(kChangesNewSpacePromotion);
4822 } 4834 }
4823 if (transitioned_map->has_fast_double_elements()) { 4835 if (transitioned_map->has_fast_double_elements()) {
4824 SetGVNFlag(kChangesElementsPointer); 4836 SetGVNFlag(kChangesElementsPointer);
4825 SetGVNFlag(kChangesNewSpacePromotion); 4837 SetGVNFlag(kChangesNewSpacePromotion);
4826 } 4838 }
4827 set_representation(Representation::Tagged()); 4839 set_representation(Representation::Tagged());
4828 } 4840 }
4829 4841
4830 virtual Representation RequiredInputRepresentation(int index) { 4842 virtual Representation RequiredInputRepresentation(int index) {
4831 return Representation::Tagged(); 4843 return Representation::Tagged();
4832 } 4844 }
4833 4845
4834 HValue* object() { return OperandAt(0); } 4846 HValue* object() { return OperandAt(0); }
4835 Handle<Map> original_map() { return original_map_; } 4847 Handle<Map> original_map() { return original_map_; }
4836 Handle<Map> transitioned_map() { return transitioned_map_; } 4848 Handle<Map> transitioned_map() { return transitioned_map_; }
4849 ElementsKind from_kind() { return from_kind_; }
4850 ElementsKind to_kind() { return to_kind_; }
4837 4851
4838 virtual void PrintDataTo(StringStream* stream); 4852 virtual void PrintDataTo(StringStream* stream);
4839 4853
4840 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind) 4854 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind)
4841 4855
4842 protected: 4856 protected:
4843 virtual bool DataEquals(HValue* other) { 4857 virtual bool DataEquals(HValue* other) {
4844 HTransitionElementsKind* instr = HTransitionElementsKind::cast(other); 4858 HTransitionElementsKind* instr = HTransitionElementsKind::cast(other);
4845 return original_map_.is_identical_to(instr->original_map()) && 4859 return original_map_.is_identical_to(instr->original_map()) &&
4846 transitioned_map_.is_identical_to(instr->transitioned_map()); 4860 transitioned_map_.is_identical_to(instr->transitioned_map());
4847 } 4861 }
4848 4862
4849 private: 4863 private:
4850 Handle<Map> original_map_; 4864 Handle<Map> original_map_;
4851 Handle<Map> transitioned_map_; 4865 Handle<Map> transitioned_map_;
4866 ElementsKind from_kind_;
4867 ElementsKind to_kind_;
4852 }; 4868 };
4853 4869
4854 4870
4855 class HStringAdd: public HBinaryOperation { 4871 class HStringAdd: public HBinaryOperation {
4856 public: 4872 public:
4857 HStringAdd(HValue* context, HValue* left, HValue* right) 4873 HStringAdd(HValue* context, HValue* left, HValue* right)
4858 : HBinaryOperation(context, left, right) { 4874 : HBinaryOperation(context, left, right) {
4859 set_representation(Representation::Tagged()); 4875 set_representation(Representation::Tagged());
4860 SetFlag(kUseGVN); 4876 SetFlag(kUseGVN);
4861 SetGVNFlag(kDependsOnMaps); 4877 SetGVNFlag(kDependsOnMaps);
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
5503 virtual bool IsDeletable() const { return true; } 5519 virtual bool IsDeletable() const { return true; }
5504 }; 5520 };
5505 5521
5506 5522
5507 #undef DECLARE_INSTRUCTION 5523 #undef DECLARE_INSTRUCTION
5508 #undef DECLARE_CONCRETE_INSTRUCTION 5524 #undef DECLARE_CONCRETE_INSTRUCTION
5509 5525
5510 } } // namespace v8::internal 5526 } } // namespace v8::internal
5511 5527
5512 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 5528 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698