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

Side by Side Diff: runtime/vm/intrinsifier.cc

Issue 2794583002: Revert "Reland "VM: Handle null-comparisons in the flow graph type propagation"" (Closed)
Patch Set: Created 3 years, 8 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 | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/object.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 // Class for intrinsifying functions. 4 // Class for intrinsifying functions.
5 5
6 #include "vm/assembler.h" 6 #include "vm/assembler.h"
7 #include "vm/compiler.h" 7 #include "vm/compiler.h"
8 #include "vm/cpu.h" 8 #include "vm/cpu.h"
9 #include "vm/flags.h" 9 #include "vm/flags.h"
10 #include "vm/flow_graph.h" 10 #include "vm/flow_graph.h"
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 278
279 279
280 // Notes about the graph intrinsics: 280 // Notes about the graph intrinsics:
281 // 281 //
282 // IR instructions which would jump to a deoptimization sequence on failure 282 // IR instructions which would jump to a deoptimization sequence on failure
283 // instead branch to the intrinsic slow path. 283 // instead branch to the intrinsic slow path.
284 // 284 //
285 class BlockBuilder : public ValueObject { 285 class BlockBuilder : public ValueObject {
286 public: 286 public:
287 BlockBuilder(FlowGraph* flow_graph, TargetEntryInstr* entry) 287 BlockBuilder(FlowGraph* flow_graph, TargetEntryInstr* entry)
288 : flow_graph_(flow_graph), 288 : flow_graph_(flow_graph), entry_(entry), current_(entry) {}
289 entry_(entry),
290 current_(entry),
291 empty_env_(new Environment(0,
292 0,
293 Thread::kNoDeoptId,
294 flow_graph->parsed_function(),
295 NULL)) {}
296 289
297 Definition* AddToInitialDefinitions(Definition* def) { 290 Definition* AddToInitialDefinitions(Definition* def) {
298 def->set_ssa_temp_index(flow_graph_->alloc_ssa_temp_index()); 291 def->set_ssa_temp_index(flow_graph_->alloc_ssa_temp_index());
299 flow_graph_->AddToInitialDefinitions(def); 292 flow_graph_->AddToInitialDefinitions(def);
300 return def; 293 return def;
301 } 294 }
302 295
303 Definition* AddDefinition(Definition* def) { 296 Definition* AddDefinition(Definition* def) {
304 def->set_ssa_temp_index(flow_graph_->alloc_ssa_temp_index()); 297 def->set_ssa_temp_index(flow_graph_->alloc_ssa_temp_index());
305 AddInstruction(def); 298 current_ = current_->AppendInstruction(def);
306 return def; 299 return def;
307 } 300 }
308 301
309 Instruction* AddInstruction(Instruction* instr) { 302 Instruction* AddInstruction(Instruction* instr) {
310 if (instr->ComputeCanDeoptimize()) {
311 // Since we use the presence of an environment to determine if an
312 // instructions can deoptimize, we need an empty enviroment for
313 // instructions that "deoptimize" to the intrinsic fall-through code.
314 instr->SetEnvironment(empty_env_);
315 }
316 current_ = current_->AppendInstruction(instr); 303 current_ = current_->AppendInstruction(instr);
317 return instr; 304 return instr;
318 } 305 }
319 306
320 void AddIntrinsicReturn(Value* value) { 307 void AddIntrinsicReturn(Value* value) {
321 ReturnInstr* instr = new ReturnInstr(TokenPos(), value); 308 ReturnInstr* instr = new ReturnInstr(TokenPos(), value);
322 AddInstruction(instr); 309 AddInstruction(instr);
323 entry_->set_last_instruction(instr); 310 entry_->set_last_instruction(instr);
324 } 311 }
325 312
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 new InvokeMathCFunctionInstr(args, Thread::kNoDeoptId, recognized_kind, 353 new InvokeMathCFunctionInstr(args, Thread::kNoDeoptId, recognized_kind,
367 TokenPos()); 354 TokenPos());
368 AddDefinition(invoke_math_c_function); 355 AddDefinition(invoke_math_c_function);
369 return invoke_math_c_function; 356 return invoke_math_c_function;
370 } 357 }
371 358
372 359
373 FlowGraph* flow_graph_; 360 FlowGraph* flow_graph_;
374 BlockEntryInstr* entry_; 361 BlockEntryInstr* entry_;
375 Instruction* current_; 362 Instruction* current_;
376 Environment* empty_env_;
377 }; 363 };
378 364
379 365
380 static void PrepareIndexedOp(BlockBuilder* builder, 366 static void PrepareIndexedOp(BlockBuilder* builder,
381 Definition* array, 367 Definition* array,
382 Definition* index, 368 Definition* index,
383 intptr_t length_offset) { 369 intptr_t length_offset) {
384 Definition* length = builder->AddDefinition(new LoadFieldInstr( 370 Definition* length = builder->AddDefinition(new LoadFieldInstr(
385 new Value(array), length_offset, Type::ZoneHandle(Type::SmiType()), 371 new Value(array), length_offset, Type::ZoneHandle(Type::SmiType()),
386 TokenPosition::kNoSource)); 372 TokenPosition::kNoSource));
(...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 } 1167 }
1182 1168
1183 1169
1184 void Intrinsifier::RegExp_ExecuteMatchSticky(Assembler* assembler) { 1170 void Intrinsifier::RegExp_ExecuteMatchSticky(Assembler* assembler) {
1185 IntrinsifyRegExpExecuteMatch(assembler, /*sticky=*/true); 1171 IntrinsifyRegExpExecuteMatch(assembler, /*sticky=*/true);
1186 } 1172 }
1187 #endif // !defined(TARGET_ARCH_DBC) 1173 #endif // !defined(TARGET_ARCH_DBC)
1188 1174
1189 1175
1190 } // namespace dart 1176 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698