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

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

Issue 618643002: Replace OStream with std::ostream. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix Created 6 years, 2 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-gvn.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 // 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>
9
8 #include "src/v8.h" 10 #include "src/v8.h"
9 11
10 #include "src/allocation.h" 12 #include "src/allocation.h"
11 #include "src/base/bits.h" 13 #include "src/base/bits.h"
12 #include "src/code-stubs.h" 14 #include "src/code-stubs.h"
13 #include "src/conversions.h" 15 #include "src/conversions.h"
14 #include "src/data-flow.h" 16 #include "src/data-flow.h"
15 #include "src/deoptimizer.h" 17 #include "src/deoptimizer.h"
16 #include "src/feedback-slots.h" 18 #include "src/feedback-slots.h"
17 #include "src/hydrogen-types.h" 19 #include "src/hydrogen-types.h"
(...skipping 10 matching lines...) Expand all
28 class HBasicBlock; 30 class HBasicBlock;
29 class HDiv; 31 class HDiv;
30 class HEnvironment; 32 class HEnvironment;
31 class HInferRepresentationPhase; 33 class HInferRepresentationPhase;
32 class HInstruction; 34 class HInstruction;
33 class HLoopInformation; 35 class HLoopInformation;
34 class HStoreNamedField; 36 class HStoreNamedField;
35 class HValue; 37 class HValue;
36 class LInstruction; 38 class LInstruction;
37 class LChunkBuilder; 39 class LChunkBuilder;
38 class OStream;
39 40
40 #define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V) \ 41 #define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V) \
41 V(ArithmeticBinaryOperation) \ 42 V(ArithmeticBinaryOperation) \
42 V(BinaryOperation) \ 43 V(BinaryOperation) \
43 V(BitwiseBinaryOperation) \ 44 V(BitwiseBinaryOperation) \
44 V(ControlInstruction) \ 45 V(ControlInstruction) \
45 V(Instruction) 46 V(Instruction)
46 47
47 48
48 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \ 49 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 friend class HPositionInfo; 461 friend class HPositionInfo;
461 friend class LCodeGenBase; 462 friend class LCodeGenBase;
462 463
463 // If FLAG_hydrogen_track_positions is set contains bitfields InliningIdField 464 // If FLAG_hydrogen_track_positions is set contains bitfields InliningIdField
464 // and PositionField. 465 // and PositionField.
465 // Otherwise contains absolute offset from the script start. 466 // Otherwise contains absolute offset from the script start.
466 int value_; 467 int value_;
467 }; 468 };
468 469
469 470
470 OStream& operator<<(OStream& os, const HSourcePosition& p); 471 std::ostream& operator<<(std::ostream& os, const HSourcePosition& p);
471 472
472 473
473 class HValue : public ZoneObject { 474 class HValue : public ZoneObject {
474 public: 475 public:
475 static const int kNoNumber = -1; 476 static const int kNoNumber = -1;
476 477
477 enum Flag { 478 enum Flag {
478 kFlexibleRepresentation, 479 kFlexibleRepresentation,
479 kCannotBeTagged, 480 kCannotBeTagged,
480 // Participate in Global Value Numbering, i.e. elimination of 481 // Participate in Global Value Numbering, i.e. elimination of
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 // then return it. Return NULL to have the instruction deleted. 764 // then return it. Return NULL to have the instruction deleted.
764 virtual HValue* Canonicalize() { return this; } 765 virtual HValue* Canonicalize() { return this; }
765 766
766 bool Equals(HValue* other); 767 bool Equals(HValue* other);
767 virtual intptr_t Hashcode(); 768 virtual intptr_t Hashcode();
768 769
769 // Compute unique ids upfront that is safe wrt GC and concurrent compilation. 770 // Compute unique ids upfront that is safe wrt GC and concurrent compilation.
770 virtual void FinalizeUniqueness() { } 771 virtual void FinalizeUniqueness() { }
771 772
772 // Printing support. 773 // Printing support.
773 virtual OStream& PrintTo(OStream& os) const = 0; // NOLINT 774 virtual std::ostream& PrintTo(std::ostream& os) const = 0; // NOLINT
774 775
775 const char* Mnemonic() const; 776 const char* Mnemonic() const;
776 777
777 // Type information helpers. 778 // Type information helpers.
778 bool HasMonomorphicJSObjectType(); 779 bool HasMonomorphicJSObjectType();
779 780
780 // TODO(mstarzinger): For now instructions can override this function to 781 // TODO(mstarzinger): For now instructions can override this function to
781 // specify statically known types, once HType can convey more information 782 // specify statically known types, once HType can convey more information
782 // it should be based on the HType. 783 // it should be based on the HType.
783 virtual Handle<Map> GetMonomorphicJSObjectMap() { return Handle<Map>(); } 784 virtual Handle<Map> GetMonomorphicJSObjectMap() { return Handle<Map>(); }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 #undef ADD_FLAG 881 #undef ADD_FLAG
881 return result; 882 return result;
882 } 883 }
883 884
884 // A flag mask to mark an instruction as having arbitrary side effects. 885 // A flag mask to mark an instruction as having arbitrary side effects.
885 static GVNFlagSet AllSideEffectsFlagSet() { 886 static GVNFlagSet AllSideEffectsFlagSet() {
886 GVNFlagSet result = AllFlagSet(); 887 GVNFlagSet result = AllFlagSet();
887 result.Remove(kOsrEntries); 888 result.Remove(kOsrEntries);
888 return result; 889 return result;
889 } 890 }
890 friend OStream& operator<<(OStream& os, const ChangesOf& v); 891 friend std::ostream& operator<<(std::ostream& os, const ChangesOf& v);
891 892
892 // A flag mask of all side effects that can make observable changes in 893 // A flag mask of all side effects that can make observable changes in
893 // an executing program (i.e. are not safe to repeat, move or remove); 894 // an executing program (i.e. are not safe to repeat, move or remove);
894 static GVNFlagSet AllObservableSideEffectsFlagSet() { 895 static GVNFlagSet AllObservableSideEffectsFlagSet() {
895 GVNFlagSet result = AllFlagSet(); 896 GVNFlagSet result = AllFlagSet();
896 result.Remove(kNewSpacePromotion); 897 result.Remove(kNewSpacePromotion);
897 result.Remove(kElementsKind); 898 result.Remove(kElementsKind);
898 result.Remove(kElementsPointer); 899 result.Remove(kElementsPointer);
899 result.Remove(kMaps); 900 result.Remove(kMaps);
900 return result; 901 return result;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 const HValue* value; 942 const HValue* value;
942 }; 943 };
943 944
944 945
945 struct ChangesOf { 946 struct ChangesOf {
946 explicit ChangesOf(const HValue* const v) : value(v) {} 947 explicit ChangesOf(const HValue* const v) : value(v) {}
947 const HValue* value; 948 const HValue* value;
948 }; 949 };
949 950
950 951
951 OStream& operator<<(OStream& os, const HValue& v); 952 std::ostream& operator<<(std::ostream& os, const HValue& v);
952 OStream& operator<<(OStream& os, const NameOf& v); 953 std::ostream& operator<<(std::ostream& os, const NameOf& v);
953 OStream& operator<<(OStream& os, const TypeOf& v); 954 std::ostream& operator<<(std::ostream& os, const TypeOf& v);
954 OStream& operator<<(OStream& os, const ChangesOf& v); 955 std::ostream& operator<<(std::ostream& os, const ChangesOf& v);
955 956
956 957
957 #define DECLARE_INSTRUCTION_FACTORY_P0(I) \ 958 #define DECLARE_INSTRUCTION_FACTORY_P0(I) \
958 static I* New(Zone* zone, HValue* context) { \ 959 static I* New(Zone* zone, HValue* context) { \
959 return new(zone) I(); \ 960 return new(zone) I(); \
960 } 961 }
961 962
962 #define DECLARE_INSTRUCTION_FACTORY_P1(I, P1) \ 963 #define DECLARE_INSTRUCTION_FACTORY_P1(I, P1) \
963 static I* New(Zone* zone, HValue* context, P1 p1) { \ 964 static I* New(Zone* zone, HValue* context, P1 p1) { \
964 return new(zone) I(p1); \ 965 return new(zone) I(p1); \
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 1141
1141 intptr_t data_; 1142 intptr_t data_;
1142 }; 1143 };
1143 1144
1144 1145
1145 class HInstruction : public HValue { 1146 class HInstruction : public HValue {
1146 public: 1147 public:
1147 HInstruction* next() const { return next_; } 1148 HInstruction* next() const { return next_; }
1148 HInstruction* previous() const { return previous_; } 1149 HInstruction* previous() const { return previous_; }
1149 1150
1150 virtual OStream& PrintTo(OStream& os) const OVERRIDE; // NOLINT 1151 virtual std::ostream& PrintTo(std::ostream& os) const OVERRIDE; // NOLINT
1151 virtual OStream& PrintDataTo(OStream& os) const; // NOLINT 1152 virtual std::ostream& PrintDataTo(std::ostream& os) const; // NOLINT
1152 1153
1153 bool IsLinked() const { return block() != NULL; } 1154 bool IsLinked() const { return block() != NULL; }
1154 void Unlink(); 1155 void Unlink();
1155 1156
1156 void InsertBefore(HInstruction* next); 1157 void InsertBefore(HInstruction* next);
1157 1158
1158 template<class T> T* Prepend(T* instr) { 1159 template<class T> T* Prepend(T* instr) {
1159 instr->InsertBefore(this); 1160 instr->InsertBefore(this);
1160 return instr; 1161 return instr;
1161 } 1162 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1251 EmbeddedContainer<HValue*, V> inputs_; 1252 EmbeddedContainer<HValue*, V> inputs_;
1252 }; 1253 };
1253 1254
1254 1255
1255 class HControlInstruction : public HInstruction { 1256 class HControlInstruction : public HInstruction {
1256 public: 1257 public:
1257 virtual HBasicBlock* SuccessorAt(int i) const = 0; 1258 virtual HBasicBlock* SuccessorAt(int i) const = 0;
1258 virtual int SuccessorCount() const = 0; 1259 virtual int SuccessorCount() const = 0;
1259 virtual void SetSuccessorAt(int i, HBasicBlock* block) = 0; 1260 virtual void SetSuccessorAt(int i, HBasicBlock* block) = 0;
1260 1261
1261 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1262 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1262 1263
1263 virtual bool KnownSuccessorBlock(HBasicBlock** block) { 1264 virtual bool KnownSuccessorBlock(HBasicBlock** block) {
1264 *block = NULL; 1265 *block = NULL;
1265 return false; 1266 return false;
1266 } 1267 }
1267 1268
1268 HBasicBlock* FirstSuccessor() { 1269 HBasicBlock* FirstSuccessor() {
1269 return SuccessorCount() > 0 ? SuccessorAt(0) : NULL; 1270 return SuccessorCount() > 0 ? SuccessorAt(0) : NULL;
1270 } 1271 }
1271 HBasicBlock* SecondSuccessor() { 1272 HBasicBlock* SecondSuccessor() {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 set_representation(Representation::Tagged()); 1342 set_representation(Representation::Tagged());
1342 } 1343 }
1343 1344
1344 HValue* value() const { return OperandAt(0); } 1345 HValue* value() const { return OperandAt(0); }
1345 1346
1346 virtual bool HasEscapingOperandAt(int index) OVERRIDE { return false; } 1347 virtual bool HasEscapingOperandAt(int index) OVERRIDE { return false; }
1347 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1348 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1348 return Representation::None(); 1349 return Representation::None();
1349 } 1350 }
1350 1351
1351 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1352 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1352 1353
1353 DECLARE_CONCRETE_INSTRUCTION(DummyUse); 1354 DECLARE_CONCRETE_INSTRUCTION(DummyUse);
1354 }; 1355 };
1355 1356
1356 1357
1357 // Inserts an int3/stop break instruction for debugging purposes. 1358 // Inserts an int3/stop break instruction for debugging purposes.
1358 class HDebugBreak FINAL : public HTemplateInstruction<0> { 1359 class HDebugBreak FINAL : public HTemplateInstruction<0> {
1359 public: 1360 public:
1360 DECLARE_INSTRUCTION_FACTORY_P0(HDebugBreak); 1361 DECLARE_INSTRUCTION_FACTORY_P0(HDebugBreak);
1361 1362
(...skipping 13 matching lines...) Expand all
1375 1376
1376 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE { 1377 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE {
1377 *block = FirstSuccessor(); 1378 *block = FirstSuccessor();
1378 return true; 1379 return true;
1379 } 1380 }
1380 1381
1381 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1382 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1382 return Representation::None(); 1383 return Representation::None();
1383 } 1384 }
1384 1385
1385 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1386 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1386 1387
1387 DECLARE_CONCRETE_INSTRUCTION(Goto) 1388 DECLARE_CONCRETE_INSTRUCTION(Goto)
1388 }; 1389 };
1389 1390
1390 1391
1391 class HDeoptimize FINAL : public HTemplateControlInstruction<1, 0> { 1392 class HDeoptimize FINAL : public HTemplateControlInstruction<1, 0> {
1392 public: 1393 public:
1393 static HDeoptimize* New(Zone* zone, 1394 static HDeoptimize* New(Zone* zone,
1394 HValue* context, 1395 HValue* context,
1395 const char* reason, 1396 const char* reason,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 class HUnaryControlInstruction : public HTemplateControlInstruction<2, 1> { 1429 class HUnaryControlInstruction : public HTemplateControlInstruction<2, 1> {
1429 public: 1430 public:
1430 HUnaryControlInstruction(HValue* value, 1431 HUnaryControlInstruction(HValue* value,
1431 HBasicBlock* true_target, 1432 HBasicBlock* true_target,
1432 HBasicBlock* false_target) { 1433 HBasicBlock* false_target) {
1433 SetOperandAt(0, value); 1434 SetOperandAt(0, value);
1434 SetSuccessorAt(0, true_target); 1435 SetSuccessorAt(0, true_target);
1435 SetSuccessorAt(1, false_target); 1436 SetSuccessorAt(1, false_target);
1436 } 1437 }
1437 1438
1438 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1439 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1439 1440
1440 HValue* value() const { return OperandAt(0); } 1441 HValue* value() const { return OperandAt(0); }
1441 }; 1442 };
1442 1443
1443 1444
1444 class HBranch FINAL : public HUnaryControlInstruction { 1445 class HBranch FINAL : public HUnaryControlInstruction {
1445 public: 1446 public:
1446 DECLARE_INSTRUCTION_FACTORY_P1(HBranch, HValue*); 1447 DECLARE_INSTRUCTION_FACTORY_P1(HBranch, HValue*);
1447 DECLARE_INSTRUCTION_FACTORY_P2(HBranch, HValue*, 1448 DECLARE_INSTRUCTION_FACTORY_P2(HBranch, HValue*,
1448 ToBooleanStub::Types); 1449 ToBooleanStub::Types);
1449 DECLARE_INSTRUCTION_FACTORY_P4(HBranch, HValue*, 1450 DECLARE_INSTRUCTION_FACTORY_P4(HBranch, HValue*,
1450 ToBooleanStub::Types, 1451 ToBooleanStub::Types,
1451 HBasicBlock*, HBasicBlock*); 1452 HBasicBlock*, HBasicBlock*);
1452 1453
1453 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1454 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1454 return Representation::None(); 1455 return Representation::None();
1455 } 1456 }
1456 virtual Representation observed_input_representation(int index) OVERRIDE; 1457 virtual Representation observed_input_representation(int index) OVERRIDE;
1457 1458
1458 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE; 1459 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE;
1459 1460
1460 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1461 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1461 1462
1462 ToBooleanStub::Types expected_input_types() const { 1463 ToBooleanStub::Types expected_input_types() const {
1463 return expected_input_types_; 1464 return expected_input_types_;
1464 } 1465 }
1465 1466
1466 DECLARE_CONCRETE_INSTRUCTION(Branch) 1467 DECLARE_CONCRETE_INSTRUCTION(Branch)
1467 1468
1468 private: 1469 private:
1469 HBranch(HValue* value, 1470 HBranch(HValue* value,
1470 ToBooleanStub::Types expected_input_types = ToBooleanStub::Types(), 1471 ToBooleanStub::Types expected_input_types = ToBooleanStub::Types(),
(...skipping 16 matching lines...) Expand all
1487 1488
1488 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE { 1489 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE {
1489 if (known_successor_index() != kNoKnownSuccessorIndex) { 1490 if (known_successor_index() != kNoKnownSuccessorIndex) {
1490 *block = SuccessorAt(known_successor_index()); 1491 *block = SuccessorAt(known_successor_index());
1491 return true; 1492 return true;
1492 } 1493 }
1493 *block = NULL; 1494 *block = NULL;
1494 return false; 1495 return false;
1495 } 1496 }
1496 1497
1497 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1498 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1498 1499
1499 static const int kNoKnownSuccessorIndex = -1; 1500 static const int kNoKnownSuccessorIndex = -1;
1500 int known_successor_index() const { return known_successor_index_; } 1501 int known_successor_index() const { return known_successor_index_; }
1501 void set_known_successor_index(int known_successor_index) { 1502 void set_known_successor_index(int known_successor_index) {
1502 known_successor_index_ = known_successor_index; 1503 known_successor_index_ = known_successor_index;
1503 } 1504 }
1504 1505
1505 Unique<Map> map() const { return map_; } 1506 Unique<Map> map() const { return map_; }
1506 bool map_is_stable() const { return map_is_stable_; } 1507 bool map_is_stable() const { return map_is_stable_; }
1507 1508
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 public: 1562 public:
1562 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HReturn, HValue*, HValue*); 1563 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HReturn, HValue*, HValue*);
1563 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HReturn, HValue*); 1564 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HReturn, HValue*);
1564 1565
1565 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1566 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1566 // TODO(titzer): require an Int32 input for faster returns. 1567 // TODO(titzer): require an Int32 input for faster returns.
1567 if (index == 2) return Representation::Smi(); 1568 if (index == 2) return Representation::Smi();
1568 return Representation::Tagged(); 1569 return Representation::Tagged();
1569 } 1570 }
1570 1571
1571 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1572 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1572 1573
1573 HValue* value() const { return OperandAt(0); } 1574 HValue* value() const { return OperandAt(0); }
1574 HValue* context() const { return OperandAt(1); } 1575 HValue* context() const { return OperandAt(1); }
1575 HValue* parameter_count() const { return OperandAt(2); } 1576 HValue* parameter_count() const { return OperandAt(2); }
1576 1577
1577 DECLARE_CONCRETE_INSTRUCTION(Return) 1578 DECLARE_CONCRETE_INSTRUCTION(Return)
1578 1579
1579 private: 1580 private:
1580 HReturn(HValue* context, HValue* value, HValue* parameter_count = 0) { 1581 HReturn(HValue* context, HValue* value, HValue* parameter_count = 0) {
1581 SetOperandAt(0, value); 1582 SetOperandAt(0, value);
(...skipping 22 matching lines...) Expand all
1604 explicit HUnaryOperation(HValue* value, HType type = HType::Tagged()) 1605 explicit HUnaryOperation(HValue* value, HType type = HType::Tagged())
1605 : HTemplateInstruction<1>(type) { 1606 : HTemplateInstruction<1>(type) {
1606 SetOperandAt(0, value); 1607 SetOperandAt(0, value);
1607 } 1608 }
1608 1609
1609 static HUnaryOperation* cast(HValue* value) { 1610 static HUnaryOperation* cast(HValue* value) {
1610 return reinterpret_cast<HUnaryOperation*>(value); 1611 return reinterpret_cast<HUnaryOperation*>(value);
1611 } 1612 }
1612 1613
1613 HValue* value() const { return OperandAt(0); } 1614 HValue* value() const { return OperandAt(0); }
1614 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1615 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1615 }; 1616 };
1616 1617
1617 1618
1618 class HUseConst FINAL : public HUnaryOperation { 1619 class HUseConst FINAL : public HUnaryOperation {
1619 public: 1620 public:
1620 DECLARE_INSTRUCTION_FACTORY_P1(HUseConst, HValue*); 1621 DECLARE_INSTRUCTION_FACTORY_P1(HUseConst, HValue*);
1621 1622
1622 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1623 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1623 return Representation::None(); 1624 return Representation::None();
1624 } 1625 }
1625 1626
1626 DECLARE_CONCRETE_INSTRUCTION(UseConst) 1627 DECLARE_CONCRETE_INSTRUCTION(UseConst)
1627 1628
1628 private: 1629 private:
1629 explicit HUseConst(HValue* old_value) : HUnaryOperation(old_value) { } 1630 explicit HUseConst(HValue* old_value) : HUnaryOperation(old_value) { }
1630 }; 1631 };
1631 1632
1632 1633
1633 class HForceRepresentation FINAL : public HTemplateInstruction<1> { 1634 class HForceRepresentation FINAL : public HTemplateInstruction<1> {
1634 public: 1635 public:
1635 static HInstruction* New(Zone* zone, HValue* context, HValue* value, 1636 static HInstruction* New(Zone* zone, HValue* context, HValue* value,
1636 Representation required_representation); 1637 Representation required_representation);
1637 1638
1638 HValue* value() const { return OperandAt(0); } 1639 HValue* value() const { return OperandAt(0); }
1639 1640
1640 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1641 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1641 return representation(); // Same as the output representation. 1642 return representation(); // Same as the output representation.
1642 } 1643 }
1643 1644
1644 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1645 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1645 1646
1646 DECLARE_CONCRETE_INSTRUCTION(ForceRepresentation) 1647 DECLARE_CONCRETE_INSTRUCTION(ForceRepresentation)
1647 1648
1648 private: 1649 private:
1649 HForceRepresentation(HValue* value, Representation required_representation) { 1650 HForceRepresentation(HValue* value, Representation required_representation) {
1650 SetOperandAt(0, value); 1651 SetOperandAt(0, value);
1651 set_representation(required_representation); 1652 set_representation(required_representation);
1652 } 1653 }
1653 }; 1654 };
1654 1655
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1690 Representation to() const { return representation(); } 1691 Representation to() const { return representation(); }
1691 bool deoptimize_on_minus_zero() const { 1692 bool deoptimize_on_minus_zero() const {
1692 return CheckFlag(kBailoutOnMinusZero); 1693 return CheckFlag(kBailoutOnMinusZero);
1693 } 1694 }
1694 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1695 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1695 return from(); 1696 return from();
1696 } 1697 }
1697 1698
1698 virtual Range* InferRange(Zone* zone) OVERRIDE; 1699 virtual Range* InferRange(Zone* zone) OVERRIDE;
1699 1700
1700 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1701 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1701 1702
1702 DECLARE_CONCRETE_INSTRUCTION(Change) 1703 DECLARE_CONCRETE_INSTRUCTION(Change)
1703 1704
1704 protected: 1705 protected:
1705 virtual bool DataEquals(HValue* other) OVERRIDE { return true; } 1706 virtual bool DataEquals(HValue* other) OVERRIDE { return true; }
1706 1707
1707 private: 1708 private:
1708 virtual bool IsDeletable() const OVERRIDE { 1709 virtual bool IsDeletable() const OVERRIDE {
1709 return !from().IsTagged() || value()->type().IsSmi(); 1710 return !from().IsTagged() || value()->type().IsSmi();
1710 } 1711 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1809 RemovableSimulate removable) 1810 RemovableSimulate removable)
1810 : ast_id_(ast_id), 1811 : ast_id_(ast_id),
1811 pop_count_(pop_count), 1812 pop_count_(pop_count),
1812 values_(2, zone), 1813 values_(2, zone),
1813 assigned_indexes_(2, zone), 1814 assigned_indexes_(2, zone),
1814 zone_(zone), 1815 zone_(zone),
1815 removable_(removable), 1816 removable_(removable),
1816 done_with_replay_(false) {} 1817 done_with_replay_(false) {}
1817 ~HSimulate() {} 1818 ~HSimulate() {}
1818 1819
1819 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1820 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1820 1821
1821 bool HasAstId() const { return !ast_id_.IsNone(); } 1822 bool HasAstId() const { return !ast_id_.IsNone(); }
1822 BailoutId ast_id() const { return ast_id_; } 1823 BailoutId ast_id() const { return ast_id_; }
1823 void set_ast_id(BailoutId id) { 1824 void set_ast_id(BailoutId id) {
1824 DCHECK(!HasAstId()); 1825 DCHECK(!HasAstId());
1825 ast_id_ = id; 1826 ast_id_ = id;
1826 } 1827 }
1827 1828
1828 int pop_count() const { return pop_count_; } 1829 int pop_count() const { return pop_count_; }
1829 const ZoneList<HValue*>* values() const { return &values_; } 1830 const ZoneList<HValue*>* values() const { return &values_; }
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1915 int index() const { return index_; } 1916 int index() const { return index_; }
1916 HSimulate* next_simulate() { return next_simulate_; } 1917 HSimulate* next_simulate() { return next_simulate_; }
1917 void set_next_simulate(HSimulate* simulate) { 1918 void set_next_simulate(HSimulate* simulate) {
1918 next_simulate_ = simulate; 1919 next_simulate_ = simulate;
1919 } 1920 }
1920 1921
1921 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 1922 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
1922 return Representation::None(); 1923 return Representation::None();
1923 } 1924 }
1924 1925
1925 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 1926 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
1926 1927
1927 #ifdef DEBUG 1928 #ifdef DEBUG
1928 void set_closure(Handle<JSFunction> closure) { 1929 void set_closure(Handle<JSFunction> closure) {
1929 DCHECK(closure_.is_null()); 1930 DCHECK(closure_.is_null());
1930 DCHECK(!closure.is_null()); 1931 DCHECK(!closure.is_null());
1931 closure_ = closure; 1932 closure_ = closure;
1932 } 1933 }
1933 Handle<JSFunction> closure() const { return closure_; } 1934 Handle<JSFunction> closure() const { return closure_; }
1934 #endif 1935 #endif
1935 1936
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
2008 InliningKind inlining_kind, Variable* arguments_var, 2009 InliningKind inlining_kind, Variable* arguments_var,
2009 HArgumentsObject* arguments_object) { 2010 HArgumentsObject* arguments_object) {
2010 return new (zone) HEnterInlined(return_id, closure, closure_context, 2011 return new (zone) HEnterInlined(return_id, closure, closure_context,
2011 arguments_count, function, inlining_kind, 2012 arguments_count, function, inlining_kind,
2012 arguments_var, arguments_object, zone); 2013 arguments_var, arguments_object, zone);
2013 } 2014 }
2014 2015
2015 void RegisterReturnTarget(HBasicBlock* return_target, Zone* zone); 2016 void RegisterReturnTarget(HBasicBlock* return_target, Zone* zone);
2016 ZoneList<HBasicBlock*>* return_targets() { return &return_targets_; } 2017 ZoneList<HBasicBlock*>* return_targets() { return &return_targets_; }
2017 2018
2018 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2019 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2019 2020
2020 Handle<JSFunction> closure() const { return closure_; } 2021 Handle<JSFunction> closure() const { return closure_; }
2021 HConstant* closure_context() const { return closure_context_; } 2022 HConstant* closure_context() const { return closure_context_; }
2022 int arguments_count() const { return arguments_count_; } 2023 int arguments_count() const { return arguments_count_; }
2023 bool arguments_pushed() const { return arguments_pushed_; } 2024 bool arguments_pushed() const { return arguments_pushed_; }
2024 void set_arguments_pushed() { arguments_pushed_ = true; } 2025 void set_arguments_pushed() { arguments_pushed_ = true; }
2025 FunctionLiteral* function() const { return function_; } 2026 FunctionLiteral* function() const { return function_; }
2026 InliningKind inlining_kind() const { return inlining_kind_; } 2027 InliningKind inlining_kind() const { return inlining_kind_; }
2027 BailoutId ReturnId() const { return return_id_; } 2028 BailoutId ReturnId() const { return return_id_; }
2028 2029
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
2242 HUnaryCall(HValue* value, int argument_count) 2243 HUnaryCall(HValue* value, int argument_count)
2243 : HCall<1>(argument_count) { 2244 : HCall<1>(argument_count) {
2244 SetOperandAt(0, value); 2245 SetOperandAt(0, value);
2245 } 2246 }
2246 2247
2247 virtual Representation RequiredInputRepresentation( 2248 virtual Representation RequiredInputRepresentation(
2248 int index) FINAL OVERRIDE { 2249 int index) FINAL OVERRIDE {
2249 return Representation::Tagged(); 2250 return Representation::Tagged();
2250 } 2251 }
2251 2252
2252 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2253 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2253 2254
2254 HValue* value() const { return OperandAt(0); } 2255 HValue* value() const { return OperandAt(0); }
2255 }; 2256 };
2256 2257
2257 2258
2258 class HBinaryCall : public HCall<2> { 2259 class HBinaryCall : public HCall<2> {
2259 public: 2260 public:
2260 HBinaryCall(HValue* first, HValue* second, int argument_count) 2261 HBinaryCall(HValue* first, HValue* second, int argument_count)
2261 : HCall<2>(argument_count) { 2262 : HCall<2>(argument_count) {
2262 SetOperandAt(0, first); 2263 SetOperandAt(0, first);
2263 SetOperandAt(1, second); 2264 SetOperandAt(1, second);
2264 } 2265 }
2265 2266
2266 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2267 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2267 2268
2268 virtual Representation RequiredInputRepresentation( 2269 virtual Representation RequiredInputRepresentation(
2269 int index) FINAL OVERRIDE { 2270 int index) FINAL OVERRIDE {
2270 return Representation::Tagged(); 2271 return Representation::Tagged();
2271 } 2272 }
2272 2273
2273 HValue* first() const { return OperandAt(0); } 2274 HValue* first() const { return OperandAt(0); }
2274 HValue* second() const { return OperandAt(1); } 2275 HValue* second() const { return OperandAt(1); }
2275 }; 2276 };
2276 2277
2277 2278
2278 class HCallJSFunction FINAL : public HCall<1> { 2279 class HCallJSFunction FINAL : public HCall<1> {
2279 public: 2280 public:
2280 static HCallJSFunction* New(Zone* zone, 2281 static HCallJSFunction* New(Zone* zone,
2281 HValue* context, 2282 HValue* context,
2282 HValue* function, 2283 HValue* function,
2283 int argument_count, 2284 int argument_count,
2284 bool pass_argument_count); 2285 bool pass_argument_count);
2285 2286
2286 HValue* function() const { return OperandAt(0); } 2287 HValue* function() const { return OperandAt(0); }
2287 2288
2288 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2289 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2289 2290
2290 virtual Representation RequiredInputRepresentation( 2291 virtual Representation RequiredInputRepresentation(
2291 int index) FINAL OVERRIDE { 2292 int index) FINAL OVERRIDE {
2292 DCHECK(index == 0); 2293 DCHECK(index == 0);
2293 return Representation::Tagged(); 2294 return Representation::Tagged();
2294 } 2295 }
2295 2296
2296 bool pass_argument_count() const { return pass_argument_count_; } 2297 bool pass_argument_count() const { return pass_argument_count_; }
2297 2298
2298 virtual bool HasStackCheck() FINAL OVERRIDE { 2299 virtual bool HasStackCheck() FINAL OVERRIDE {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 virtual int argument_delta() const OVERRIDE { 2362 virtual int argument_delta() const OVERRIDE {
2362 return -argument_count_; 2363 return -argument_count_;
2363 } 2364 }
2364 2365
2365 CallInterfaceDescriptor descriptor() const { return descriptor_; } 2366 CallInterfaceDescriptor descriptor() const { return descriptor_; }
2366 2367
2367 HValue* target() { 2368 HValue* target() {
2368 return OperandAt(0); 2369 return OperandAt(0);
2369 } 2370 }
2370 2371
2371 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2372 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2372 2373
2373 private: 2374 private:
2374 // The argument count includes the receiver. 2375 // The argument count includes the receiver.
2375 HCallWithDescriptor(HValue* target, int argument_count, 2376 HCallWithDescriptor(HValue* target, int argument_count,
2376 CallInterfaceDescriptor descriptor, 2377 CallInterfaceDescriptor descriptor,
2377 const Vector<HValue*>& operands, Zone* zone) 2378 const Vector<HValue*>& operands, Zone* zone)
2378 : descriptor_(descriptor), 2379 : descriptor_(descriptor),
2379 values_(descriptor.GetEnvironmentLength() + 1, zone) { 2380 values_(descriptor.GetEnvironmentLength() + 1, zone) {
2380 argument_count_ = argument_count; 2381 argument_count_ = argument_count;
2381 AddOperand(target, zone); 2382 AddOperand(target, zone);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
2494 class HCallNewArray FINAL : public HBinaryCall { 2495 class HCallNewArray FINAL : public HBinaryCall {
2495 public: 2496 public:
2496 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCallNewArray, 2497 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCallNewArray,
2497 HValue*, 2498 HValue*,
2498 int, 2499 int,
2499 ElementsKind); 2500 ElementsKind);
2500 2501
2501 HValue* context() { return first(); } 2502 HValue* context() { return first(); }
2502 HValue* constructor() { return second(); } 2503 HValue* constructor() { return second(); }
2503 2504
2504 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2505 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2505 2506
2506 ElementsKind elements_kind() const { return elements_kind_; } 2507 ElementsKind elements_kind() const { return elements_kind_; }
2507 2508
2508 DECLARE_CONCRETE_INSTRUCTION(CallNewArray) 2509 DECLARE_CONCRETE_INSTRUCTION(CallNewArray)
2509 2510
2510 private: 2511 private:
2511 HCallNewArray(HValue* context, HValue* constructor, int argument_count, 2512 HCallNewArray(HValue* context, HValue* constructor, int argument_count,
2512 ElementsKind elements_kind) 2513 ElementsKind elements_kind)
2513 : HBinaryCall(context, constructor, argument_count), 2514 : HBinaryCall(context, constructor, argument_count),
2514 elements_kind_(elements_kind) {} 2515 elements_kind_(elements_kind) {}
2515 2516
2516 ElementsKind elements_kind_; 2517 ElementsKind elements_kind_;
2517 }; 2518 };
2518 2519
2519 2520
2520 class HCallRuntime FINAL : public HCall<1> { 2521 class HCallRuntime FINAL : public HCall<1> {
2521 public: 2522 public:
2522 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCallRuntime, 2523 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCallRuntime,
2523 Handle<String>, 2524 Handle<String>,
2524 const Runtime::Function*, 2525 const Runtime::Function*,
2525 int); 2526 int);
2526 2527
2527 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2528 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2528 2529
2529 HValue* context() { return OperandAt(0); } 2530 HValue* context() { return OperandAt(0); }
2530 const Runtime::Function* function() const { return c_function_; } 2531 const Runtime::Function* function() const { return c_function_; }
2531 Handle<String> name() const { return name_; } 2532 Handle<String> name() const { return name_; }
2532 SaveFPRegsMode save_doubles() const { return save_doubles_; } 2533 SaveFPRegsMode save_doubles() const { return save_doubles_; }
2533 void set_save_doubles(SaveFPRegsMode save_doubles) { 2534 void set_save_doubles(SaveFPRegsMode save_doubles) {
2534 save_doubles_ = save_doubles; 2535 save_doubles_ = save_doubles;
2535 } 2536 }
2536 2537
2537 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 2538 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2584 class HUnaryMathOperation FINAL : public HTemplateInstruction<2> { 2585 class HUnaryMathOperation FINAL : public HTemplateInstruction<2> {
2585 public: 2586 public:
2586 static HInstruction* New(Zone* zone, 2587 static HInstruction* New(Zone* zone,
2587 HValue* context, 2588 HValue* context,
2588 HValue* value, 2589 HValue* value,
2589 BuiltinFunctionId op); 2590 BuiltinFunctionId op);
2590 2591
2591 HValue* context() const { return OperandAt(0); } 2592 HValue* context() const { return OperandAt(0); }
2592 HValue* value() const { return OperandAt(1); } 2593 HValue* value() const { return OperandAt(1); }
2593 2594
2594 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2595 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2595 2596
2596 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 2597 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
2597 if (index == 0) { 2598 if (index == 0) {
2598 return Representation::Tagged(); 2599 return Representation::Tagged();
2599 } else { 2600 } else {
2600 switch (op_) { 2601 switch (op_) {
2601 case kMathFloor: 2602 case kMathFloor:
2602 case kMathRound: 2603 case kMathRound:
2603 case kMathFround: 2604 case kMathFround:
2604 case kMathSqrt: 2605 case kMathSqrt:
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
2754 virtual bool HasEscapingOperandAt(int index) OVERRIDE { return false; } 2755 virtual bool HasEscapingOperandAt(int index) OVERRIDE { return false; }
2755 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 2756 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
2756 return Representation::Tagged(); 2757 return Representation::Tagged();
2757 } 2758 }
2758 2759
2759 virtual HType CalculateInferredType() OVERRIDE { 2760 virtual HType CalculateInferredType() OVERRIDE {
2760 if (value()->type().IsHeapObject()) return value()->type(); 2761 if (value()->type().IsHeapObject()) return value()->type();
2761 return HType::HeapObject(); 2762 return HType::HeapObject();
2762 } 2763 }
2763 2764
2764 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2765 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2765 2766
2766 HValue* value() const { return OperandAt(0); } 2767 HValue* value() const { return OperandAt(0); }
2767 HValue* typecheck() const { return OperandAt(1); } 2768 HValue* typecheck() const { return OperandAt(1); }
2768 2769
2769 const UniqueSet<Map>* maps() const { return maps_; } 2770 const UniqueSet<Map>* maps() const { return maps_; }
2770 void set_maps(const UniqueSet<Map>* maps) { maps_ = maps; } 2771 void set_maps(const UniqueSet<Map>* maps) { maps_ = maps; }
2771 2772
2772 bool maps_are_stable() const { return maps_are_stable_; } 2773 bool maps_are_stable() const { return maps_are_stable_; }
2773 2774
2774 bool HasMigrationTarget() const { return has_migration_target_; } 2775 bool HasMigrationTarget() const { return has_migration_target_; }
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
2862 return new(zone) HCheckValue(value, target, object_in_new_space); 2863 return new(zone) HCheckValue(value, target, object_in_new_space);
2863 } 2864 }
2864 2865
2865 virtual void FinalizeUniqueness() OVERRIDE { 2866 virtual void FinalizeUniqueness() OVERRIDE {
2866 object_ = Unique<HeapObject>(object_.handle()); 2867 object_ = Unique<HeapObject>(object_.handle());
2867 } 2868 }
2868 2869
2869 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 2870 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
2870 return Representation::Tagged(); 2871 return Representation::Tagged();
2871 } 2872 }
2872 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2873 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2873 2874
2874 virtual HValue* Canonicalize() OVERRIDE; 2875 virtual HValue* Canonicalize() OVERRIDE;
2875 2876
2876 #ifdef DEBUG 2877 #ifdef DEBUG
2877 virtual void Verify() OVERRIDE; 2878 virtual void Verify() OVERRIDE;
2878 #endif 2879 #endif
2879 2880
2880 Unique<HeapObject> object() const { return object_; } 2881 Unique<HeapObject> object() const { return object_; }
2881 bool object_in_new_space() const { return object_in_new_space_; } 2882 bool object_in_new_space() const { return object_in_new_space_; }
2882 2883
(...skipping 25 matching lines...) Expand all
2908 enum Check { 2909 enum Check {
2909 IS_SPEC_OBJECT, 2910 IS_SPEC_OBJECT,
2910 IS_JS_ARRAY, 2911 IS_JS_ARRAY,
2911 IS_STRING, 2912 IS_STRING,
2912 IS_INTERNALIZED_STRING, 2913 IS_INTERNALIZED_STRING,
2913 LAST_INTERVAL_CHECK = IS_JS_ARRAY 2914 LAST_INTERVAL_CHECK = IS_JS_ARRAY
2914 }; 2915 };
2915 2916
2916 DECLARE_INSTRUCTION_FACTORY_P2(HCheckInstanceType, HValue*, Check); 2917 DECLARE_INSTRUCTION_FACTORY_P2(HCheckInstanceType, HValue*, Check);
2917 2918
2918 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 2919 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2919 2920
2920 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 2921 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
2921 return Representation::Tagged(); 2922 return Representation::Tagged();
2922 } 2923 }
2923 2924
2924 virtual HType CalculateInferredType() OVERRIDE { 2925 virtual HType CalculateInferredType() OVERRIDE {
2925 switch (check_) { 2926 switch (check_) {
2926 case IS_SPEC_OBJECT: return HType::JSObject(); 2927 case IS_SPEC_OBJECT: return HType::JSObject();
2927 case IS_JS_ARRAY: return HType::JSArray(); 2928 case IS_JS_ARRAY: return HType::JSArray();
2928 case IS_STRING: return HType::String(); 2929 case IS_STRING: return HType::String();
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
3301 } 3302 }
3302 bool IsLimitedInductionVariable() { 3303 bool IsLimitedInductionVariable() {
3303 return IsInductionVariable() && 3304 return IsInductionVariable() &&
3304 induction_variable_data_->limit() != NULL; 3305 induction_variable_data_->limit() != NULL;
3305 } 3306 }
3306 void DetectInductionVariable() { 3307 void DetectInductionVariable() {
3307 DCHECK(induction_variable_data_ == NULL); 3308 DCHECK(induction_variable_data_ == NULL);
3308 induction_variable_data_ = InductionVariableData::ExaminePhi(this); 3309 induction_variable_data_ = InductionVariableData::ExaminePhi(this);
3309 } 3310 }
3310 3311
3311 virtual OStream& PrintTo(OStream& os) const OVERRIDE; // NOLINT 3312 virtual std::ostream& PrintTo(std::ostream& os) const OVERRIDE; // NOLINT
3312 3313
3313 #ifdef DEBUG 3314 #ifdef DEBUG
3314 virtual void Verify() OVERRIDE; 3315 virtual void Verify() OVERRIDE;
3315 #endif 3316 #endif
3316 3317
3317 void InitRealUses(int id); 3318 void InitRealUses(int id);
3318 void AddNonPhiUsesFrom(HPhi* other); 3319 void AddNonPhiUsesFrom(HPhi* other);
3319 void AddIndirectUsesTo(int* use_count); 3320 void AddIndirectUsesTo(int* use_count);
3320 3321
3321 int tagged_non_phi_uses() const { 3322 int tagged_non_phi_uses() const {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
3453 3454
3454 void ReuseSideEffectsFromStore(HInstruction* store) { 3455 void ReuseSideEffectsFromStore(HInstruction* store) {
3455 DCHECK(store->HasObservableSideEffects()); 3456 DCHECK(store->HasObservableSideEffects());
3456 DCHECK(store->IsStoreNamedField()); 3457 DCHECK(store->IsStoreNamedField());
3457 changes_flags_.Add(store->ChangesFlags()); 3458 changes_flags_.Add(store->ChangesFlags());
3458 } 3459 }
3459 3460
3460 // Replay effects of this instruction on the given environment. 3461 // Replay effects of this instruction on the given environment.
3461 void ReplayEnvironment(HEnvironment* env); 3462 void ReplayEnvironment(HEnvironment* env);
3462 3463
3463 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 3464 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
3464 3465
3465 DECLARE_CONCRETE_INSTRUCTION(CapturedObject) 3466 DECLARE_CONCRETE_INSTRUCTION(CapturedObject)
3466 3467
3467 private: 3468 private:
3468 int capture_id_; 3469 int capture_id_;
3469 3470
3470 // Note that we cannot DCE captured objects as they are used to replay 3471 // Note that we cannot DCE captured objects as they are used to replay
3471 // the environment. This method is here as an explicit reminder. 3472 // the environment. This method is here as an explicit reminder.
3472 // TODO(mstarzinger): Turn HSimulates into full snapshots maybe? 3473 // TODO(mstarzinger): Turn HSimulates into full snapshots maybe?
3473 virtual bool IsDeletable() const FINAL OVERRIDE { return false; } 3474 virtual bool IsDeletable() const FINAL OVERRIDE { return false; }
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
3567 3568
3568 virtual Representation KnownOptimalRepresentation() OVERRIDE { 3569 virtual Representation KnownOptimalRepresentation() OVERRIDE {
3569 if (HasSmiValue() && SmiValuesAre31Bits()) return Representation::Smi(); 3570 if (HasSmiValue() && SmiValuesAre31Bits()) return Representation::Smi();
3570 if (HasInteger32Value()) return Representation::Integer32(); 3571 if (HasInteger32Value()) return Representation::Integer32();
3571 if (HasNumberValue()) return Representation::Double(); 3572 if (HasNumberValue()) return Representation::Double();
3572 if (HasExternalReferenceValue()) return Representation::External(); 3573 if (HasExternalReferenceValue()) return Representation::External();
3573 return Representation::Tagged(); 3574 return Representation::Tagged();
3574 } 3575 }
3575 3576
3576 virtual bool EmitAtUses() OVERRIDE; 3577 virtual bool EmitAtUses() OVERRIDE;
3577 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 3578 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
3578 HConstant* CopyToRepresentation(Representation r, Zone* zone) const; 3579 HConstant* CopyToRepresentation(Representation r, Zone* zone) const;
3579 Maybe<HConstant*> CopyToTruncatedInt32(Zone* zone); 3580 Maybe<HConstant*> CopyToTruncatedInt32(Zone* zone);
3580 Maybe<HConstant*> CopyToTruncatedNumber(Zone* zone); 3581 Maybe<HConstant*> CopyToTruncatedNumber(Zone* zone);
3581 bool HasInteger32Value() const { return has_int32_value_; } 3582 bool HasInteger32Value() const { return has_int32_value_; }
3582 int32_t Integer32Value() const { 3583 int32_t Integer32Value() const {
3583 DCHECK(HasInteger32Value()); 3584 DCHECK(HasInteger32Value());
3584 return int32_value_; 3585 return int32_value_;
3585 } 3586 }
3586 bool HasSmiValue() const { return has_smi_value_; } 3587 bool HasSmiValue() const { return has_smi_value_; }
3587 bool HasDoubleValue() const { return has_double_value_; } 3588 bool HasDoubleValue() const { return has_double_value_; }
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
3831 } 3832 }
3832 3833
3833 virtual void InferRepresentation( 3834 virtual void InferRepresentation(
3834 HInferRepresentationPhase* h_infer) OVERRIDE; 3835 HInferRepresentationPhase* h_infer) OVERRIDE;
3835 virtual Representation RepresentationFromInputs() OVERRIDE; 3836 virtual Representation RepresentationFromInputs() OVERRIDE;
3836 Representation RepresentationFromOutput(); 3837 Representation RepresentationFromOutput();
3837 virtual void AssumeRepresentation(Representation r) OVERRIDE; 3838 virtual void AssumeRepresentation(Representation r) OVERRIDE;
3838 3839
3839 virtual bool IsCommutative() const { return false; } 3840 virtual bool IsCommutative() const { return false; }
3840 3841
3841 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 3842 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
3842 3843
3843 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 3844 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
3844 if (index == 0) return Representation::Tagged(); 3845 if (index == 0) return Representation::Tagged();
3845 return representation(); 3846 return representation();
3846 } 3847 }
3847 3848
3848 void SetOperandPositions(Zone* zone, 3849 void SetOperandPositions(Zone* zone,
3849 HSourcePosition left_pos, 3850 HSourcePosition left_pos,
3850 HSourcePosition right_pos) { 3851 HSourcePosition right_pos) {
3851 set_operand_position(zone, 1, left_pos); 3852 set_operand_position(zone, 1, left_pos);
(...skipping 27 matching lines...) Expand all
3879 3880
3880 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 3881 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
3881 return Representation::Tagged(); 3882 return Representation::Tagged();
3882 } 3883 }
3883 3884
3884 HValue* receiver() const { return OperandAt(0); } 3885 HValue* receiver() const { return OperandAt(0); }
3885 HValue* function() const { return OperandAt(1); } 3886 HValue* function() const { return OperandAt(1); }
3886 3887
3887 virtual HValue* Canonicalize() OVERRIDE; 3888 virtual HValue* Canonicalize() OVERRIDE;
3888 3889
3889 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 3890 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
3890 bool known_function() const { return known_function_; } 3891 bool known_function() const { return known_function_; }
3891 3892
3892 DECLARE_CONCRETE_INSTRUCTION(WrapReceiver) 3893 DECLARE_CONCRETE_INSTRUCTION(WrapReceiver)
3893 3894
3894 private: 3895 private:
3895 HWrapReceiver(HValue* receiver, HValue* function) { 3896 HWrapReceiver(HValue* receiver, HValue* function) {
3896 known_function_ = function->IsConstant() && 3897 known_function_ = function->IsConstant() &&
3897 HConstant::cast(function)->handle(function->isolate())->IsJSFunction(); 3898 HConstant::cast(function)->handle(function->isolate())->IsJSFunction();
3898 set_representation(Representation::Tagged()); 3899 set_representation(Representation::Tagged());
3899 SetOperandAt(0, receiver); 3900 SetOperandAt(0, receiver);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
3988 } 3989 }
3989 3990
3990 virtual bool IsDeletable() const OVERRIDE { return true; } 3991 virtual bool IsDeletable() const OVERRIDE { return true; }
3991 }; 3992 };
3992 3993
3993 3994
3994 class HAccessArgumentsAt FINAL : public HTemplateInstruction<3> { 3995 class HAccessArgumentsAt FINAL : public HTemplateInstruction<3> {
3995 public: 3996 public:
3996 DECLARE_INSTRUCTION_FACTORY_P3(HAccessArgumentsAt, HValue*, HValue*, HValue*); 3997 DECLARE_INSTRUCTION_FACTORY_P3(HAccessArgumentsAt, HValue*, HValue*, HValue*);
3997 3998
3998 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 3999 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
3999 4000
4000 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4001 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4001 // The arguments elements is considered tagged. 4002 // The arguments elements is considered tagged.
4002 return index == 0 4003 return index == 0
4003 ? Representation::Tagged() 4004 ? Representation::Tagged()
4004 : Representation::Integer32(); 4005 : Representation::Integer32();
4005 } 4006 }
4006 4007
4007 HValue* arguments() const { return OperandAt(0); } 4008 HValue* arguments() const { return OperandAt(0); }
4008 HValue* length() const { return OperandAt(1); } 4009 HValue* length() const { return OperandAt(1); }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
4052 offset_ = 0; 4053 offset_ = 0;
4053 scale_ = 0; 4054 scale_ = 0;
4054 return false; 4055 return false;
4055 } 4056 }
4056 } 4057 }
4057 4058
4058 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4059 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4059 return representation(); 4060 return representation();
4060 } 4061 }
4061 4062
4062 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4063 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4063 virtual void InferRepresentation( 4064 virtual void InferRepresentation(
4064 HInferRepresentationPhase* h_infer) OVERRIDE; 4065 HInferRepresentationPhase* h_infer) OVERRIDE;
4065 4066
4066 HValue* index() const { return OperandAt(0); } 4067 HValue* index() const { return OperandAt(0); }
4067 HValue* length() const { return OperandAt(1); } 4068 HValue* length() const { return OperandAt(1); }
4068 bool allow_equality() const { return allow_equality_; } 4069 bool allow_equality() const { return allow_equality_; }
4069 void set_allow_equality(bool v) { allow_equality_ = v; } 4070 void set_allow_equality(bool v) { allow_equality_ = v; }
4070 4071
4071 virtual int RedefinedOperandIndex() OVERRIDE { return 0; } 4072 virtual int RedefinedOperandIndex() OVERRIDE { return 0; }
4072 virtual bool IsPurelyInformativeDefinition() OVERRIDE { 4073 virtual bool IsPurelyInformativeDefinition() OVERRIDE {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
4123 4124
4124 HValue* base_index() const { return OperandAt(0); } 4125 HValue* base_index() const { return OperandAt(0); }
4125 HBoundsCheck* bounds_check() { return HBoundsCheck::cast(OperandAt(1)); } 4126 HBoundsCheck* bounds_check() { return HBoundsCheck::cast(OperandAt(1)); }
4126 4127
4127 DECLARE_CONCRETE_INSTRUCTION(BoundsCheckBaseIndexInformation) 4128 DECLARE_CONCRETE_INSTRUCTION(BoundsCheckBaseIndexInformation)
4128 4129
4129 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4130 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4130 return representation(); 4131 return representation();
4131 } 4132 }
4132 4133
4133 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4134 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4134 4135
4135 virtual int RedefinedOperandIndex() OVERRIDE { return 0; } 4136 virtual int RedefinedOperandIndex() OVERRIDE { return 0; }
4136 virtual bool IsPurelyInformativeDefinition() OVERRIDE { return true; } 4137 virtual bool IsPurelyInformativeDefinition() OVERRIDE { return true; }
4137 }; 4138 };
4138 4139
4139 4140
4140 class HBitwiseBinaryOperation : public HBinaryOperation { 4141 class HBitwiseBinaryOperation : public HBinaryOperation {
4141 public: 4142 public:
4142 HBitwiseBinaryOperation(HValue* context, HValue* left, HValue* right, 4143 HBitwiseBinaryOperation(HValue* context, HValue* left, HValue* right,
4143 HType type = HType::TaggedNumber()) 4144 HType type = HType::TaggedNumber())
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
4249 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCompareGeneric, HValue*, 4250 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCompareGeneric, HValue*,
4250 HValue*, Token::Value); 4251 HValue*, Token::Value);
4251 4252
4252 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4253 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4253 return index == 0 4254 return index == 0
4254 ? Representation::Tagged() 4255 ? Representation::Tagged()
4255 : representation(); 4256 : representation();
4256 } 4257 }
4257 4258
4258 Token::Value token() const { return token_; } 4259 Token::Value token() const { return token_; }
4259 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4260 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4260 4261
4261 DECLARE_CONCRETE_INSTRUCTION(CompareGeneric) 4262 DECLARE_CONCRETE_INSTRUCTION(CompareGeneric)
4262 4263
4263 private: 4264 private:
4264 HCompareGeneric(HValue* context, 4265 HCompareGeneric(HValue* context,
4265 HValue* left, 4266 HValue* left,
4266 HValue* right, 4267 HValue* right,
4267 Token::Value token) 4268 Token::Value token)
4268 : HBinaryOperation(context, left, right, HType::Boolean()), 4269 : HBinaryOperation(context, left, right, HType::Boolean()),
4269 token_(token) { 4270 token_(token) {
(...skipping 29 matching lines...) Expand all
4299 4300
4300 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4301 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4301 return representation(); 4302 return representation();
4302 } 4303 }
4303 virtual Representation observed_input_representation(int index) OVERRIDE { 4304 virtual Representation observed_input_representation(int index) OVERRIDE {
4304 return observed_input_representation_[index]; 4305 return observed_input_representation_[index];
4305 } 4306 }
4306 4307
4307 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE; 4308 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE;
4308 4309
4309 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4310 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4310 4311
4311 void SetOperandPositions(Zone* zone, 4312 void SetOperandPositions(Zone* zone,
4312 HSourcePosition left_pos, 4313 HSourcePosition left_pos,
4313 HSourcePosition right_pos) { 4314 HSourcePosition right_pos) {
4314 set_operand_position(zone, 0, left_pos); 4315 set_operand_position(zone, 0, left_pos);
4315 set_operand_position(zone, 1, right_pos); 4316 set_operand_position(zone, 1, right_pos);
4316 } 4317 }
4317 4318
4318 DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch) 4319 DECLARE_CONCRETE_INSTRUCTION(CompareNumericAndBranch)
4319 4320
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
4395 4396
4396 static const int kNoKnownSuccessorIndex = -1; 4397 static const int kNoKnownSuccessorIndex = -1;
4397 int known_successor_index() const { return known_successor_index_; } 4398 int known_successor_index() const { return known_successor_index_; }
4398 void set_known_successor_index(int known_successor_index) { 4399 void set_known_successor_index(int known_successor_index) {
4399 known_successor_index_ = known_successor_index; 4400 known_successor_index_ = known_successor_index;
4400 } 4401 }
4401 4402
4402 HValue* left() const { return OperandAt(0); } 4403 HValue* left() const { return OperandAt(0); }
4403 HValue* right() const { return OperandAt(1); } 4404 HValue* right() const { return OperandAt(1); }
4404 4405
4405 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4406 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4406 4407
4407 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4408 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4408 return Representation::Tagged(); 4409 return Representation::Tagged();
4409 } 4410 }
4410 4411
4411 virtual Representation observed_input_representation(int index) OVERRIDE { 4412 virtual Representation observed_input_representation(int index) OVERRIDE {
4412 return Representation::Tagged(); 4413 return Representation::Tagged();
4413 } 4414 }
4414 4415
4415 DECLARE_CONCRETE_INSTRUCTION(CompareObjectEqAndBranch) 4416 DECLARE_CONCRETE_INSTRUCTION(CompareObjectEqAndBranch)
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
4539 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HStringCompareAndBranch, 4540 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HStringCompareAndBranch,
4540 HValue*, 4541 HValue*,
4541 HValue*, 4542 HValue*,
4542 Token::Value); 4543 Token::Value);
4543 4544
4544 HValue* context() { return OperandAt(0); } 4545 HValue* context() { return OperandAt(0); }
4545 HValue* left() { return OperandAt(1); } 4546 HValue* left() { return OperandAt(1); }
4546 HValue* right() { return OperandAt(2); } 4547 HValue* right() { return OperandAt(2); }
4547 Token::Value token() const { return token_; } 4548 Token::Value token() const { return token_; }
4548 4549
4549 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4550 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4550 4551
4551 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4552 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4552 return Representation::Tagged(); 4553 return Representation::Tagged();
4553 } 4554 }
4554 4555
4555 Representation GetInputRepresentation() const { 4556 Representation GetInputRepresentation() const {
4556 return Representation::Tagged(); 4557 return Representation::Tagged();
4557 } 4558 }
4558 4559
4559 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch) 4560 DECLARE_CONCRETE_INSTRUCTION(StringCompareAndBranch)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
4593 class HHasInstanceTypeAndBranch FINAL : public HUnaryControlInstruction { 4594 class HHasInstanceTypeAndBranch FINAL : public HUnaryControlInstruction {
4594 public: 4595 public:
4595 DECLARE_INSTRUCTION_FACTORY_P2( 4596 DECLARE_INSTRUCTION_FACTORY_P2(
4596 HHasInstanceTypeAndBranch, HValue*, InstanceType); 4597 HHasInstanceTypeAndBranch, HValue*, InstanceType);
4597 DECLARE_INSTRUCTION_FACTORY_P3( 4598 DECLARE_INSTRUCTION_FACTORY_P3(
4598 HHasInstanceTypeAndBranch, HValue*, InstanceType, InstanceType); 4599 HHasInstanceTypeAndBranch, HValue*, InstanceType, InstanceType);
4599 4600
4600 InstanceType from() { return from_; } 4601 InstanceType from() { return from_; }
4601 InstanceType to() { return to_; } 4602 InstanceType to() { return to_; }
4602 4603
4603 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4604 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4604 4605
4605 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4606 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4606 return Representation::Tagged(); 4607 return Representation::Tagged();
4607 } 4608 }
4608 4609
4609 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE; 4610 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE;
4610 4611
4611 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch) 4612 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch)
4612 4613
4613 private: 4614 private:
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
4665 public: 4666 public:
4666 DECLARE_INSTRUCTION_FACTORY_P2(HClassOfTestAndBranch, HValue*, 4667 DECLARE_INSTRUCTION_FACTORY_P2(HClassOfTestAndBranch, HValue*,
4667 Handle<String>); 4668 Handle<String>);
4668 4669
4669 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch) 4670 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch)
4670 4671
4671 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4672 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4672 return Representation::Tagged(); 4673 return Representation::Tagged();
4673 } 4674 }
4674 4675
4675 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4676 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4676 4677
4677 Handle<String> class_name() const { return class_name_; } 4678 Handle<String> class_name() const { return class_name_; }
4678 4679
4679 private: 4680 private:
4680 HClassOfTestAndBranch(HValue* value, Handle<String> class_name) 4681 HClassOfTestAndBranch(HValue* value, Handle<String> class_name)
4681 : HUnaryControlInstruction(value, NULL, NULL), 4682 : HUnaryControlInstruction(value, NULL, NULL),
4682 class_name_(class_name) { } 4683 class_name_(class_name) { }
4683 4684
4684 Handle<String> class_name_; 4685 Handle<String> class_name_;
4685 }; 4686 };
4686 4687
4687 4688
4688 class HTypeofIsAndBranch FINAL : public HUnaryControlInstruction { 4689 class HTypeofIsAndBranch FINAL : public HUnaryControlInstruction {
4689 public: 4690 public:
4690 DECLARE_INSTRUCTION_FACTORY_P2(HTypeofIsAndBranch, HValue*, Handle<String>); 4691 DECLARE_INSTRUCTION_FACTORY_P2(HTypeofIsAndBranch, HValue*, Handle<String>);
4691 4692
4692 Handle<String> type_literal() const { return type_literal_.handle(); } 4693 Handle<String> type_literal() const { return type_literal_.handle(); }
4693 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4694 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4694 4695
4695 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch) 4696 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch)
4696 4697
4697 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4698 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4698 return Representation::None(); 4699 return Representation::None();
4699 } 4700 }
4700 4701
4701 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE; 4702 virtual bool KnownSuccessorBlock(HBasicBlock** block) OVERRIDE;
4702 4703
4703 virtual void FinalizeUniqueness() OVERRIDE { 4704 virtual void FinalizeUniqueness() OVERRIDE {
(...skipping 10 matching lines...) Expand all
4714 4715
4715 4716
4716 class HInstanceOf FINAL : public HBinaryOperation { 4717 class HInstanceOf FINAL : public HBinaryOperation {
4717 public: 4718 public:
4718 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOf, HValue*, HValue*); 4719 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOf, HValue*, HValue*);
4719 4720
4720 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 4721 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
4721 return Representation::Tagged(); 4722 return Representation::Tagged();
4722 } 4723 }
4723 4724
4724 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 4725 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
4725 4726
4726 DECLARE_CONCRETE_INSTRUCTION(InstanceOf) 4727 DECLARE_CONCRETE_INSTRUCTION(InstanceOf)
4727 4728
4728 private: 4729 private:
4729 HInstanceOf(HValue* context, HValue* left, HValue* right) 4730 HInstanceOf(HValue* context, HValue* left, HValue* right)
4730 : HBinaryOperation(context, left, right, HType::Boolean()) { 4731 : HBinaryOperation(context, left, right, HType::Boolean()) {
4731 set_representation(Representation::Tagged()); 4732 set_representation(Representation::Tagged());
4732 SetAllSideEffects(); 4733 SetAllSideEffects();
4733 } 4734 }
4734 }; 4735 };
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
5073 Token::Value op, 5074 Token::Value op,
5074 HValue* left, 5075 HValue* left,
5075 HValue* right); 5076 HValue* right);
5076 5077
5077 Token::Value op() const { return op_; } 5078 Token::Value op() const { return op_; }
5078 5079
5079 virtual bool IsCommutative() const OVERRIDE { return true; } 5080 virtual bool IsCommutative() const OVERRIDE { return true; }
5080 5081
5081 virtual HValue* Canonicalize() OVERRIDE; 5082 virtual HValue* Canonicalize() OVERRIDE;
5082 5083
5083 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5084 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5084 5085
5085 DECLARE_CONCRETE_INSTRUCTION(Bitwise) 5086 DECLARE_CONCRETE_INSTRUCTION(Bitwise)
5086 5087
5087 protected: 5088 protected:
5088 virtual bool DataEquals(HValue* other) OVERRIDE { 5089 virtual bool DataEquals(HValue* other) OVERRIDE {
5089 return op() == HBitwise::cast(other)->op(); 5090 return op() == HBitwise::cast(other)->op();
5090 } 5091 }
5091 5092
5092 virtual Range* InferRange(Zone* zone) OVERRIDE; 5093 virtual Range* InferRange(Zone* zone) OVERRIDE;
5093 5094
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
5296 }; 5297 };
5297 5298
5298 DECLARE_INSTRUCTION_FACTORY_P1(HParameter, unsigned); 5299 DECLARE_INSTRUCTION_FACTORY_P1(HParameter, unsigned);
5299 DECLARE_INSTRUCTION_FACTORY_P2(HParameter, unsigned, ParameterKind); 5300 DECLARE_INSTRUCTION_FACTORY_P2(HParameter, unsigned, ParameterKind);
5300 DECLARE_INSTRUCTION_FACTORY_P3(HParameter, unsigned, ParameterKind, 5301 DECLARE_INSTRUCTION_FACTORY_P3(HParameter, unsigned, ParameterKind,
5301 Representation); 5302 Representation);
5302 5303
5303 unsigned index() const { return index_; } 5304 unsigned index() const { return index_; }
5304 ParameterKind kind() const { return kind_; } 5305 ParameterKind kind() const { return kind_; }
5305 5306
5306 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5307 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5307 5308
5308 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5309 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5309 return Representation::None(); 5310 return Representation::None();
5310 } 5311 }
5311 5312
5312 DECLARE_CONCRETE_INSTRUCTION(Parameter) 5313 DECLARE_CONCRETE_INSTRUCTION(Parameter)
5313 5314
5314 private: 5315 private:
5315 explicit HParameter(unsigned index, 5316 explicit HParameter(unsigned index,
5316 ParameterKind kind = STACK_PARAMETER) 5317 ParameterKind kind = STACK_PARAMETER)
(...skipping 15 matching lines...) Expand all
5332 }; 5333 };
5333 5334
5334 5335
5335 class HCallStub FINAL : public HUnaryCall { 5336 class HCallStub FINAL : public HUnaryCall {
5336 public: 5337 public:
5337 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallStub, CodeStub::Major, int); 5338 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallStub, CodeStub::Major, int);
5338 CodeStub::Major major_key() { return major_key_; } 5339 CodeStub::Major major_key() { return major_key_; }
5339 5340
5340 HValue* context() { return value(); } 5341 HValue* context() { return value(); }
5341 5342
5342 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5343 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5343 5344
5344 DECLARE_CONCRETE_INSTRUCTION(CallStub) 5345 DECLARE_CONCRETE_INSTRUCTION(CallStub)
5345 5346
5346 private: 5347 private:
5347 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count) 5348 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count)
5348 : HUnaryCall(context, argument_count), 5349 : HUnaryCall(context, argument_count),
5349 major_key_(major_key) { 5350 major_key_(major_key) {
5350 } 5351 }
5351 5352
5352 CodeStub::Major major_key_; 5353 CodeStub::Major major_key_;
5353 }; 5354 };
5354 5355
5355 5356
5356 class HTailCallThroughMegamorphicCache FINAL : public HTemplateInstruction<3> { 5357 class HTailCallThroughMegamorphicCache FINAL : public HTemplateInstruction<3> {
5357 public: 5358 public:
5358 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HTailCallThroughMegamorphicCache, 5359 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HTailCallThroughMegamorphicCache,
5359 HValue*, HValue*, Code::Flags); 5360 HValue*, HValue*, Code::Flags);
5360 5361
5361 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5362 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5362 return Representation::Tagged(); 5363 return Representation::Tagged();
5363 } 5364 }
5364 5365
5365 HValue* context() const { return OperandAt(0); } 5366 HValue* context() const { return OperandAt(0); }
5366 HValue* receiver() const { return OperandAt(1); } 5367 HValue* receiver() const { return OperandAt(1); }
5367 HValue* name() const { return OperandAt(2); } 5368 HValue* name() const { return OperandAt(2); }
5368 Code::Flags flags() const { return flags_; } 5369 Code::Flags flags() const { return flags_; }
5369 5370
5370 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5371 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5371 5372
5372 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache) 5373 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache)
5373 5374
5374 private: 5375 private:
5375 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, 5376 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver,
5376 HValue* name, Code::Flags flags) 5377 HValue* name, Code::Flags flags)
5377 : flags_(flags) { 5378 : flags_(flags) {
5378 SetOperandAt(0, context); 5379 SetOperandAt(0, context);
5379 SetOperandAt(1, receiver); 5380 SetOperandAt(1, receiver);
5380 SetOperandAt(2, name); 5381 SetOperandAt(2, name);
5381 } 5382 }
5382 5383
5383 Code::Flags flags_; 5384 Code::Flags flags_;
5384 }; 5385 };
5385 5386
5386 5387
5387 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> { 5388 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> {
5388 public: 5389 public:
5389 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int); 5390 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int);
5390 5391
5391 virtual OStream& PrintDataTo(OStream& os) const; // NOLINT 5392 virtual std::ostream& PrintDataTo(std::ostream& os) const; // NOLINT
5392 5393
5393 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5394 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5394 return Representation::None(); 5395 return Representation::None();
5395 } 5396 }
5396 5397
5397 void set_incoming_value(HPhi* value) { incoming_value_ = value; } 5398 void set_incoming_value(HPhi* value) { incoming_value_ = value; }
5398 HPhi* incoming_value() { return incoming_value_; } 5399 HPhi* incoming_value() { return incoming_value_; }
5399 HEnvironment *environment() { return environment_; } 5400 HEnvironment *environment() { return environment_; }
5400 int index() { return index_; } 5401 int index() { return index_; }
5401 5402
(...skipping 19 matching lines...) Expand all
5421 5422
5422 5423
5423 class HLoadGlobalCell FINAL : public HTemplateInstruction<0> { 5424 class HLoadGlobalCell FINAL : public HTemplateInstruction<0> {
5424 public: 5425 public:
5425 DECLARE_INSTRUCTION_FACTORY_P2(HLoadGlobalCell, Handle<Cell>, 5426 DECLARE_INSTRUCTION_FACTORY_P2(HLoadGlobalCell, Handle<Cell>,
5426 PropertyDetails); 5427 PropertyDetails);
5427 5428
5428 Unique<Cell> cell() const { return cell_; } 5429 Unique<Cell> cell() const { return cell_; }
5429 bool RequiresHoleCheck() const; 5430 bool RequiresHoleCheck() const;
5430 5431
5431 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5432 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5432 5433
5433 virtual intptr_t Hashcode() OVERRIDE { 5434 virtual intptr_t Hashcode() OVERRIDE {
5434 return cell_.Hashcode(); 5435 return cell_.Hashcode();
5435 } 5436 }
5436 5437
5437 virtual void FinalizeUniqueness() OVERRIDE { 5438 virtual void FinalizeUniqueness() OVERRIDE {
5438 cell_ = Unique<Cell>(cell_.handle()); 5439 cell_ = Unique<Cell>(cell_.handle());
5439 } 5440 }
5440 5441
5441 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5442 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
5478 slot_ != FeedbackSlotInterface::kInvalidFeedbackSlot); 5479 slot_ != FeedbackSlotInterface::kInvalidFeedbackSlot);
5479 return slot_; 5480 return slot_;
5480 } 5481 }
5481 Handle<FixedArray> feedback_vector() const { return feedback_vector_; } 5482 Handle<FixedArray> feedback_vector() const { return feedback_vector_; }
5482 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) { 5483 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) {
5483 DCHECK(FLAG_vector_ics); 5484 DCHECK(FLAG_vector_ics);
5484 feedback_vector_ = vector; 5485 feedback_vector_ = vector;
5485 slot_ = slot; 5486 slot_ = slot;
5486 } 5487 }
5487 5488
5488 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5489 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5489 5490
5490 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5491 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5491 return Representation::Tagged(); 5492 return Representation::Tagged();
5492 } 5493 }
5493 5494
5494 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric) 5495 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric)
5495 5496
5496 private: 5497 private:
5497 HLoadGlobalGeneric(HValue* context, HValue* global_object, 5498 HLoadGlobalGeneric(HValue* context, HValue* global_object,
5498 Handle<String> name, bool for_typeof) 5499 Handle<String> name, bool for_typeof)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
5588 return (flags_ & CLEAR_NEXT_MAP_WORD) != 0; 5589 return (flags_ & CLEAR_NEXT_MAP_WORD) != 0;
5589 } 5590 }
5590 5591
5591 void MakeDoubleAligned() { 5592 void MakeDoubleAligned() {
5592 flags_ = static_cast<HAllocate::Flags>(flags_ | ALLOCATE_DOUBLE_ALIGNED); 5593 flags_ = static_cast<HAllocate::Flags>(flags_ | ALLOCATE_DOUBLE_ALIGNED);
5593 } 5594 }
5594 5595
5595 virtual bool HandleSideEffectDominator(GVNFlag side_effect, 5596 virtual bool HandleSideEffectDominator(GVNFlag side_effect,
5596 HValue* dominator) OVERRIDE; 5597 HValue* dominator) OVERRIDE;
5597 5598
5598 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5599 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5599 5600
5600 DECLARE_CONCRETE_INSTRUCTION(Allocate) 5601 DECLARE_CONCRETE_INSTRUCTION(Allocate)
5601 5602
5602 private: 5603 private:
5603 enum Flags { 5604 enum Flags {
5604 ALLOCATE_IN_NEW_SPACE = 1 << 0, 5605 ALLOCATE_IN_NEW_SPACE = 1 << 0,
5605 ALLOCATE_IN_OLD_DATA_SPACE = 1 << 1, 5606 ALLOCATE_IN_OLD_DATA_SPACE = 1 << 1,
5606 ALLOCATE_IN_OLD_POINTER_SPACE = 1 << 2, 5607 ALLOCATE_IN_OLD_POINTER_SPACE = 1 << 2,
5607 ALLOCATE_DOUBLE_ALIGNED = 1 << 3, 5608 ALLOCATE_DOUBLE_ALIGNED = 1 << 3,
5608 PREFILL_WITH_FILLER = 1 << 4, 5609 PREFILL_WITH_FILLER = 1 << 4,
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
5735 return new(zone) HInnerAllocatedObject(value, offset, type); 5736 return new(zone) HInnerAllocatedObject(value, offset, type);
5736 } 5737 }
5737 5738
5738 HValue* base_object() const { return OperandAt(0); } 5739 HValue* base_object() const { return OperandAt(0); }
5739 HValue* offset() const { return OperandAt(1); } 5740 HValue* offset() const { return OperandAt(1); }
5740 5741
5741 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5742 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5742 return index == 0 ? Representation::Tagged() : Representation::Integer32(); 5743 return index == 0 ? Representation::Tagged() : Representation::Integer32();
5743 } 5744 }
5744 5745
5745 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5746 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5746 5747
5747 DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject) 5748 DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject)
5748 5749
5749 private: 5750 private:
5750 HInnerAllocatedObject(HValue* value, 5751 HInnerAllocatedObject(HValue* value,
5751 HValue* offset, 5752 HValue* offset,
5752 HType type) : HTemplateInstruction<2>(type) { 5753 HType type) : HTemplateInstruction<2>(type) {
5753 DCHECK(value->IsAllocate()); 5754 DCHECK(value->IsAllocate());
5754 DCHECK(type.IsHeapObject()); 5755 DCHECK(type.IsHeapObject());
5755 SetOperandAt(0, value); 5756 SetOperandAt(0, value);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
5833 return StoringValueNeedsWriteBarrier(value()); 5834 return StoringValueNeedsWriteBarrier(value());
5834 } 5835 }
5835 5836
5836 virtual void FinalizeUniqueness() OVERRIDE { 5837 virtual void FinalizeUniqueness() OVERRIDE {
5837 cell_ = Unique<PropertyCell>(cell_.handle()); 5838 cell_ = Unique<PropertyCell>(cell_.handle());
5838 } 5839 }
5839 5840
5840 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5841 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5841 return Representation::Tagged(); 5842 return Representation::Tagged();
5842 } 5843 }
5843 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5844 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5844 5845
5845 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell) 5846 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell)
5846 5847
5847 private: 5848 private:
5848 HStoreGlobalCell(HValue* value, 5849 HStoreGlobalCell(HValue* value,
5849 Handle<PropertyCell> cell, 5850 Handle<PropertyCell> cell,
5850 PropertyDetails details) 5851 PropertyDetails details)
5851 : HUnaryOperation(value), 5852 : HUnaryOperation(value),
5852 cell_(Unique<PropertyCell>::CreateUninitialized(cell)), 5853 cell_(Unique<PropertyCell>::CreateUninitialized(cell)),
5853 details_(details) { 5854 details_(details) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5889 } 5890 }
5890 5891
5891 bool RequiresHoleCheck() const { 5892 bool RequiresHoleCheck() const {
5892 return mode_ != kNoCheck; 5893 return mode_ != kNoCheck;
5893 } 5894 }
5894 5895
5895 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5896 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5896 return Representation::Tagged(); 5897 return Representation::Tagged();
5897 } 5898 }
5898 5899
5899 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5900 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5900 5901
5901 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot) 5902 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot)
5902 5903
5903 protected: 5904 protected:
5904 virtual bool DataEquals(HValue* other) OVERRIDE { 5905 virtual bool DataEquals(HValue* other) OVERRIDE {
5905 HLoadContextSlot* b = HLoadContextSlot::cast(other); 5906 HLoadContextSlot* b = HLoadContextSlot::cast(other);
5906 return (slot_index() == b->slot_index()); 5907 return (slot_index() == b->slot_index());
5907 } 5908 }
5908 5909
5909 private: 5910 private:
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
5946 } 5947 }
5947 5948
5948 bool RequiresHoleCheck() { 5949 bool RequiresHoleCheck() {
5949 return mode_ != kNoCheck; 5950 return mode_ != kNoCheck;
5950 } 5951 }
5951 5952
5952 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5953 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5953 return Representation::Tagged(); 5954 return Representation::Tagged();
5954 } 5955 }
5955 5956
5956 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 5957 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5957 5958
5958 DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot) 5959 DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot)
5959 5960
5960 private: 5961 private:
5961 HStoreContextSlot(HValue* context, int slot_index, Mode mode, HValue* value) 5962 HStoreContextSlot(HValue* context, int slot_index, Mode mode, HValue* value)
5962 : slot_index_(slot_index), mode_(mode) { 5963 : slot_index_(slot_index), mode_(mode) {
5963 SetOperandAt(0, context); 5964 SetOperandAt(0, context);
5964 SetOperandAt(1, value); 5965 SetOperandAt(1, value);
5965 SetChangesFlag(kContextSlots); 5966 SetChangesFlag(kContextSlots);
5966 } 5967 }
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
6329 class ImmutableField : public BitField<bool, 7, 1> {}; 6330 class ImmutableField : public BitField<bool, 7, 1> {};
6330 class ExistingInobjectPropertyField : public BitField<bool, 8, 1> {}; 6331 class ExistingInobjectPropertyField : public BitField<bool, 8, 1> {};
6331 class OffsetField : public BitField<int, 9, 23> {}; 6332 class OffsetField : public BitField<int, 9, 23> {};
6332 6333
6333 uint32_t value_; // encodes portion, representation, immutable, and offset 6334 uint32_t value_; // encodes portion, representation, immutable, and offset
6334 Handle<String> name_; 6335 Handle<String> name_;
6335 6336
6336 friend class HLoadNamedField; 6337 friend class HLoadNamedField;
6337 friend class HStoreNamedField; 6338 friend class HStoreNamedField;
6338 friend class SideEffectsTracker; 6339 friend class SideEffectsTracker;
6339 friend OStream& operator<<(OStream& os, const HObjectAccess& access); 6340 friend std::ostream& operator<<(std::ostream& os,
6341 const HObjectAccess& access);
6340 6342
6341 inline Portion portion() const { 6343 inline Portion portion() const {
6342 return PortionField::decode(value_); 6344 return PortionField::decode(value_);
6343 } 6345 }
6344 }; 6346 };
6345 6347
6346 6348
6347 OStream& operator<<(OStream& os, const HObjectAccess& access); 6349 std::ostream& operator<<(std::ostream& os, const HObjectAccess& access);
6348 6350
6349 6351
6350 class HLoadNamedField FINAL : public HTemplateInstruction<2> { 6352 class HLoadNamedField FINAL : public HTemplateInstruction<2> {
6351 public: 6353 public:
6352 DECLARE_INSTRUCTION_FACTORY_P3(HLoadNamedField, HValue*, 6354 DECLARE_INSTRUCTION_FACTORY_P3(HLoadNamedField, HValue*,
6353 HValue*, HObjectAccess); 6355 HValue*, HObjectAccess);
6354 DECLARE_INSTRUCTION_FACTORY_P5(HLoadNamedField, HValue*, HValue*, 6356 DECLARE_INSTRUCTION_FACTORY_P5(HLoadNamedField, HValue*, HValue*,
6355 HObjectAccess, const UniqueSet<Map>*, HType); 6357 HObjectAccess, const UniqueSet<Map>*, HType);
6356 6358
6357 HValue* object() const { return OperandAt(0); } 6359 HValue* object() const { return OperandAt(0); }
(...skipping 14 matching lines...) Expand all
6372 return !access().IsInobject() || access().offset() >= size; 6374 return !access().IsInobject() || access().offset() >= size;
6373 } 6375 }
6374 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6376 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6375 if (index == 0 && access().IsExternalMemory()) { 6377 if (index == 0 && access().IsExternalMemory()) {
6376 // object must be external in case of external memory access 6378 // object must be external in case of external memory access
6377 return Representation::External(); 6379 return Representation::External();
6378 } 6380 }
6379 return Representation::Tagged(); 6381 return Representation::Tagged();
6380 } 6382 }
6381 virtual Range* InferRange(Zone* zone) OVERRIDE; 6383 virtual Range* InferRange(Zone* zone) OVERRIDE;
6382 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 6384 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6383 6385
6384 bool CanBeReplacedWith(HValue* other) const { 6386 bool CanBeReplacedWith(HValue* other) const {
6385 if (!CheckFlag(HValue::kCantBeReplaced)) return false; 6387 if (!CheckFlag(HValue::kCantBeReplaced)) return false;
6386 if (!type().Equals(other->type())) return false; 6388 if (!type().Equals(other->type())) return false;
6387 if (!representation().Equals(other->representation())) return false; 6389 if (!representation().Equals(other->representation())) return false;
6388 if (!other->IsLoadNamedField()) return true; 6390 if (!other->IsLoadNamedField()) return true;
6389 HLoadNamedField* that = HLoadNamedField::cast(other); 6391 HLoadNamedField* that = HLoadNamedField::cast(other);
6390 if (this->maps_ == that->maps_) return true; 6392 if (this->maps_ == that->maps_) return true;
6391 if (this->maps_ == NULL || that->maps_ == NULL) return false; 6393 if (this->maps_ == NULL || that->maps_ == NULL) return false;
6392 return this->maps_->IsSubset(that->maps_); 6394 return this->maps_->IsSubset(that->maps_);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
6484 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) { 6486 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) {
6485 DCHECK(FLAG_vector_ics); 6487 DCHECK(FLAG_vector_ics);
6486 feedback_vector_ = vector; 6488 feedback_vector_ = vector;
6487 slot_ = slot; 6489 slot_ = slot;
6488 } 6490 }
6489 6491
6490 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6492 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6491 return Representation::Tagged(); 6493 return Representation::Tagged();
6492 } 6494 }
6493 6495
6494 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 6496 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6495 6497
6496 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) 6498 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric)
6497 6499
6498 private: 6500 private:
6499 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name) 6501 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name)
6500 : name_(name), 6502 : name_(name),
6501 slot_(FeedbackSlotInterface::kInvalidFeedbackSlot) { 6503 slot_(FeedbackSlotInterface::kInvalidFeedbackSlot) {
6502 SetOperandAt(0, context); 6504 SetOperandAt(0, context);
6503 SetOperandAt(1, object); 6505 SetOperandAt(1, object);
6504 set_representation(Representation::Tagged()); 6506 set_representation(Representation::Tagged());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
6615 return ArrayInstructionInterface::KeyedAccessIndexRequirement( 6617 return ArrayInstructionInterface::KeyedAccessIndexRequirement(
6616 OperandAt(1)->representation()); 6618 OperandAt(1)->representation());
6617 } 6619 }
6618 return Representation::None(); 6620 return Representation::None();
6619 } 6621 }
6620 6622
6621 virtual Representation observed_input_representation(int index) OVERRIDE { 6623 virtual Representation observed_input_representation(int index) OVERRIDE {
6622 return RequiredInputRepresentation(index); 6624 return RequiredInputRepresentation(index);
6623 } 6625 }
6624 6626
6625 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 6627 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6626 6628
6627 bool UsesMustHandleHole() const; 6629 bool UsesMustHandleHole() const;
6628 bool AllUsesCanTreatHoleAsNaN() const; 6630 bool AllUsesCanTreatHoleAsNaN() const;
6629 bool RequiresHoleCheck() const; 6631 bool RequiresHoleCheck() const;
6630 6632
6631 virtual Range* InferRange(Zone* zone) OVERRIDE; 6633 virtual Range* InferRange(Zone* zone) OVERRIDE;
6632 6634
6633 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) 6635 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed)
6634 6636
6635 protected: 6637 protected:
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
6758 slot_ != FeedbackSlotInterface::kInvalidFeedbackSlot); 6760 slot_ != FeedbackSlotInterface::kInvalidFeedbackSlot);
6759 return slot_; 6761 return slot_;
6760 } 6762 }
6761 Handle<FixedArray> feedback_vector() const { return feedback_vector_; } 6763 Handle<FixedArray> feedback_vector() const { return feedback_vector_; }
6762 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) { 6764 void SetVectorAndSlot(Handle<FixedArray> vector, int slot) {
6763 DCHECK(FLAG_vector_ics); 6765 DCHECK(FLAG_vector_ics);
6764 feedback_vector_ = vector; 6766 feedback_vector_ = vector;
6765 slot_ = slot; 6767 slot_ = slot;
6766 } 6768 }
6767 6769
6768 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 6770 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6769 6771
6770 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6772 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6771 // tagged[tagged] 6773 // tagged[tagged]
6772 return Representation::Tagged(); 6774 return Representation::Tagged();
6773 } 6775 }
6774 6776
6775 virtual HValue* Canonicalize() OVERRIDE; 6777 virtual HValue* Canonicalize() OVERRIDE;
6776 6778
6777 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric) 6779 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric)
6778 6780
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
6841 } 6843 }
6842 return Representation::Tagged(); 6844 return Representation::Tagged();
6843 } 6845 }
6844 virtual bool HandleSideEffectDominator(GVNFlag side_effect, 6846 virtual bool HandleSideEffectDominator(GVNFlag side_effect,
6845 HValue* dominator) OVERRIDE { 6847 HValue* dominator) OVERRIDE {
6846 DCHECK(side_effect == kNewSpacePromotion); 6848 DCHECK(side_effect == kNewSpacePromotion);
6847 if (!FLAG_use_write_barrier_elimination) return false; 6849 if (!FLAG_use_write_barrier_elimination) return false;
6848 dominator_ = dominator; 6850 dominator_ = dominator;
6849 return false; 6851 return false;
6850 } 6852 }
6851 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 6853 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6852 6854
6853 HValue* object() const { return OperandAt(0); } 6855 HValue* object() const { return OperandAt(0); }
6854 HValue* value() const { return OperandAt(1); } 6856 HValue* value() const { return OperandAt(1); }
6855 HValue* transition() const { return OperandAt(2); } 6857 HValue* transition() const { return OperandAt(2); }
6856 6858
6857 HObjectAccess access() const { return access_; } 6859 HObjectAccess access() const { return access_; }
6858 HValue* dominator() const { return dominator_; } 6860 HValue* dominator() const { return dominator_; }
6859 bool has_transition() const { return has_transition_; } 6861 bool has_transition() const { return has_transition_; }
6860 StoreFieldOrKeyedMode store_mode() const { return store_mode_; } 6862 StoreFieldOrKeyedMode store_mode() const { return store_mode_; }
6861 6863
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
6951 public: 6953 public:
6952 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*, 6954 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*,
6953 Handle<String>, HValue*, 6955 Handle<String>, HValue*,
6954 StrictMode); 6956 StrictMode);
6955 HValue* object() const { return OperandAt(0); } 6957 HValue* object() const { return OperandAt(0); }
6956 HValue* value() const { return OperandAt(1); } 6958 HValue* value() const { return OperandAt(1); }
6957 HValue* context() const { return OperandAt(2); } 6959 HValue* context() const { return OperandAt(2); }
6958 Handle<String> name() const { return name_; } 6960 Handle<String> name() const { return name_; }
6959 StrictMode strict_mode() const { return strict_mode_; } 6961 StrictMode strict_mode() const { return strict_mode_; }
6960 6962
6961 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 6963 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6962 6964
6963 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6965 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6964 return Representation::Tagged(); 6966 return Representation::Tagged();
6965 } 6967 }
6966 6968
6967 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) 6969 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric)
6968 6970
6969 private: 6971 private:
6970 HStoreNamedGeneric(HValue* context, 6972 HStoreNamedGeneric(HValue* context,
6971 HValue* object, 6973 HValue* object,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
7097 ReceiverObjectNeedsWriteBarrier(elements(), value(), dominator()); 7099 ReceiverObjectNeedsWriteBarrier(elements(), value(), dominator());
7098 } 7100 }
7099 } 7101 }
7100 7102
7101 PointersToHereCheck PointersToHereCheckForValue() const { 7103 PointersToHereCheck PointersToHereCheckForValue() const {
7102 return PointersToHereCheckForObject(value(), dominator()); 7104 return PointersToHereCheckForObject(value(), dominator());
7103 } 7105 }
7104 7106
7105 bool NeedsCanonicalization(); 7107 bool NeedsCanonicalization();
7106 7108
7107 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7109 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7108 7110
7109 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed) 7111 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed)
7110 7112
7111 private: 7113 private:
7112 HStoreKeyed(HValue* obj, HValue* key, HValue* val, 7114 HStoreKeyed(HValue* obj, HValue* key, HValue* val,
7113 ElementsKind elements_kind, 7115 ElementsKind elements_kind,
7114 StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE, 7116 StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE,
7115 int offset = kDefaultKeyedHeaderOffsetSentinel) 7117 int offset = kDefaultKeyedHeaderOffsetSentinel)
7116 : elements_kind_(elements_kind), 7118 : elements_kind_(elements_kind),
7117 base_offset_(offset == kDefaultKeyedHeaderOffsetSentinel 7119 base_offset_(offset == kDefaultKeyedHeaderOffsetSentinel
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
7170 HValue* key() const { return OperandAt(1); } 7172 HValue* key() const { return OperandAt(1); }
7171 HValue* value() const { return OperandAt(2); } 7173 HValue* value() const { return OperandAt(2); }
7172 HValue* context() const { return OperandAt(3); } 7174 HValue* context() const { return OperandAt(3); }
7173 StrictMode strict_mode() const { return strict_mode_; } 7175 StrictMode strict_mode() const { return strict_mode_; }
7174 7176
7175 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 7177 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
7176 // tagged[tagged] = tagged 7178 // tagged[tagged] = tagged
7177 return Representation::Tagged(); 7179 return Representation::Tagged();
7178 } 7180 }
7179 7181
7180 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7182 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7181 7183
7182 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) 7184 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric)
7183 7185
7184 private: 7186 private:
7185 HStoreKeyedGeneric(HValue* context, 7187 HStoreKeyedGeneric(HValue* context,
7186 HValue* object, 7188 HValue* object,
7187 HValue* key, 7189 HValue* key,
7188 HValue* value, 7190 HValue* value,
7189 StrictMode strict_mode) 7191 StrictMode strict_mode)
7190 : strict_mode_(strict_mode) { 7192 : strict_mode_(strict_mode) {
(...skipping 23 matching lines...) Expand all
7214 return Representation::Tagged(); 7216 return Representation::Tagged();
7215 } 7217 }
7216 7218
7217 HValue* object() const { return OperandAt(0); } 7219 HValue* object() const { return OperandAt(0); }
7218 HValue* context() const { return OperandAt(1); } 7220 HValue* context() const { return OperandAt(1); }
7219 Unique<Map> original_map() const { return original_map_; } 7221 Unique<Map> original_map() const { return original_map_; }
7220 Unique<Map> transitioned_map() const { return transitioned_map_; } 7222 Unique<Map> transitioned_map() const { return transitioned_map_; }
7221 ElementsKind from_kind() const { return from_kind_; } 7223 ElementsKind from_kind() const { return from_kind_; }
7222 ElementsKind to_kind() const { return to_kind_; } 7224 ElementsKind to_kind() const { return to_kind_; }
7223 7225
7224 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7226 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7225 7227
7226 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind) 7228 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind)
7227 7229
7228 protected: 7230 protected:
7229 virtual bool DataEquals(HValue* other) OVERRIDE { 7231 virtual bool DataEquals(HValue* other) OVERRIDE {
7230 HTransitionElementsKind* instr = HTransitionElementsKind::cast(other); 7232 HTransitionElementsKind* instr = HTransitionElementsKind::cast(other);
7231 return original_map_ == instr->original_map_ && 7233 return original_map_ == instr->original_map_ &&
7232 transitioned_map_ == instr->transitioned_map_; 7234 transitioned_map_ == instr->transitioned_map_;
7233 } 7235 }
7234 7236
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
7272 Handle<AllocationSite> allocation_site = 7274 Handle<AllocationSite> allocation_site =
7273 Handle<AllocationSite>::null()); 7275 Handle<AllocationSite>::null());
7274 7276
7275 StringAddFlags flags() const { return flags_; } 7277 StringAddFlags flags() const { return flags_; }
7276 PretenureFlag pretenure_flag() const { return pretenure_flag_; } 7278 PretenureFlag pretenure_flag() const { return pretenure_flag_; }
7277 7279
7278 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 7280 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
7279 return Representation::Tagged(); 7281 return Representation::Tagged();
7280 } 7282 }
7281 7283
7282 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7284 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7283 7285
7284 DECLARE_CONCRETE_INSTRUCTION(StringAdd) 7286 DECLARE_CONCRETE_INSTRUCTION(StringAdd)
7285 7287
7286 protected: 7288 protected:
7287 virtual bool DataEquals(HValue* other) OVERRIDE { 7289 virtual bool DataEquals(HValue* other) OVERRIDE {
7288 return flags_ == HStringAdd::cast(other)->flags_ && 7290 return flags_ == HStringAdd::cast(other)->flags_ &&
7289 pretenure_flag_ == HStringAdd::cast(other)->pretenure_flag_; 7291 pretenure_flag_ == HStringAdd::cast(other)->pretenure_flag_;
7290 } 7292 }
7291 7293
7292 private: 7294 private:
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
7512 }; 7514 };
7513 7515
7514 7516
7515 class HTypeof FINAL : public HTemplateInstruction<2> { 7517 class HTypeof FINAL : public HTemplateInstruction<2> {
7516 public: 7518 public:
7517 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HTypeof, HValue*); 7519 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HTypeof, HValue*);
7518 7520
7519 HValue* context() const { return OperandAt(0); } 7521 HValue* context() const { return OperandAt(0); }
7520 HValue* value() const { return OperandAt(1); } 7522 HValue* value() const { return OperandAt(1); }
7521 7523
7522 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7524 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7523 7525
7524 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 7526 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
7525 return Representation::Tagged(); 7527 return Representation::Tagged();
7526 } 7528 }
7527 7529
7528 DECLARE_CONCRETE_INSTRUCTION(Typeof) 7530 DECLARE_CONCRETE_INSTRUCTION(Typeof)
7529 7531
7530 private: 7532 private:
7531 explicit HTypeof(HValue* context, HValue* value) { 7533 explicit HTypeof(HValue* context, HValue* value) {
7532 SetOperandAt(0, context); 7534 SetOperandAt(0, context);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
7696 7698
7697 7699
7698 class HCheckMapValue FINAL : public HTemplateInstruction<2> { 7700 class HCheckMapValue FINAL : public HTemplateInstruction<2> {
7699 public: 7701 public:
7700 DECLARE_INSTRUCTION_FACTORY_P2(HCheckMapValue, HValue*, HValue*); 7702 DECLARE_INSTRUCTION_FACTORY_P2(HCheckMapValue, HValue*, HValue*);
7701 7703
7702 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 7704 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
7703 return Representation::Tagged(); 7705 return Representation::Tagged();
7704 } 7706 }
7705 7707
7706 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7708 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7707 7709
7708 virtual HType CalculateInferredType() OVERRIDE { 7710 virtual HType CalculateInferredType() OVERRIDE {
7709 if (value()->type().IsHeapObject()) return value()->type(); 7711 if (value()->type().IsHeapObject()) return value()->type();
7710 return HType::HeapObject(); 7712 return HType::HeapObject();
7711 } 7713 }
7712 7714
7713 HValue* value() const { return OperandAt(0); } 7715 HValue* value() const { return OperandAt(0); }
7714 HValue* map() const { return OperandAt(1); } 7716 HValue* map() const { return OperandAt(1); }
7715 7717
7716 virtual HValue* Canonicalize() OVERRIDE; 7718 virtual HValue* Canonicalize() OVERRIDE;
(...skipping 24 matching lines...) Expand all
7741 public: 7743 public:
7742 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HForInPrepareMap, HValue*); 7744 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HForInPrepareMap, HValue*);
7743 7745
7744 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 7746 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
7745 return Representation::Tagged(); 7747 return Representation::Tagged();
7746 } 7748 }
7747 7749
7748 HValue* context() const { return OperandAt(0); } 7750 HValue* context() const { return OperandAt(0); }
7749 HValue* enumerable() const { return OperandAt(1); } 7751 HValue* enumerable() const { return OperandAt(1); }
7750 7752
7751 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7753 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7752 7754
7753 virtual HType CalculateInferredType() OVERRIDE { 7755 virtual HType CalculateInferredType() OVERRIDE {
7754 return HType::Tagged(); 7756 return HType::Tagged();
7755 } 7757 }
7756 7758
7757 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap); 7759 DECLARE_CONCRETE_INSTRUCTION(ForInPrepareMap);
7758 7760
7759 private: 7761 private:
7760 HForInPrepareMap(HValue* context, 7762 HForInPrepareMap(HValue* context,
7761 HValue* object) { 7763 HValue* object) {
(...skipping 18 matching lines...) Expand all
7780 int idx() const { return idx_; } 7782 int idx() const { return idx_; }
7781 7783
7782 HForInCacheArray* index_cache() { 7784 HForInCacheArray* index_cache() {
7783 return index_cache_; 7785 return index_cache_;
7784 } 7786 }
7785 7787
7786 void set_index_cache(HForInCacheArray* index_cache) { 7788 void set_index_cache(HForInCacheArray* index_cache) {
7787 index_cache_ = index_cache; 7789 index_cache_ = index_cache;
7788 } 7790 }
7789 7791
7790 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7792 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7791 7793
7792 virtual HType CalculateInferredType() OVERRIDE { 7794 virtual HType CalculateInferredType() OVERRIDE {
7793 return HType::Tagged(); 7795 return HType::Tagged();
7794 } 7796 }
7795 7797
7796 DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray); 7798 DECLARE_CONCRETE_INSTRUCTION(ForInCacheArray);
7797 7799
7798 private: 7800 private:
7799 HForInCacheArray(HValue* enumerable, 7801 HForInCacheArray(HValue* enumerable,
7800 HValue* keys, 7802 HValue* keys,
(...skipping 24 matching lines...) Expand all
7825 if (index == 1) { 7827 if (index == 1) {
7826 return Representation::Smi(); 7828 return Representation::Smi();
7827 } else { 7829 } else {
7828 return Representation::Tagged(); 7830 return Representation::Tagged();
7829 } 7831 }
7830 } 7832 }
7831 7833
7832 HValue* object() const { return OperandAt(0); } 7834 HValue* object() const { return OperandAt(0); }
7833 HValue* index() const { return OperandAt(1); } 7835 HValue* index() const { return OperandAt(1); }
7834 7836
7835 virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT 7837 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
7836 7838
7837 virtual HType CalculateInferredType() OVERRIDE { 7839 virtual HType CalculateInferredType() OVERRIDE {
7838 return HType::Tagged(); 7840 return HType::Tagged();
7839 } 7841 }
7840 7842
7841 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex); 7843 DECLARE_CONCRETE_INSTRUCTION(LoadFieldByIndex);
7842 7844
7843 private: 7845 private:
7844 virtual bool IsDeletable() const OVERRIDE { return true; } 7846 virtual bool IsDeletable() const OVERRIDE { return true; }
7845 }; 7847 };
(...skipping 24 matching lines...) Expand all
7870 DECLARE_INSTRUCTION_FACTORY_P3(HAllocateBlockContext, HValue*, 7872 DECLARE_INSTRUCTION_FACTORY_P3(HAllocateBlockContext, HValue*,
7871 HValue*, Handle<ScopeInfo>); 7873 HValue*, Handle<ScopeInfo>);
7872 HValue* context() const { return OperandAt(0); } 7874 HValue* context() const { return OperandAt(0); }
7873 HValue* function() const { return OperandAt(1); } 7875 HValue* function() const { return OperandAt(1); }
7874 Handle<ScopeInfo> scope_info() const { return scope_info_; } 7876 Handle<ScopeInfo> scope_info() const { return scope_info_; }
7875 7877
7876 virtual Representation RequiredInputRepresentation(int index) { 7878 virtual Representation RequiredInputRepresentation(int index) {
7877 return Representation::Tagged(); 7879 return Representation::Tagged();
7878 } 7880 }
7879 7881
7880 virtual OStream& PrintDataTo(OStream& os) const; // NOLINT 7882 virtual std::ostream& PrintDataTo(std::ostream& os) const; // NOLINT
7881 7883
7882 DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext) 7884 DECLARE_CONCRETE_INSTRUCTION(AllocateBlockContext)
7883 7885
7884 private: 7886 private:
7885 HAllocateBlockContext(HValue* context, 7887 HAllocateBlockContext(HValue* context,
7886 HValue* function, 7888 HValue* function,
7887 Handle<ScopeInfo> scope_info) 7889 Handle<ScopeInfo> scope_info)
7888 : scope_info_(scope_info) { 7890 : scope_info_(scope_info) {
7889 SetOperandAt(0, context); 7891 SetOperandAt(0, context);
7890 SetOperandAt(1, function); 7892 SetOperandAt(1, function);
7891 set_representation(Representation::Tagged()); 7893 set_representation(Representation::Tagged());
7892 } 7894 }
7893 7895
7894 Handle<ScopeInfo> scope_info_; 7896 Handle<ScopeInfo> scope_info_;
7895 }; 7897 };
7896 7898
7897 7899
7898 7900
7899 #undef DECLARE_INSTRUCTION 7901 #undef DECLARE_INSTRUCTION
7900 #undef DECLARE_CONCRETE_INSTRUCTION 7902 #undef DECLARE_CONCRETE_INSTRUCTION
7901 7903
7902 } } // namespace v8::internal 7904 } } // namespace v8::internal
7903 7905
7904 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7906 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/hydrogen-gvn.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698