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

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

Issue 2389133007: [crankshaft] Exclude context parameter from HCallWithDescriptor arguments. (Closed)
Patch Set: Rebasing Created 4 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
« no previous file with comments | « src/crankshaft/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 // 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_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ 5 #ifndef V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_
6 #define V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ 6 #define V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_
7 7
8 #include <cstring> 8 #include <cstring>
9 #include <iosfwd> 9 #include <iosfwd>
10 10
(...skipping 2140 matching lines...) Expand 10 before | Expand all | Expand 10 after
2151 2151
2152 2152
2153 class HCallWithDescriptor final : public HInstruction { 2153 class HCallWithDescriptor final : public HInstruction {
2154 public: 2154 public:
2155 static HCallWithDescriptor* New( 2155 static HCallWithDescriptor* New(
2156 Isolate* isolate, Zone* zone, HValue* context, HValue* target, 2156 Isolate* isolate, Zone* zone, HValue* context, HValue* target,
2157 int argument_count, CallInterfaceDescriptor descriptor, 2157 int argument_count, CallInterfaceDescriptor descriptor,
2158 const Vector<HValue*>& operands, 2158 const Vector<HValue*>& operands,
2159 TailCallMode syntactic_tail_call_mode = TailCallMode::kDisallow, 2159 TailCallMode syntactic_tail_call_mode = TailCallMode::kDisallow,
2160 TailCallMode tail_call_mode = TailCallMode::kDisallow) { 2160 TailCallMode tail_call_mode = TailCallMode::kDisallow) {
2161 HCallWithDescriptor* res = new (zone) 2161 HCallWithDescriptor* res = new (zone) HCallWithDescriptor(
2162 HCallWithDescriptor(target, argument_count, descriptor, operands, 2162 context, target, argument_count, descriptor, operands,
2163 syntactic_tail_call_mode, tail_call_mode, zone); 2163 syntactic_tail_call_mode, tail_call_mode, zone);
2164 return res; 2164 return res;
2165 } 2165 }
2166 2166
2167 int OperandCount() const final { return values_.length(); } 2167 int OperandCount() const final { return values_.length(); }
2168 HValue* OperandAt(int index) const final { return values_[index]; } 2168 HValue* OperandAt(int index) const final { return values_[index]; }
2169 2169
2170 Representation RequiredInputRepresentation(int index) final { 2170 Representation RequiredInputRepresentation(int index) final {
2171 if (index == 0 || index == 1) { 2171 if (index == 0 || index == 1) {
2172 // Target + context 2172 // Target + context
2173 return Representation::Tagged(); 2173 return Representation::Tagged();
(...skipping 19 matching lines...) Expand all
2193 bool IsTailCall() const { return tail_call_mode() == TailCallMode::kAllow; } 2193 bool IsTailCall() const { return tail_call_mode() == TailCallMode::kAllow; }
2194 2194
2195 virtual int argument_count() const { 2195 virtual int argument_count() const {
2196 return argument_count_; 2196 return argument_count_;
2197 } 2197 }
2198 2198
2199 int argument_delta() const override { return -argument_count_; } 2199 int argument_delta() const override { return -argument_count_; }
2200 2200
2201 CallInterfaceDescriptor descriptor() const { return descriptor_; } 2201 CallInterfaceDescriptor descriptor() const { return descriptor_; }
2202 2202
2203 HValue* target() { 2203 HValue* target() { return OperandAt(0); }
2204 return OperandAt(0); 2204 HValue* context() { return OperandAt(1); }
2205 HValue* parameter(int index) {
2206 DCHECK_LT(index, GetParameterCount());
2207 return OperandAt(index + 2);
2205 } 2208 }
2206 2209
2207 std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT 2210 std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT
2208 2211
2209 private: 2212 private:
2210 // The argument count includes the receiver. 2213 // The argument count includes the receiver.
2211 HCallWithDescriptor(HValue* target, int argument_count, 2214 HCallWithDescriptor(HValue* context, HValue* target, int argument_count,
2212 CallInterfaceDescriptor descriptor, 2215 CallInterfaceDescriptor descriptor,
2213 const Vector<HValue*>& operands, 2216 const Vector<HValue*>& operands,
2214 TailCallMode syntactic_tail_call_mode, 2217 TailCallMode syntactic_tail_call_mode,
2215 TailCallMode tail_call_mode, Zone* zone) 2218 TailCallMode tail_call_mode, Zone* zone)
2216 : descriptor_(descriptor), 2219 : descriptor_(descriptor),
2217 values_(GetParameterCount() + 1, zone), // +1 here is for target. 2220 values_(GetParameterCount() + 2, zone), // +2 for context and target.
2218 argument_count_(argument_count), 2221 argument_count_(argument_count),
2219 bit_field_( 2222 bit_field_(
2220 TailCallModeField::encode(tail_call_mode) | 2223 TailCallModeField::encode(tail_call_mode) |
2221 SyntacticTailCallModeField::encode(syntactic_tail_call_mode)) { 2224 SyntacticTailCallModeField::encode(syntactic_tail_call_mode)) {
2222 DCHECK_EQ(operands.length(), GetParameterCount()); 2225 DCHECK_EQ(operands.length(), GetParameterCount());
2223 // We can only tail call without any stack arguments. 2226 // We can only tail call without any stack arguments.
2224 DCHECK(tail_call_mode != TailCallMode::kAllow || argument_count == 0); 2227 DCHECK(tail_call_mode != TailCallMode::kAllow || argument_count == 0);
2225 AddOperand(target, zone); 2228 AddOperand(target, zone);
2229 AddOperand(context, zone);
2226 for (int i = 0; i < operands.length(); i++) { 2230 for (int i = 0; i < operands.length(); i++) {
2227 AddOperand(operands[i], zone); 2231 AddOperand(operands[i], zone);
2228 } 2232 }
2229 this->set_representation(Representation::Tagged()); 2233 this->set_representation(Representation::Tagged());
2230 this->SetAllSideEffects(); 2234 this->SetAllSideEffects();
2231 } 2235 }
2232 2236
2233 void AddOperand(HValue* v, Zone* zone) { 2237 void AddOperand(HValue* v, Zone* zone) {
2234 values_.Add(NULL, zone); 2238 values_.Add(NULL, zone);
2235 SetOperandAt(values_.length() - 1, v); 2239 SetOperandAt(values_.length() - 1, v);
2236 } 2240 }
2237 2241
2238 int GetParameterCount() const { 2242 int GetParameterCount() const { return descriptor_.GetParameterCount(); }
2239 return descriptor_.GetParameterCount() + 1; // +1 here is for context.
2240 }
2241 2243
2242 void InternalSetOperandAt(int index, HValue* value) final { 2244 void InternalSetOperandAt(int index, HValue* value) final {
2243 values_[index] = value; 2245 values_[index] = value;
2244 } 2246 }
2245 2247
2246 CallInterfaceDescriptor descriptor_; 2248 CallInterfaceDescriptor descriptor_;
2247 ZoneList<HValue*> values_; 2249 ZoneList<HValue*> values_;
2248 int argument_count_; 2250 int argument_count_;
2249 class TailCallModeField : public BitField<TailCallMode, 0, 1> {}; 2251 class TailCallModeField : public BitField<TailCallMode, 0, 1> {};
2250 class SyntacticTailCallModeField 2252 class SyntacticTailCallModeField
(...skipping 4698 matching lines...) Expand 10 before | Expand all | Expand 10 after
6949 bool IsDeletable() const override { return true; } 6951 bool IsDeletable() const override { return true; }
6950 }; 6952 };
6951 6953
6952 #undef DECLARE_INSTRUCTION 6954 #undef DECLARE_INSTRUCTION
6953 #undef DECLARE_CONCRETE_INSTRUCTION 6955 #undef DECLARE_CONCRETE_INSTRUCTION
6954 6956
6955 } // namespace internal 6957 } // namespace internal
6956 } // namespace v8 6958 } // namespace v8
6957 6959
6958 #endif // V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ 6960 #endif // V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698