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

Side by Side Diff: src/compiler/raw-machine-assembler.cc

Issue 1518673002: Remove dummy control / effect edges from RMA Call nodes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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 | « no previous file | test/unittests/compiler/interpreter-assembler-unittest.h » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #include "src/compiler/raw-machine-assembler.h" 5 #include "src/compiler/raw-machine-assembler.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/compiler/node-properties.h" 8 #include "src/compiler/node-properties.h"
9 #include "src/compiler/pipeline.h" 9 #include "src/compiler/pipeline.h"
10 #include "src/compiler/scheduler.h" 10 #include "src/compiler/scheduler.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 Node* ret = MakeNode(common()->Return(3), 3, values); 114 Node* ret = MakeNode(common()->Return(3), 3, values);
115 schedule()->AddReturn(CurrentBlock(), ret); 115 schedule()->AddReturn(CurrentBlock(), ret);
116 current_block_ = nullptr; 116 current_block_ = nullptr;
117 } 117 }
118 118
119 119
120 Node* RawMachineAssembler::CallN(CallDescriptor* desc, Node* function, 120 Node* RawMachineAssembler::CallN(CallDescriptor* desc, Node* function,
121 Node** args) { 121 Node** args) {
122 int param_count = 122 int param_count =
123 static_cast<int>(desc->GetMachineSignature()->parameter_count()); 123 static_cast<int>(desc->GetMachineSignature()->parameter_count());
124 int input_count = param_count + 3; 124 int input_count = param_count + 1;
125 Node** buffer = zone()->NewArray<Node*>(input_count); 125 Node** buffer = zone()->NewArray<Node*>(input_count);
126 int index = 0; 126 int index = 0;
127 buffer[index++] = function; 127 buffer[index++] = function;
128 for (int i = 0; i < param_count; i++) { 128 for (int i = 0; i < param_count; i++) {
129 buffer[index++] = args[i]; 129 buffer[index++] = args[i];
130 } 130 }
131 buffer[index++] = graph()->start();
132 buffer[index++] = graph()->start();
133 return AddNode(common()->Call(desc), input_count, buffer); 131 return AddNode(common()->Call(desc), input_count, buffer);
134 } 132 }
135 133
136 134
137 Node* RawMachineAssembler::CallNWithFrameState(CallDescriptor* desc, 135 Node* RawMachineAssembler::CallNWithFrameState(CallDescriptor* desc,
138 Node* function, Node** args, 136 Node* function, Node** args,
139 Node* frame_state) { 137 Node* frame_state) {
140 DCHECK(desc->NeedsFrameState()); 138 DCHECK(desc->NeedsFrameState());
141 int param_count = 139 int param_count =
142 static_cast<int>(desc->GetMachineSignature()->parameter_count()); 140 static_cast<int>(desc->GetMachineSignature()->parameter_count());
143 int input_count = param_count + 4; 141 int input_count = param_count + 2;
144 Node** buffer = zone()->NewArray<Node*>(input_count); 142 Node** buffer = zone()->NewArray<Node*>(input_count);
145 int index = 0; 143 int index = 0;
146 buffer[index++] = function; 144 buffer[index++] = function;
147 for (int i = 0; i < param_count; i++) { 145 for (int i = 0; i < param_count; i++) {
148 buffer[index++] = args[i]; 146 buffer[index++] = args[i];
149 } 147 }
150 buffer[index++] = frame_state; 148 buffer[index++] = frame_state;
151 buffer[index++] = graph()->start();
152 buffer[index++] = graph()->start();
153 return AddNode(common()->Call(desc), input_count, buffer); 149 return AddNode(common()->Call(desc), input_count, buffer);
154 } 150 }
155 151
156 152
157 Node* RawMachineAssembler::CallRuntime1(Runtime::FunctionId function, 153 Node* RawMachineAssembler::CallRuntime1(Runtime::FunctionId function,
158 Node* arg1, Node* context) { 154 Node* arg1, Node* context) {
159 CallDescriptor* descriptor = Linkage::GetRuntimeCallDescriptor( 155 CallDescriptor* descriptor = Linkage::GetRuntimeCallDescriptor(
160 zone(), function, 1, Operator::kNoProperties, CallDescriptor::kNoFlags); 156 zone(), function, 1, Operator::kNoProperties, CallDescriptor::kNoFlags);
161 157
162 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode()); 158 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode());
163 Node* ref = AddNode( 159 Node* ref = AddNode(
164 common()->ExternalConstant(ExternalReference(function, isolate()))); 160 common()->ExternalConstant(ExternalReference(function, isolate())));
165 Node* arity = Int32Constant(1); 161 Node* arity = Int32Constant(1);
166 162
167 return AddNode(common()->Call(descriptor), centry, arg1, ref, arity, context, 163 return AddNode(common()->Call(descriptor), centry, arg1, ref, arity, context);
168 graph()->start(), graph()->start());
169 } 164 }
170 165
171 166
172 Node* RawMachineAssembler::CallRuntime2(Runtime::FunctionId function, 167 Node* RawMachineAssembler::CallRuntime2(Runtime::FunctionId function,
173 Node* arg1, Node* arg2, Node* context) { 168 Node* arg1, Node* arg2, Node* context) {
174 CallDescriptor* descriptor = Linkage::GetRuntimeCallDescriptor( 169 CallDescriptor* descriptor = Linkage::GetRuntimeCallDescriptor(
175 zone(), function, 2, Operator::kNoProperties, CallDescriptor::kNoFlags); 170 zone(), function, 2, Operator::kNoProperties, CallDescriptor::kNoFlags);
176 171
177 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode()); 172 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode());
178 Node* ref = AddNode( 173 Node* ref = AddNode(
179 common()->ExternalConstant(ExternalReference(function, isolate()))); 174 common()->ExternalConstant(ExternalReference(function, isolate())));
180 Node* arity = Int32Constant(2); 175 Node* arity = Int32Constant(2);
181 176
182 return AddNode(common()->Call(descriptor), centry, arg1, arg2, ref, arity, 177 return AddNode(common()->Call(descriptor), centry, arg1, arg2, ref, arity,
183 context, graph()->start(), graph()->start()); 178 context);
184 } 179 }
185 180
186 181
187 Node* RawMachineAssembler::CallRuntime4(Runtime::FunctionId function, 182 Node* RawMachineAssembler::CallRuntime4(Runtime::FunctionId function,
188 Node* arg1, Node* arg2, Node* arg3, 183 Node* arg1, Node* arg2, Node* arg3,
189 Node* arg4, Node* context) { 184 Node* arg4, Node* context) {
190 CallDescriptor* descriptor = Linkage::GetRuntimeCallDescriptor( 185 CallDescriptor* descriptor = Linkage::GetRuntimeCallDescriptor(
191 zone(), function, 4, Operator::kNoProperties, CallDescriptor::kNoFlags); 186 zone(), function, 4, Operator::kNoProperties, CallDescriptor::kNoFlags);
192 187
193 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode()); 188 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode());
194 Node* ref = AddNode( 189 Node* ref = AddNode(
195 common()->ExternalConstant(ExternalReference(function, isolate()))); 190 common()->ExternalConstant(ExternalReference(function, isolate())));
196 Node* arity = Int32Constant(4); 191 Node* arity = Int32Constant(4);
197 192
198 return AddNode(common()->Call(descriptor), centry, arg1, arg2, arg3, arg4, 193 return AddNode(common()->Call(descriptor), centry, arg1, arg2, arg3, arg4,
199 ref, arity, context, graph()->start(), graph()->start()); 194 ref, arity, context);
200 } 195 }
201 196
202 197
203 Node* RawMachineAssembler::TailCallN(CallDescriptor* desc, Node* function, 198 Node* RawMachineAssembler::TailCallN(CallDescriptor* desc, Node* function,
204 Node** args) { 199 Node** args) {
205 int param_count = 200 int param_count =
206 static_cast<int>(desc->GetMachineSignature()->parameter_count()); 201 static_cast<int>(desc->GetMachineSignature()->parameter_count());
207 int input_count = param_count + 3; 202 int input_count = param_count + 1;
208 Node** buffer = zone()->NewArray<Node*>(input_count); 203 Node** buffer = zone()->NewArray<Node*>(input_count);
209 int index = 0; 204 int index = 0;
210 buffer[index++] = function; 205 buffer[index++] = function;
211 for (int i = 0; i < param_count; i++) { 206 for (int i = 0; i < param_count; i++) {
212 buffer[index++] = args[i]; 207 buffer[index++] = args[i];
213 } 208 }
214 buffer[index++] = graph()->start();
215 buffer[index++] = graph()->start();
216 Node* tail_call = MakeNode(common()->TailCall(desc), input_count, buffer); 209 Node* tail_call = MakeNode(common()->TailCall(desc), input_count, buffer);
217 NodeProperties::MergeControlToEnd(graph(), common(), tail_call); 210 NodeProperties::MergeControlToEnd(graph(), common(), tail_call);
218 schedule()->AddTailCall(CurrentBlock(), tail_call); 211 schedule()->AddTailCall(CurrentBlock(), tail_call);
219 current_block_ = nullptr; 212 current_block_ = nullptr;
220 return tail_call; 213 return tail_call;
221 } 214 }
222 215
223 216
224 Node* RawMachineAssembler::TailCallRuntime1(Runtime::FunctionId function, 217 Node* RawMachineAssembler::TailCallRuntime1(Runtime::FunctionId function,
225 Node* arg1, Node* context) { 218 Node* arg1, Node* context) {
226 const int kArity = 1; 219 const int kArity = 1;
227 CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor( 220 CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor(
228 zone(), function, kArity, Operator::kNoProperties, 221 zone(), function, kArity, Operator::kNoProperties,
229 CallDescriptor::kSupportsTailCalls); 222 CallDescriptor::kSupportsTailCalls);
230 223
231 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode()); 224 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode());
232 Node* ref = AddNode( 225 Node* ref = AddNode(
233 common()->ExternalConstant(ExternalReference(function, isolate()))); 226 common()->ExternalConstant(ExternalReference(function, isolate())));
234 Node* arity = Int32Constant(kArity); 227 Node* arity = Int32Constant(kArity);
235 228
236 Node* nodes[] = {centry, arg1, ref, arity, context, graph()->start(), 229 Node* nodes[] = {centry, arg1, ref, arity, context};
237 graph()->start()};
238 Node* tail_call = MakeNode(common()->TailCall(desc), arraysize(nodes), nodes); 230 Node* tail_call = MakeNode(common()->TailCall(desc), arraysize(nodes), nodes);
239 231
240 NodeProperties::MergeControlToEnd(graph(), common(), tail_call); 232 NodeProperties::MergeControlToEnd(graph(), common(), tail_call);
241 schedule()->AddTailCall(CurrentBlock(), tail_call); 233 schedule()->AddTailCall(CurrentBlock(), tail_call);
242 current_block_ = nullptr; 234 current_block_ = nullptr;
243 return tail_call; 235 return tail_call;
244 } 236 }
245 237
246 238
247 Node* RawMachineAssembler::TailCallRuntime2(Runtime::FunctionId function, 239 Node* RawMachineAssembler::TailCallRuntime2(Runtime::FunctionId function,
248 Node* arg1, Node* arg2, 240 Node* arg1, Node* arg2,
249 Node* context) { 241 Node* context) {
250 const int kArity = 2; 242 const int kArity = 2;
251 CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor( 243 CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor(
252 zone(), function, kArity, Operator::kNoProperties, 244 zone(), function, kArity, Operator::kNoProperties,
253 CallDescriptor::kSupportsTailCalls); 245 CallDescriptor::kSupportsTailCalls);
254 246
255 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode()); 247 Node* centry = HeapConstant(CEntryStub(isolate(), 1).GetCode());
256 Node* ref = AddNode( 248 Node* ref = AddNode(
257 common()->ExternalConstant(ExternalReference(function, isolate()))); 249 common()->ExternalConstant(ExternalReference(function, isolate())));
258 Node* arity = Int32Constant(kArity); 250 Node* arity = Int32Constant(kArity);
259 251
260 Node* nodes[] = { 252 Node* nodes[] = {centry, arg1, arg2, ref, arity, context};
261 centry, arg1, arg2, ref, arity, context, graph()->start(),
262 graph()->start()};
263 Node* tail_call = MakeNode(common()->TailCall(desc), arraysize(nodes), nodes); 253 Node* tail_call = MakeNode(common()->TailCall(desc), arraysize(nodes), nodes);
264 254
265 NodeProperties::MergeControlToEnd(graph(), common(), tail_call); 255 NodeProperties::MergeControlToEnd(graph(), common(), tail_call);
266 schedule()->AddTailCall(CurrentBlock(), tail_call); 256 schedule()->AddTailCall(CurrentBlock(), tail_call);
267 current_block_ = nullptr; 257 current_block_ = nullptr;
268 return tail_call; 258 return tail_call;
269 } 259 }
270 260
271 261
272 Node* RawMachineAssembler::CallCFunction0(MachineType return_type, 262 Node* RawMachineAssembler::CallCFunction0(MachineType return_type,
273 Node* function) { 263 Node* function) {
274 MachineSignature::Builder builder(zone(), 1, 0); 264 MachineSignature::Builder builder(zone(), 1, 0);
275 builder.AddReturn(return_type); 265 builder.AddReturn(return_type);
276 const CallDescriptor* descriptor = 266 const CallDescriptor* descriptor =
277 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build()); 267 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build());
278 268
279 return AddNode(common()->Call(descriptor), function, graph()->start(), 269 return AddNode(common()->Call(descriptor), function);
280 graph()->start());
281 } 270 }
282 271
283 272
284 Node* RawMachineAssembler::CallCFunction1(MachineType return_type, 273 Node* RawMachineAssembler::CallCFunction1(MachineType return_type,
285 MachineType arg0_type, Node* function, 274 MachineType arg0_type, Node* function,
286 Node* arg0) { 275 Node* arg0) {
287 MachineSignature::Builder builder(zone(), 1, 1); 276 MachineSignature::Builder builder(zone(), 1, 1);
288 builder.AddReturn(return_type); 277 builder.AddReturn(return_type);
289 builder.AddParam(arg0_type); 278 builder.AddParam(arg0_type);
290 const CallDescriptor* descriptor = 279 const CallDescriptor* descriptor =
291 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build()); 280 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build());
292 281
293 return AddNode(common()->Call(descriptor), function, arg0, graph()->start(), 282 return AddNode(common()->Call(descriptor), function, arg0);
294 graph()->start());
295 } 283 }
296 284
297 285
298 Node* RawMachineAssembler::CallCFunction2(MachineType return_type, 286 Node* RawMachineAssembler::CallCFunction2(MachineType return_type,
299 MachineType arg0_type, 287 MachineType arg0_type,
300 MachineType arg1_type, Node* function, 288 MachineType arg1_type, Node* function,
301 Node* arg0, Node* arg1) { 289 Node* arg0, Node* arg1) {
302 MachineSignature::Builder builder(zone(), 1, 2); 290 MachineSignature::Builder builder(zone(), 1, 2);
303 builder.AddReturn(return_type); 291 builder.AddReturn(return_type);
304 builder.AddParam(arg0_type); 292 builder.AddParam(arg0_type);
305 builder.AddParam(arg1_type); 293 builder.AddParam(arg1_type);
306 const CallDescriptor* descriptor = 294 const CallDescriptor* descriptor =
307 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build()); 295 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build());
308 296
309 return AddNode(common()->Call(descriptor), function, arg0, arg1, 297 return AddNode(common()->Call(descriptor), function, arg0, arg1);
310 graph()->start(), graph()->start());
311 } 298 }
312 299
313 300
314 Node* RawMachineAssembler::CallCFunction8( 301 Node* RawMachineAssembler::CallCFunction8(
315 MachineType return_type, MachineType arg0_type, MachineType arg1_type, 302 MachineType return_type, MachineType arg0_type, MachineType arg1_type,
316 MachineType arg2_type, MachineType arg3_type, MachineType arg4_type, 303 MachineType arg2_type, MachineType arg3_type, MachineType arg4_type,
317 MachineType arg5_type, MachineType arg6_type, MachineType arg7_type, 304 MachineType arg5_type, MachineType arg6_type, MachineType arg7_type,
318 Node* function, Node* arg0, Node* arg1, Node* arg2, Node* arg3, Node* arg4, 305 Node* function, Node* arg0, Node* arg1, Node* arg2, Node* arg3, Node* arg4,
319 Node* arg5, Node* arg6, Node* arg7) { 306 Node* arg5, Node* arg6, Node* arg7) {
320 MachineSignature::Builder builder(zone(), 1, 8); 307 MachineSignature::Builder builder(zone(), 1, 8);
321 builder.AddReturn(return_type); 308 builder.AddReturn(return_type);
322 builder.AddParam(arg0_type); 309 builder.AddParam(arg0_type);
323 builder.AddParam(arg1_type); 310 builder.AddParam(arg1_type);
324 builder.AddParam(arg2_type); 311 builder.AddParam(arg2_type);
325 builder.AddParam(arg3_type); 312 builder.AddParam(arg3_type);
326 builder.AddParam(arg4_type); 313 builder.AddParam(arg4_type);
327 builder.AddParam(arg5_type); 314 builder.AddParam(arg5_type);
328 builder.AddParam(arg6_type); 315 builder.AddParam(arg6_type);
329 builder.AddParam(arg7_type); 316 builder.AddParam(arg7_type);
330 Node* args[] = {function, 317 Node* args[] = {function, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7};
331 arg0,
332 arg1,
333 arg2,
334 arg3,
335 arg4,
336 arg5,
337 arg6,
338 arg7,
339 graph()->start(),
340 graph()->start()};
341 const CallDescriptor* descriptor = 318 const CallDescriptor* descriptor =
342 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build()); 319 Linkage::GetSimplifiedCDescriptor(zone(), builder.Build());
343 return AddNode(common()->Call(descriptor), arraysize(args), args); 320 return AddNode(common()->Call(descriptor), arraysize(args), args);
344 } 321 }
345 322
346 323
347 void RawMachineAssembler::Bind(RawMachineLabel* label) { 324 void RawMachineAssembler::Bind(RawMachineLabel* label) {
348 DCHECK(current_block_ == nullptr); 325 DCHECK(current_block_ == nullptr);
349 DCHECK(!label->bound_); 326 DCHECK(!label->bound_);
350 label->bound_ = true; 327 label->bound_ = true;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 367
391 RawMachineLabel::RawMachineLabel() 368 RawMachineLabel::RawMachineLabel()
392 : block_(NULL), used_(false), bound_(false) {} 369 : block_(NULL), used_(false), bound_(false) {}
393 370
394 371
395 RawMachineLabel::~RawMachineLabel() { DCHECK(bound_ || !used_); } 372 RawMachineLabel::~RawMachineLabel() { DCHECK(bound_ || !used_); }
396 373
397 } // namespace compiler 374 } // namespace compiler
398 } // namespace internal 375 } // namespace internal
399 } // namespace v8 376 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/unittests/compiler/interpreter-assembler-unittest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698