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

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

Issue 34523004: More Hydrogen templatization. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Improper usage of New<> replaced with NewUncasted<> Created 7 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.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1487 HReturn(HValue* context, HValue* value, HValue* parameter_count = 0) { 1487 HReturn(HValue* context, HValue* value, HValue* parameter_count = 0) {
1488 SetOperandAt(0, value); 1488 SetOperandAt(0, value);
1489 SetOperandAt(1, context); 1489 SetOperandAt(1, context);
1490 SetOperandAt(2, parameter_count); 1490 SetOperandAt(2, parameter_count);
1491 } 1491 }
1492 }; 1492 };
1493 1493
1494 1494
1495 class HAbnormalExit V8_FINAL : public HTemplateControlInstruction<0, 0> { 1495 class HAbnormalExit V8_FINAL : public HTemplateControlInstruction<0, 0> {
1496 public: 1496 public:
1497 DECLARE_INSTRUCTION_FACTORY_P0(HAbnormalExit);
1498
1497 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 1499 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
1498 return Representation::None(); 1500 return Representation::None();
1499 } 1501 }
1500 1502
1501 DECLARE_CONCRETE_INSTRUCTION(AbnormalExit) 1503 DECLARE_CONCRETE_INSTRUCTION(AbnormalExit)
1504 private:
1505 HAbnormalExit() {}
1502 }; 1506 };
1503 1507
1504 1508
1505 class HUnaryOperation : public HTemplateInstruction<1> { 1509 class HUnaryOperation : public HTemplateInstruction<1> {
1506 public: 1510 public:
1507 HUnaryOperation(HValue* value, HType type = HType::Tagged()) 1511 HUnaryOperation(HValue* value, HType type = HType::Tagged())
1508 : HTemplateInstruction<1>(type) { 1512 : HTemplateInstruction<1>(type) {
1509 SetOperandAt(0, value); 1513 SetOperandAt(0, value);
1510 } 1514 }
1511 1515
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
1974 1978
1975 private: 1979 private:
1976 explicit HPushArgument(HValue* value) : HUnaryOperation(value) { 1980 explicit HPushArgument(HValue* value) : HUnaryOperation(value) {
1977 set_representation(Representation::Tagged()); 1981 set_representation(Representation::Tagged());
1978 } 1982 }
1979 }; 1983 };
1980 1984
1981 1985
1982 class HThisFunction V8_FINAL : public HTemplateInstruction<0> { 1986 class HThisFunction V8_FINAL : public HTemplateInstruction<0> {
1983 public: 1987 public:
1984 HThisFunction() { 1988 DECLARE_INSTRUCTION_FACTORY_P0(HThisFunction);
1985 set_representation(Representation::Tagged());
1986 SetFlag(kUseGVN);
1987 }
1988 1989
1989 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 1990 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
1990 return Representation::None(); 1991 return Representation::None();
1991 } 1992 }
1992 1993
1993 DECLARE_CONCRETE_INSTRUCTION(ThisFunction) 1994 DECLARE_CONCRETE_INSTRUCTION(ThisFunction)
1994 1995
1995 protected: 1996 protected:
1996 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } 1997 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
1997 1998
1998 private: 1999 private:
2000 HThisFunction() {
2001 set_representation(Representation::Tagged());
2002 SetFlag(kUseGVN);
2003 }
2004
1999 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 2005 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
2000 }; 2006 };
2001 2007
2002 2008
2003 class HOuterContext V8_FINAL : public HUnaryOperation { 2009 class HOuterContext V8_FINAL : public HUnaryOperation {
2004 public: 2010 public:
2005 DECLARE_INSTRUCTION_FACTORY_P1(HOuterContext, HValue*); 2011 DECLARE_INSTRUCTION_FACTORY_P1(HOuterContext, HValue*);
2006 2012
2007 DECLARE_CONCRETE_INSTRUCTION(OuterContext); 2013 DECLARE_CONCRETE_INSTRUCTION(OuterContext);
2008 2014
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2050 SetAllSideEffects(); 2056 SetAllSideEffects();
2051 } 2057 }
2052 2058
2053 Handle<FixedArray> pairs_; 2059 Handle<FixedArray> pairs_;
2054 int flags_; 2060 int flags_;
2055 }; 2061 };
2056 2062
2057 2063
2058 class HGlobalObject V8_FINAL : public HUnaryOperation { 2064 class HGlobalObject V8_FINAL : public HUnaryOperation {
2059 public: 2065 public:
2060 explicit HGlobalObject(HValue* context) : HUnaryOperation(context) { 2066 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P0(HGlobalObject);
2061 set_representation(Representation::Tagged());
2062 SetFlag(kUseGVN);
2063 }
2064
2065 static HGlobalObject* New(Zone* zone, HValue* context) {
2066 return new(zone) HGlobalObject(context);
2067 }
2068 2067
2069 DECLARE_CONCRETE_INSTRUCTION(GlobalObject) 2068 DECLARE_CONCRETE_INSTRUCTION(GlobalObject)
2070 2069
2071 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 2070 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
2072 return Representation::Tagged(); 2071 return Representation::Tagged();
2073 } 2072 }
2074 2073
2075 protected: 2074 protected:
2076 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } 2075 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
2077 2076
2078 private: 2077 private:
2078 explicit HGlobalObject(HValue* context) : HUnaryOperation(context) {
2079 set_representation(Representation::Tagged());
2080 SetFlag(kUseGVN);
2081 }
2082
2079 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 2083 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
2080 }; 2084 };
2081 2085
2082 2086
2083 class HGlobalReceiver V8_FINAL : public HUnaryOperation { 2087 class HGlobalReceiver V8_FINAL : public HUnaryOperation {
2084 public: 2088 public:
2085 DECLARE_INSTRUCTION_FACTORY_P1(HGlobalReceiver, HValue*); 2089 DECLARE_INSTRUCTION_FACTORY_P1(HGlobalReceiver, HValue*);
2086 2090
2087 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver) 2091 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver)
2088 2092
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
2310 HCallGlobal(HValue* context, Handle<String> name, int argument_count) 2314 HCallGlobal(HValue* context, Handle<String> name, int argument_count)
2311 : HUnaryCall(context, argument_count), name_(name) { 2315 : HUnaryCall(context, argument_count), name_(name) {
2312 } 2316 }
2313 2317
2314 Handle<String> name_; 2318 Handle<String> name_;
2315 }; 2319 };
2316 2320
2317 2321
2318 class HCallKnownGlobal V8_FINAL : public HCall<0> { 2322 class HCallKnownGlobal V8_FINAL : public HCall<0> {
2319 public: 2323 public:
2320 HCallKnownGlobal(Handle<JSFunction> target, int argument_count) 2324 DECLARE_INSTRUCTION_FACTORY_P2(HCallKnownGlobal, Handle<JSFunction>, int);
2321 : HCall<0>(argument_count),
2322 target_(target),
2323 formal_parameter_count_(target->shared()->formal_parameter_count()) { }
2324 2325
2325 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 2326 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
2326 2327
2327 Handle<JSFunction> target() const { return target_; } 2328 Handle<JSFunction> target() const { return target_; }
2328 int formal_parameter_count() const { return formal_parameter_count_; } 2329 int formal_parameter_count() const { return formal_parameter_count_; }
2329 2330
2330 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 2331 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
2331 return Representation::None(); 2332 return Representation::None();
2332 } 2333 }
2333 2334
2334 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal) 2335 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal)
2335 2336
2336 private: 2337 private:
2338 HCallKnownGlobal(Handle<JSFunction> target, int argument_count)
2339 : HCall<0>(argument_count),
2340 target_(target),
2341 formal_parameter_count_(target->shared()->formal_parameter_count()) { }
2342
2337 Handle<JSFunction> target_; 2343 Handle<JSFunction> target_;
2338 int formal_parameter_count_; 2344 int formal_parameter_count_;
2339 }; 2345 };
2340 2346
2341 2347
2342 class HCallNew V8_FINAL : public HBinaryCall { 2348 class HCallNew V8_FINAL : public HBinaryCall {
2343 public: 2349 public:
2344 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallNew, HValue*, int); 2350 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallNew, HValue*, int);
2345 2351
2346 HValue* context() { return first(); } 2352 HValue* context() { return first(); }
(...skipping 1368 matching lines...) Expand 10 before | Expand all | Expand 10 after
3715 HWrapReceiver(HValue* receiver, HValue* function) { 3721 HWrapReceiver(HValue* receiver, HValue* function) {
3716 set_representation(Representation::Tagged()); 3722 set_representation(Representation::Tagged());
3717 SetOperandAt(0, receiver); 3723 SetOperandAt(0, receiver);
3718 SetOperandAt(1, function); 3724 SetOperandAt(1, function);
3719 } 3725 }
3720 }; 3726 };
3721 3727
3722 3728
3723 class HApplyArguments V8_FINAL : public HTemplateInstruction<4> { 3729 class HApplyArguments V8_FINAL : public HTemplateInstruction<4> {
3724 public: 3730 public:
3725 HApplyArguments(HValue* function, 3731 DECLARE_INSTRUCTION_FACTORY_P4(HApplyArguments, HValue*, HValue*, HValue*,
3726 HValue* receiver, 3732 HValue*);
3727 HValue* length,
3728 HValue* elements) {
3729 set_representation(Representation::Tagged());
3730 SetOperandAt(0, function);
3731 SetOperandAt(1, receiver);
3732 SetOperandAt(2, length);
3733 SetOperandAt(3, elements);
3734 SetAllSideEffects();
3735 }
3736 3733
3737 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 3734 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
3738 // The length is untagged, all other inputs are tagged. 3735 // The length is untagged, all other inputs are tagged.
3739 return (index == 2) 3736 return (index == 2)
3740 ? Representation::Integer32() 3737 ? Representation::Integer32()
3741 : Representation::Tagged(); 3738 : Representation::Tagged();
3742 } 3739 }
3743 3740
3744 HValue* function() { return OperandAt(0); } 3741 HValue* function() { return OperandAt(0); }
3745 HValue* receiver() { return OperandAt(1); } 3742 HValue* receiver() { return OperandAt(1); }
3746 HValue* length() { return OperandAt(2); } 3743 HValue* length() { return OperandAt(2); }
3747 HValue* elements() { return OperandAt(3); } 3744 HValue* elements() { return OperandAt(3); }
3748 3745
3749 DECLARE_CONCRETE_INSTRUCTION(ApplyArguments) 3746 DECLARE_CONCRETE_INSTRUCTION(ApplyArguments)
3747
3748 private:
3749 HApplyArguments(HValue* function,
3750 HValue* receiver,
3751 HValue* length,
3752 HValue* elements) {
3753 set_representation(Representation::Tagged());
3754 SetOperandAt(0, function);
3755 SetOperandAt(1, receiver);
3756 SetOperandAt(2, length);
3757 SetOperandAt(3, elements);
3758 SetAllSideEffects();
3759 }
3750 }; 3760 };
3751 3761
3752 3762
3753 class HArgumentsElements V8_FINAL : public HTemplateInstruction<0> { 3763 class HArgumentsElements V8_FINAL : public HTemplateInstruction<0> {
3754 public: 3764 public:
3755 DECLARE_INSTRUCTION_FACTORY_P1(HArgumentsElements, bool); 3765 DECLARE_INSTRUCTION_FACTORY_P1(HArgumentsElements, bool);
3756 3766
3757 DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements) 3767 DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements)
3758 3768
3759 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 3769 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3797 set_representation(Representation::Integer32()); 3807 set_representation(Representation::Integer32());
3798 SetFlag(kUseGVN); 3808 SetFlag(kUseGVN);
3799 } 3809 }
3800 3810
3801 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 3811 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
3802 }; 3812 };
3803 3813
3804 3814
3805 class HAccessArgumentsAt V8_FINAL : public HTemplateInstruction<3> { 3815 class HAccessArgumentsAt V8_FINAL : public HTemplateInstruction<3> {
3806 public: 3816 public:
3807 HAccessArgumentsAt(HValue* arguments, HValue* length, HValue* index) { 3817 DECLARE_INSTRUCTION_FACTORY_P3(HAccessArgumentsAt, HValue*, HValue*, HValue*);
3808 set_representation(Representation::Tagged());
3809 SetFlag(kUseGVN);
3810 SetOperandAt(0, arguments);
3811 SetOperandAt(1, length);
3812 SetOperandAt(2, index);
3813 }
3814 3818
3815 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 3819 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
3816 3820
3817 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 3821 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
3818 // The arguments elements is considered tagged. 3822 // The arguments elements is considered tagged.
3819 return index == 0 3823 return index == 0
3820 ? Representation::Tagged() 3824 ? Representation::Tagged()
3821 : Representation::Integer32(); 3825 : Representation::Integer32();
3822 } 3826 }
3823 3827
3824 HValue* arguments() { return OperandAt(0); } 3828 HValue* arguments() { return OperandAt(0); }
3825 HValue* length() { return OperandAt(1); } 3829 HValue* length() { return OperandAt(1); }
3826 HValue* index() { return OperandAt(2); } 3830 HValue* index() { return OperandAt(2); }
3827 3831
3828 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt) 3832 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt)
3829 3833
3834 private:
3835 HAccessArgumentsAt(HValue* arguments, HValue* length, HValue* index) {
3836 set_representation(Representation::Tagged());
3837 SetFlag(kUseGVN);
3838 SetOperandAt(0, arguments);
3839 SetOperandAt(1, length);
3840 SetOperandAt(2, index);
3841 }
3842
3830 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } 3843 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
3831 }; 3844 };
3832 3845
3833 3846
3834 class HBoundsCheckBaseIndexInformation; 3847 class HBoundsCheckBaseIndexInformation;
3835 3848
3836 3849
3837 class HBoundsCheck V8_FINAL : public HTemplateInstruction<2> { 3850 class HBoundsCheck V8_FINAL : public HTemplateInstruction<2> {
3838 public: 3851 public:
3839 DECLARE_INSTRUCTION_FACTORY_P2(HBoundsCheck, HValue*, HValue*); 3852 DECLARE_INSTRUCTION_FACTORY_P2(HBoundsCheck, HValue*, HValue*);
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
4044 } 4057 }
4045 4058
4046 DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation) 4059 DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation)
4047 private: 4060 private:
4048 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 4061 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
4049 }; 4062 };
4050 4063
4051 4064
4052 class HCompareGeneric V8_FINAL : public HBinaryOperation { 4065 class HCompareGeneric V8_FINAL : public HBinaryOperation {
4053 public: 4066 public:
4054 HCompareGeneric(HValue* context, 4067 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCompareGeneric, HValue*,
4055 HValue* left, 4068 HValue*, Token::Value);
4056 HValue* right,
4057 Token::Value token)
4058 : HBinaryOperation(context, left, right, HType::Boolean()),
4059 token_(token) {
4060 ASSERT(Token::IsCompareOp(token));
4061 set_representation(Representation::Tagged());
4062 SetAllSideEffects();
4063 }
4064 4069
4065 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4070 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4066 return index == 0 4071 return index == 0
4067 ? Representation::Tagged() 4072 ? Representation::Tagged()
4068 : representation(); 4073 : representation();
4069 } 4074 }
4070 4075
4071 Token::Value token() const { return token_; } 4076 Token::Value token() const { return token_; }
4072 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 4077 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
4073 4078
4074 DECLARE_CONCRETE_INSTRUCTION(CompareGeneric) 4079 DECLARE_CONCRETE_INSTRUCTION(CompareGeneric)
4075 4080
4076 private: 4081 private:
4082 HCompareGeneric(HValue* context,
4083 HValue* left,
4084 HValue* right,
4085 Token::Value token)
4086 : HBinaryOperation(context, left, right, HType::Boolean()),
4087 token_(token) {
4088 ASSERT(Token::IsCompareOp(token));
4089 set_representation(Representation::Tagged());
4090 SetAllSideEffects();
4091 }
4092
4077 Token::Value token_; 4093 Token::Value token_;
4078 }; 4094 };
4079 4095
4080 4096
4081 class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { 4097 class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> {
4082 public: 4098 public:
4083 DECLARE_INSTRUCTION_FACTORY_P3(HCompareNumericAndBranch, 4099 DECLARE_INSTRUCTION_FACTORY_P3(HCompareNumericAndBranch,
4084 HValue*, HValue*, Token::Value); 4100 HValue*, HValue*, Token::Value);
4085 DECLARE_INSTRUCTION_FACTORY_P5(HCompareNumericAndBranch, 4101 DECLARE_INSTRUCTION_FACTORY_P5(HCompareNumericAndBranch,
4086 HValue*, HValue*, Token::Value, 4102 HValue*, HValue*, Token::Value,
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
4318 set_representation(Representation::Tagged()); 4334 set_representation(Representation::Tagged());
4319 SetGVNFlag(kChangesNewSpacePromotion); 4335 SetGVNFlag(kChangesNewSpacePromotion);
4320 } 4336 }
4321 4337
4322 Token::Value token_; 4338 Token::Value token_;
4323 }; 4339 };
4324 4340
4325 4341
4326 class HIsConstructCallAndBranch : public HTemplateControlInstruction<2, 0> { 4342 class HIsConstructCallAndBranch : public HTemplateControlInstruction<2, 0> {
4327 public: 4343 public:
4344 DECLARE_INSTRUCTION_FACTORY_P0(HIsConstructCallAndBranch);
4345
4328 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4346 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4329 return Representation::None(); 4347 return Representation::None();
4330 } 4348 }
4331 4349
4332 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch) 4350 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch)
4351 private:
4352 HIsConstructCallAndBranch() {}
4333 }; 4353 };
4334 4354
4335 4355
4336 class HHasInstanceTypeAndBranch V8_FINAL : public HUnaryControlInstruction { 4356 class HHasInstanceTypeAndBranch V8_FINAL : public HUnaryControlInstruction {
4337 public: 4357 public:
4338 DECLARE_INSTRUCTION_FACTORY_P2( 4358 DECLARE_INSTRUCTION_FACTORY_P2(
4339 HHasInstanceTypeAndBranch, HValue*, InstanceType); 4359 HHasInstanceTypeAndBranch, HValue*, InstanceType);
4340 DECLARE_INSTRUCTION_FACTORY_P3( 4360 DECLARE_INSTRUCTION_FACTORY_P3(
4341 HHasInstanceTypeAndBranch, HValue*, InstanceType, InstanceType); 4361 HHasInstanceTypeAndBranch, HValue*, InstanceType, InstanceType);
4342 4362
(...skipping 16 matching lines...) Expand all
4359 ASSERT(to == LAST_TYPE); // Others not implemented yet in backend. 4379 ASSERT(to == LAST_TYPE); // Others not implemented yet in backend.
4360 } 4380 }
4361 4381
4362 InstanceType from_; 4382 InstanceType from_;
4363 InstanceType to_; // Inclusive range, not all combinations work. 4383 InstanceType to_; // Inclusive range, not all combinations work.
4364 }; 4384 };
4365 4385
4366 4386
4367 class HHasCachedArrayIndexAndBranch V8_FINAL : public HUnaryControlInstruction { 4387 class HHasCachedArrayIndexAndBranch V8_FINAL : public HUnaryControlInstruction {
4368 public: 4388 public:
4369 explicit HHasCachedArrayIndexAndBranch(HValue* value) 4389 DECLARE_INSTRUCTION_FACTORY_P1(HHasCachedArrayIndexAndBranch, HValue*);
4370 : HUnaryControlInstruction(value, NULL, NULL) { }
4371 4390
4372 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4391 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4373 return Representation::Tagged(); 4392 return Representation::Tagged();
4374 } 4393 }
4375 4394
4376 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch) 4395 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch)
4396 private:
4397 explicit HHasCachedArrayIndexAndBranch(HValue* value)
4398 : HUnaryControlInstruction(value, NULL, NULL) { }
4377 }; 4399 };
4378 4400
4379 4401
4380 class HGetCachedArrayIndex V8_FINAL : public HUnaryOperation { 4402 class HGetCachedArrayIndex V8_FINAL : public HUnaryOperation {
4381 public: 4403 public:
4382 explicit HGetCachedArrayIndex(HValue* value) : HUnaryOperation(value) { 4404 DECLARE_INSTRUCTION_FACTORY_P1(HGetCachedArrayIndex, HValue*);
4383 set_representation(Representation::Tagged());
4384 SetFlag(kUseGVN);
4385 }
4386 4405
4387 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4406 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4388 return Representation::Tagged(); 4407 return Representation::Tagged();
4389 } 4408 }
4390 4409
4391 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex) 4410 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex)
4392 4411
4393 protected: 4412 protected:
4394 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } 4413 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
4395 4414
4396 private: 4415 private:
4416 explicit HGetCachedArrayIndex(HValue* value) : HUnaryOperation(value) {
4417 set_representation(Representation::Tagged());
4418 SetFlag(kUseGVN);
4419 }
4420
4397 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 4421 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
4398 }; 4422 };
4399 4423
4400 4424
4401 class HClassOfTestAndBranch V8_FINAL : public HUnaryControlInstruction { 4425 class HClassOfTestAndBranch V8_FINAL : public HUnaryControlInstruction {
4402 public: 4426 public:
4403 HClassOfTestAndBranch(HValue* value, Handle<String> class_name) 4427 DECLARE_INSTRUCTION_FACTORY_P2(HClassOfTestAndBranch, HValue*,
4404 : HUnaryControlInstruction(value, NULL, NULL), 4428 Handle<String>);
4405 class_name_(class_name) { }
4406 4429
4407 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch) 4430 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch)
4408 4431
4409 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4432 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4410 return Representation::Tagged(); 4433 return Representation::Tagged();
4411 } 4434 }
4412 4435
4413 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 4436 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
4414 4437
4415 Handle<String> class_name() const { return class_name_; } 4438 Handle<String> class_name() const { return class_name_; }
4416 4439
4417 private: 4440 private:
4441 HClassOfTestAndBranch(HValue* value, Handle<String> class_name)
4442 : HUnaryControlInstruction(value, NULL, NULL),
4443 class_name_(class_name) { }
4444
4418 Handle<String> class_name_; 4445 Handle<String> class_name_;
4419 }; 4446 };
4420 4447
4421 4448
4422 class HTypeofIsAndBranch V8_FINAL : public HUnaryControlInstruction { 4449 class HTypeofIsAndBranch V8_FINAL : public HUnaryControlInstruction {
4423 public: 4450 public:
4424 HTypeofIsAndBranch(HValue* value, Handle<String> type_literal) 4451 DECLARE_INSTRUCTION_FACTORY_P2(HTypeofIsAndBranch, HValue*, Handle<String>);
4425 : HUnaryControlInstruction(value, NULL, NULL),
4426 type_literal_(type_literal) { }
4427 4452
4428 Handle<String> type_literal() { return type_literal_; } 4453 Handle<String> type_literal() { return type_literal_; }
4429 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 4454 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
4430 4455
4431 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch) 4456 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch)
4432 4457
4433 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4458 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4434 return Representation::Tagged(); 4459 return Representation::Tagged();
4435 } 4460 }
4436 4461
4437 private: 4462 private:
4463 HTypeofIsAndBranch(HValue* value, Handle<String> type_literal)
4464 : HUnaryControlInstruction(value, NULL, NULL),
4465 type_literal_(type_literal) { }
4466
4438 Handle<String> type_literal_; 4467 Handle<String> type_literal_;
4439 }; 4468 };
4440 4469
4441 4470
4442 class HInstanceOf V8_FINAL : public HBinaryOperation { 4471 class HInstanceOf V8_FINAL : public HBinaryOperation {
4443 public: 4472 public:
4444 HInstanceOf(HValue* context, HValue* left, HValue* right) 4473 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOf, HValue*, HValue*);
4445 : HBinaryOperation(context, left, right, HType::Boolean()) {
4446 set_representation(Representation::Tagged());
4447 SetAllSideEffects();
4448 }
4449 4474
4450 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4475 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4451 return Representation::Tagged(); 4476 return Representation::Tagged();
4452 } 4477 }
4453 4478
4454 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 4479 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
4455 4480
4456 DECLARE_CONCRETE_INSTRUCTION(InstanceOf) 4481 DECLARE_CONCRETE_INSTRUCTION(InstanceOf)
4482
4483 private:
4484 HInstanceOf(HValue* context, HValue* left, HValue* right)
4485 : HBinaryOperation(context, left, right, HType::Boolean()) {
4486 set_representation(Representation::Tagged());
4487 SetAllSideEffects();
4488 }
4457 }; 4489 };
4458 4490
4459 4491
4460 class HInstanceOfKnownGlobal V8_FINAL : public HTemplateInstruction<2> { 4492 class HInstanceOfKnownGlobal V8_FINAL : public HTemplateInstruction<2> {
4461 public: 4493 public:
4462 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOfKnownGlobal, 4494 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOfKnownGlobal,
4463 HValue*, 4495 HValue*,
4464 Handle<JSFunction>); 4496 Handle<JSFunction>);
4465 4497
4466 HValue* context() { return OperandAt(0); } 4498 HValue* context() { return OperandAt(0); }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
4522 } 4554 }
4523 4555
4524 virtual bool IsDeletable() const V8_OVERRIDE { 4556 virtual bool IsDeletable() const V8_OVERRIDE {
4525 return !right()->representation().IsTagged(); 4557 return !right()->representation().IsTagged();
4526 } 4558 }
4527 }; 4559 };
4528 4560
4529 4561
4530 class HRandom V8_FINAL : public HTemplateInstruction<1> { 4562 class HRandom V8_FINAL : public HTemplateInstruction<1> {
4531 public: 4563 public:
4532 explicit HRandom(HValue* global_object) { 4564 DECLARE_INSTRUCTION_FACTORY_P1(HRandom, HValue*);
4533 SetOperandAt(0, global_object);
4534 set_representation(Representation::Double());
4535 }
4536 4565
4537 HValue* global_object() { return OperandAt(0); } 4566 HValue* global_object() { return OperandAt(0); }
4538 4567
4539 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4568 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4540 return Representation::Tagged(); 4569 return Representation::Tagged();
4541 } 4570 }
4542 4571
4543 DECLARE_CONCRETE_INSTRUCTION(Random) 4572 DECLARE_CONCRETE_INSTRUCTION(Random)
4544 4573
4545 private: 4574 private:
4575 explicit HRandom(HValue* global_object) {
4576 SetOperandAt(0, global_object);
4577 set_representation(Representation::Double());
4578 }
4579
4546 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 4580 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
4547 }; 4581 };
4548 4582
4549 4583
4550 class HAdd V8_FINAL : public HArithmeticBinaryOperation { 4584 class HAdd V8_FINAL : public HArithmeticBinaryOperation {
4551 public: 4585 public:
4552 static HInstruction* New(Zone* zone, 4586 static HInstruction* New(Zone* zone,
4553 HValue* context, 4587 HValue* context,
4554 HValue* left, 4588 HValue* left,
4555 HValue* right); 4589 HValue* right);
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
5172 } 5206 }
5173 5207
5174 HEnvironment* environment_; 5208 HEnvironment* environment_;
5175 int index_; 5209 int index_;
5176 HPhi* incoming_value_; 5210 HPhi* incoming_value_;
5177 }; 5211 };
5178 5212
5179 5213
5180 class HLoadGlobalCell V8_FINAL : public HTemplateInstruction<0> { 5214 class HLoadGlobalCell V8_FINAL : public HTemplateInstruction<0> {
5181 public: 5215 public:
5182 HLoadGlobalCell(Handle<Cell> cell, PropertyDetails details) 5216 DECLARE_INSTRUCTION_FACTORY_P2(HLoadGlobalCell, Handle<Cell>,
5183 : cell_(Unique<Cell>::CreateUninitialized(cell)), details_(details) { 5217 PropertyDetails);
5184 set_representation(Representation::Tagged());
5185 SetFlag(kUseGVN);
5186 SetGVNFlag(kDependsOnGlobalVars);
5187 }
5188 5218
5189 Unique<Cell> cell() const { return cell_; } 5219 Unique<Cell> cell() const { return cell_; }
5190 bool RequiresHoleCheck() const; 5220 bool RequiresHoleCheck() const;
5191 5221
5192 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 5222 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
5193 5223
5194 virtual intptr_t Hashcode() V8_OVERRIDE { 5224 virtual intptr_t Hashcode() V8_OVERRIDE {
5195 return cell_.Hashcode(); 5225 return cell_.Hashcode();
5196 } 5226 }
5197 5227
5198 virtual void FinalizeUniqueness() V8_OVERRIDE { 5228 virtual void FinalizeUniqueness() V8_OVERRIDE {
5199 cell_ = Unique<Cell>(cell_.handle()); 5229 cell_ = Unique<Cell>(cell_.handle());
5200 } 5230 }
5201 5231
5202 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 5232 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
5203 return Representation::None(); 5233 return Representation::None();
5204 } 5234 }
5205 5235
5206 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell) 5236 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell)
5207 5237
5208 protected: 5238 protected:
5209 virtual bool DataEquals(HValue* other) V8_OVERRIDE { 5239 virtual bool DataEquals(HValue* other) V8_OVERRIDE {
5210 return cell_ == HLoadGlobalCell::cast(other)->cell_; 5240 return cell_ == HLoadGlobalCell::cast(other)->cell_;
5211 } 5241 }
5212 5242
5213 private: 5243 private:
5244 HLoadGlobalCell(Handle<Cell> cell, PropertyDetails details)
5245 : cell_(Unique<Cell>::CreateUninitialized(cell)), details_(details) {
5246 set_representation(Representation::Tagged());
5247 SetFlag(kUseGVN);
5248 SetGVNFlag(kDependsOnGlobalVars);
5249 }
5250
5214 virtual bool IsDeletable() const V8_OVERRIDE { return !RequiresHoleCheck(); } 5251 virtual bool IsDeletable() const V8_OVERRIDE { return !RequiresHoleCheck(); }
5215 5252
5216 Unique<Cell> cell_; 5253 Unique<Cell> cell_;
5217 PropertyDetails details_; 5254 PropertyDetails details_;
5218 }; 5255 };
5219 5256
5220 5257
5221 class HLoadGlobalGeneric V8_FINAL : public HTemplateInstruction<2> { 5258 class HLoadGlobalGeneric V8_FINAL : public HTemplateInstruction<2> {
5222 public: 5259 public:
5223 HLoadGlobalGeneric(HValue* context, 5260 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*,
5224 HValue* global_object, 5261 Handle<Object>, bool);
5225 Handle<Object> name,
5226 bool for_typeof)
5227 : name_(name),
5228 for_typeof_(for_typeof) {
5229 SetOperandAt(0, context);
5230 SetOperandAt(1, global_object);
5231 set_representation(Representation::Tagged());
5232 SetAllSideEffects();
5233 }
5234 5262
5235 HValue* context() { return OperandAt(0); } 5263 HValue* context() { return OperandAt(0); }
5236 HValue* global_object() { return OperandAt(1); } 5264 HValue* global_object() { return OperandAt(1); }
5237 Handle<Object> name() const { return name_; } 5265 Handle<Object> name() const { return name_; }
5238 bool for_typeof() const { return for_typeof_; } 5266 bool for_typeof() const { return for_typeof_; }
5239 5267
5240 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 5268 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
5241 5269
5242 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 5270 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
5243 return Representation::Tagged(); 5271 return Representation::Tagged();
5244 } 5272 }
5245 5273
5246 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric) 5274 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric)
5247 5275
5248 private: 5276 private:
5277 HLoadGlobalGeneric(HValue* context,
5278 HValue* global_object,
5279 Handle<Object> name,
5280 bool for_typeof)
5281 : name_(name),
5282 for_typeof_(for_typeof) {
5283 SetOperandAt(0, context);
5284 SetOperandAt(1, global_object);
5285 set_representation(Representation::Tagged());
5286 SetAllSideEffects();
5287 }
5288
5249 Handle<Object> name_; 5289 Handle<Object> name_;
5250 bool for_typeof_; 5290 bool for_typeof_;
5251 }; 5291 };
5252 5292
5253 5293
5254 class HAllocate V8_FINAL : public HTemplateInstruction<2> { 5294 class HAllocate V8_FINAL : public HTemplateInstruction<2> {
5255 public: 5295 public:
5256 static HAllocate* New(Zone* zone, 5296 static HAllocate* New(Zone* zone,
5257 HValue* context, 5297 HValue* context,
5258 HValue* size, 5298 HValue* size,
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after
5989 } 6029 }
5990 6030
5991 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 6031 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
5992 6032
5993 HObjectAccess access_; 6033 HObjectAccess access_;
5994 }; 6034 };
5995 6035
5996 6036
5997 class HLoadNamedGeneric V8_FINAL : public HTemplateInstruction<2> { 6037 class HLoadNamedGeneric V8_FINAL : public HTemplateInstruction<2> {
5998 public: 6038 public:
5999 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name) 6039 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*,
6000 : name_(name) { 6040 Handle<Object>);
6001 SetOperandAt(0, context);
6002 SetOperandAt(1, object);
6003 set_representation(Representation::Tagged());
6004 SetAllSideEffects();
6005 }
6006 6041
6007 HValue* context() { return OperandAt(0); } 6042 HValue* context() { return OperandAt(0); }
6008 HValue* object() { return OperandAt(1); } 6043 HValue* object() { return OperandAt(1); }
6009 Handle<Object> name() const { return name_; } 6044 Handle<Object> name() const { return name_; }
6010 6045
6011 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 6046 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6012 return Representation::Tagged(); 6047 return Representation::Tagged();
6013 } 6048 }
6014 6049
6015 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 6050 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
6016 6051
6017 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) 6052 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric)
6018 6053
6019 private: 6054 private:
6055 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name)
6056 : name_(name) {
6057 SetOperandAt(0, context);
6058 SetOperandAt(1, object);
6059 set_representation(Representation::Tagged());
6060 SetAllSideEffects();
6061 }
6062
6020 Handle<Object> name_; 6063 Handle<Object> name_;
6021 }; 6064 };
6022 6065
6023 6066
6024 class HLoadFunctionPrototype V8_FINAL : public HUnaryOperation { 6067 class HLoadFunctionPrototype V8_FINAL : public HUnaryOperation {
6025 public: 6068 public:
6026 explicit HLoadFunctionPrototype(HValue* function) 6069 DECLARE_INSTRUCTION_FACTORY_P1(HLoadFunctionPrototype, HValue*);
6027 : HUnaryOperation(function) {
6028 set_representation(Representation::Tagged());
6029 SetFlag(kUseGVN);
6030 SetGVNFlag(kDependsOnCalls);
6031 }
6032 6070
6033 HValue* function() { return OperandAt(0); } 6071 HValue* function() { return OperandAt(0); }
6034 6072
6035 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 6073 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6036 return Representation::Tagged(); 6074 return Representation::Tagged();
6037 } 6075 }
6038 6076
6039 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype) 6077 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype)
6040 6078
6041 protected: 6079 protected:
6042 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } 6080 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; }
6081
6082 private:
6083 explicit HLoadFunctionPrototype(HValue* function)
6084 : HUnaryOperation(function) {
6085 set_representation(Representation::Tagged());
6086 SetFlag(kUseGVN);
6087 SetGVNFlag(kDependsOnCalls);
6088 }
6043 }; 6089 };
6044 6090
6045 class ArrayInstructionInterface { 6091 class ArrayInstructionInterface {
6046 public: 6092 public:
6047 virtual HValue* GetKey() = 0; 6093 virtual HValue* GetKey() = 0;
6048 virtual void SetKey(HValue* key) = 0; 6094 virtual void SetKey(HValue* key) = 0;
6049 virtual void SetIndexOffset(uint32_t index_offset) = 0; 6095 virtual void SetIndexOffset(uint32_t index_offset) = 0;
6050 virtual bool IsDehoisted() = 0; 6096 virtual bool IsDehoisted() = 0;
6051 virtual void SetDehoisted(bool is_dehoisted) = 0; 6097 virtual void SetDehoisted(bool is_dehoisted) = 0;
6052 virtual ~ArrayInstructionInterface() { }; 6098 virtual ~ArrayInstructionInterface() { };
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
6220 {}; // NOLINT 6266 {}; // NOLINT
6221 class IsDehoistedField: 6267 class IsDehoistedField:
6222 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted> 6268 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted>
6223 {}; // NOLINT 6269 {}; // NOLINT
6224 uint32_t bit_field_; 6270 uint32_t bit_field_;
6225 }; 6271 };
6226 6272
6227 6273
6228 class HLoadKeyedGeneric V8_FINAL : public HTemplateInstruction<3> { 6274 class HLoadKeyedGeneric V8_FINAL : public HTemplateInstruction<3> {
6229 public: 6275 public:
6230 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key) { 6276 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*,
6231 set_representation(Representation::Tagged()); 6277 HValue*);
6232 SetOperandAt(0, obj);
6233 SetOperandAt(1, key);
6234 SetOperandAt(2, context);
6235 SetAllSideEffects();
6236 }
6237
6238 HValue* object() { return OperandAt(0); } 6278 HValue* object() { return OperandAt(0); }
6239 HValue* key() { return OperandAt(1); } 6279 HValue* key() { return OperandAt(1); }
6240 HValue* context() { return OperandAt(2); } 6280 HValue* context() { return OperandAt(2); }
6241 6281
6242 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 6282 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
6243 6283
6244 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 6284 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6245 // tagged[tagged] 6285 // tagged[tagged]
6246 return Representation::Tagged(); 6286 return Representation::Tagged();
6247 } 6287 }
6248 6288
6249 virtual HValue* Canonicalize() V8_OVERRIDE; 6289 virtual HValue* Canonicalize() V8_OVERRIDE;
6250 6290
6251 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric) 6291 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric)
6292
6293 private:
6294 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key) {
6295 set_representation(Representation::Tagged());
6296 SetOperandAt(0, obj);
6297 SetOperandAt(1, key);
6298 SetOperandAt(2, context);
6299 SetAllSideEffects();
6300 }
6252 }; 6301 };
6253 6302
6254 6303
6255 class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { 6304 class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> {
6256 public: 6305 public:
6257 DECLARE_INSTRUCTION_FACTORY_P3(HStoreNamedField, HValue*, 6306 DECLARE_INSTRUCTION_FACTORY_P3(HStoreNamedField, HValue*,
6258 HObjectAccess, HValue*); 6307 HObjectAccess, HValue*);
6259 6308
6260 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField) 6309 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField)
6261 6310
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
6360 6409
6361 HObjectAccess access_; 6410 HObjectAccess access_;
6362 HValue* new_space_dominator_; 6411 HValue* new_space_dominator_;
6363 WriteBarrierMode write_barrier_mode_ : 1; 6412 WriteBarrierMode write_barrier_mode_ : 1;
6364 bool has_transition_ : 1; 6413 bool has_transition_ : 1;
6365 }; 6414 };
6366 6415
6367 6416
6368 class HStoreNamedGeneric V8_FINAL : public HTemplateInstruction<3> { 6417 class HStoreNamedGeneric V8_FINAL : public HTemplateInstruction<3> {
6369 public: 6418 public:
6370 HStoreNamedGeneric(HValue* context, 6419 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*,
6371 HValue* object, 6420 Handle<String>, HValue*,
6372 Handle<String> name, 6421 StrictModeFlag);
6373 HValue* value,
6374 StrictModeFlag strict_mode_flag)
6375 : name_(name),
6376 strict_mode_flag_(strict_mode_flag) {
6377 SetOperandAt(0, object);
6378 SetOperandAt(1, value);
6379 SetOperandAt(2, context);
6380 SetAllSideEffects();
6381 }
6382
6383 HValue* object() { return OperandAt(0); } 6422 HValue* object() { return OperandAt(0); }
6384 HValue* value() { return OperandAt(1); } 6423 HValue* value() { return OperandAt(1); }
6385 HValue* context() { return OperandAt(2); } 6424 HValue* context() { return OperandAt(2); }
6386 Handle<String> name() { return name_; } 6425 Handle<String> name() { return name_; }
6387 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; } 6426 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; }
6388 6427
6389 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 6428 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
6390 6429
6391 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 6430 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6392 return Representation::Tagged(); 6431 return Representation::Tagged();
6393 } 6432 }
6394 6433
6395 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) 6434 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric)
6396 6435
6397 private: 6436 private:
6437 HStoreNamedGeneric(HValue* context,
6438 HValue* object,
6439 Handle<String> name,
6440 HValue* value,
6441 StrictModeFlag strict_mode_flag)
6442 : name_(name),
6443 strict_mode_flag_(strict_mode_flag) {
6444 SetOperandAt(0, object);
6445 SetOperandAt(1, value);
6446 SetOperandAt(2, context);
6447 SetAllSideEffects();
6448 }
6449
6398 Handle<String> name_; 6450 Handle<String> name_;
6399 StrictModeFlag strict_mode_flag_; 6451 StrictModeFlag strict_mode_flag_;
6400 }; 6452 };
6401 6453
6402 6454
6403 class HStoreKeyed V8_FINAL 6455 class HStoreKeyed V8_FINAL
6404 : public HTemplateInstruction<3>, public ArrayInstructionInterface { 6456 : public HTemplateInstruction<3>, public ArrayInstructionInterface {
6405 public: 6457 public:
6406 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, 6458 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*,
6407 ElementsKind); 6459 ElementsKind);
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
6536 ElementsKind elements_kind_; 6588 ElementsKind elements_kind_;
6537 uint32_t index_offset_; 6589 uint32_t index_offset_;
6538 bool is_dehoisted_ : 1; 6590 bool is_dehoisted_ : 1;
6539 bool is_uninitialized_ : 1; 6591 bool is_uninitialized_ : 1;
6540 HValue* new_space_dominator_; 6592 HValue* new_space_dominator_;
6541 }; 6593 };
6542 6594
6543 6595
6544 class HStoreKeyedGeneric V8_FINAL : public HTemplateInstruction<4> { 6596 class HStoreKeyedGeneric V8_FINAL : public HTemplateInstruction<4> {
6545 public: 6597 public:
6546 HStoreKeyedGeneric(HValue* context, 6598 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreKeyedGeneric, HValue*,
6547 HValue* object, 6599 HValue*, HValue*, StrictModeFlag);
6548 HValue* key,
6549 HValue* value,
6550 StrictModeFlag strict_mode_flag)
6551 : strict_mode_flag_(strict_mode_flag) {
6552 SetOperandAt(0, object);
6553 SetOperandAt(1, key);
6554 SetOperandAt(2, value);
6555 SetOperandAt(3, context);
6556 SetAllSideEffects();
6557 }
6558 6600
6559 HValue* object() { return OperandAt(0); } 6601 HValue* object() { return OperandAt(0); }
6560 HValue* key() { return OperandAt(1); } 6602 HValue* key() { return OperandAt(1); }
6561 HValue* value() { return OperandAt(2); } 6603 HValue* value() { return OperandAt(2); }
6562 HValue* context() { return OperandAt(3); } 6604 HValue* context() { return OperandAt(3); }
6563 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; } 6605 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; }
6564 6606
6565 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 6607 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6566 // tagged[tagged] = tagged 6608 // tagged[tagged] = tagged
6567 return Representation::Tagged(); 6609 return Representation::Tagged();
6568 } 6610 }
6569 6611
6570 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 6612 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
6571 6613
6572 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) 6614 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric)
6573 6615
6574 private: 6616 private:
6617 HStoreKeyedGeneric(HValue* context,
6618 HValue* object,
6619 HValue* key,
6620 HValue* value,
6621 StrictModeFlag strict_mode_flag)
6622 : strict_mode_flag_(strict_mode_flag) {
6623 SetOperandAt(0, object);
6624 SetOperandAt(1, key);
6625 SetOperandAt(2, value);
6626 SetOperandAt(3, context);
6627 SetAllSideEffects();
6628 }
6629
6575 StrictModeFlag strict_mode_flag_; 6630 StrictModeFlag strict_mode_flag_;
6576 }; 6631 };
6577 6632
6578 6633
6579 class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> { 6634 class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
6580 public: 6635 public:
6581 inline static HTransitionElementsKind* New(Zone* zone, 6636 inline static HTransitionElementsKind* New(Zone* zone,
6582 HValue* context, 6637 HValue* context,
6583 HValue* object, 6638 HValue* object,
6584 Handle<Map> original_map, 6639 Handle<Map> original_map,
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
6943 ASSERT(function->function_id == Runtime::kCreateObjectLiteral); 6998 ASSERT(function->function_id == Runtime::kCreateObjectLiteral);
6944 #endif 6999 #endif
6945 } 7000 }
6946 7001
6947 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7002 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
6948 }; 7003 };
6949 7004
6950 7005
6951 class HValueOf V8_FINAL : public HUnaryOperation { 7006 class HValueOf V8_FINAL : public HUnaryOperation {
6952 public: 7007 public:
6953 explicit HValueOf(HValue* value) : HUnaryOperation(value) { 7008 DECLARE_INSTRUCTION_FACTORY_P1(HValueOf, HValue*);
6954 set_representation(Representation::Tagged());
6955 }
6956 7009
6957 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 7010 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6958 return Representation::Tagged(); 7011 return Representation::Tagged();
6959 } 7012 }
6960 7013
6961 DECLARE_CONCRETE_INSTRUCTION(ValueOf) 7014 DECLARE_CONCRETE_INSTRUCTION(ValueOf)
6962 7015
6963 private: 7016 private:
7017 explicit HValueOf(HValue* value) : HUnaryOperation(value) {
7018 set_representation(Representation::Tagged());
7019 }
7020
6964 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7021 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
6965 }; 7022 };
6966 7023
6967 7024
6968 class HDateField V8_FINAL : public HUnaryOperation { 7025 class HDateField V8_FINAL : public HUnaryOperation {
6969 public: 7026 public:
6970 HDateField(HValue* date, Smi* index) 7027 DECLARE_INSTRUCTION_FACTORY_P2(HDateField, HValue*, Smi*);
6971 : HUnaryOperation(date), index_(index) {
6972 set_representation(Representation::Tagged());
6973 }
6974 7028
6975 Smi* index() const { return index_; } 7029 Smi* index() const { return index_; }
6976 7030
6977 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 7031 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6978 return Representation::Tagged(); 7032 return Representation::Tagged();
6979 } 7033 }
6980 7034
6981 DECLARE_CONCRETE_INSTRUCTION(DateField) 7035 DECLARE_CONCRETE_INSTRUCTION(DateField)
6982 7036
6983 private: 7037 private:
7038 HDateField(HValue* date, Smi* index)
7039 : HUnaryOperation(date), index_(index) {
7040 set_representation(Representation::Tagged());
7041 }
7042
6984 Smi* index_; 7043 Smi* index_;
6985 }; 7044 };
6986 7045
6987 7046
6988 class HSeqStringSetChar V8_FINAL : public HTemplateInstruction<3> { 7047 class HSeqStringSetChar V8_FINAL : public HTemplateInstruction<3> {
6989 public: 7048 public:
6990 HSeqStringSetChar(String::Encoding encoding, 7049 DECLARE_INSTRUCTION_FACTORY_P4(HSeqStringSetChar, String::Encoding,
6991 HValue* string, 7050 HValue*, HValue*, HValue*);
6992 HValue* index,
6993 HValue* value) : encoding_(encoding) {
6994 SetOperandAt(0, string);
6995 SetOperandAt(1, index);
6996 SetOperandAt(2, value);
6997 set_representation(Representation::Tagged());
6998 }
6999 7051
7000 String::Encoding encoding() { return encoding_; } 7052 String::Encoding encoding() { return encoding_; }
7001 HValue* string() { return OperandAt(0); } 7053 HValue* string() { return OperandAt(0); }
7002 HValue* index() { return OperandAt(1); } 7054 HValue* index() { return OperandAt(1); }
7003 HValue* value() { return OperandAt(2); } 7055 HValue* value() { return OperandAt(2); }
7004 7056
7005 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 7057 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
7006 return (index == 0) ? Representation::Tagged() 7058 return (index == 0) ? Representation::Tagged()
7007 : Representation::Integer32(); 7059 : Representation::Integer32();
7008 } 7060 }
7009 7061
7010 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar) 7062 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar)
7011 7063
7012 private: 7064 private:
7065 HSeqStringSetChar(String::Encoding encoding,
7066 HValue* string,
7067 HValue* index,
7068 HValue* value) : encoding_(encoding) {
7069 SetOperandAt(0, string);
7070 SetOperandAt(1, index);
7071 SetOperandAt(2, value);
7072 set_representation(Representation::Tagged());
7073 }
7074
7013 String::Encoding encoding_; 7075 String::Encoding encoding_;
7014 }; 7076 };
7015 7077
7016 7078
7017 class HCheckMapValue V8_FINAL : public HTemplateInstruction<2> { 7079 class HCheckMapValue V8_FINAL : public HTemplateInstruction<2> {
7018 public: 7080 public:
7019 DECLARE_INSTRUCTION_FACTORY_P2(HCheckMapValue, HValue*, HValue*); 7081 DECLARE_INSTRUCTION_FACTORY_P2(HCheckMapValue, HValue*, HValue*);
7020 7082
7021 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 7083 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
7022 return Representation::Tagged(); 7084 return Representation::Tagged();
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
7151 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7213 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
7152 }; 7214 };
7153 7215
7154 7216
7155 #undef DECLARE_INSTRUCTION 7217 #undef DECLARE_INSTRUCTION
7156 #undef DECLARE_CONCRETE_INSTRUCTION 7218 #undef DECLARE_CONCRETE_INSTRUCTION
7157 7219
7158 } } // namespace v8::internal 7220 } } // namespace v8::internal
7159 7221
7160 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7222 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698