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

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

Issue 2432903002: Revert "Add DoubleTestOp instruction" (Closed)
Patch Set: 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 | « runtime/vm/constants_dbc.h ('k') | runtime/vm/flow_graph_type_propagator.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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 4
5 #include "vm/flow_graph_inliner.h" 5 #include "vm/flow_graph_inliner.h"
6 6
7 #include "vm/aot_optimizer.h" 7 #include "vm/aot_optimizer.h"
8 #include "vm/block_scheduler.h" 8 #include "vm/block_scheduler.h"
9 #include "vm/branch_optimizer.h" 9 #include "vm/branch_optimizer.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 2384 matching lines...) Expand 10 before | Expand all | Expand 10 after
2395 new(Z) Value(left), 2395 new(Z) Value(left),
2396 new(Z) Value(right), 2396 new(Z) Value(right),
2397 call->deopt_id(), call->token_pos()); 2397 call->deopt_id(), call->token_pos());
2398 flow_graph->AppendTo(*entry, double_bin_op, call->env(), FlowGraph::kValue); 2398 flow_graph->AppendTo(*entry, double_bin_op, call->env(), FlowGraph::kValue);
2399 *last = double_bin_op; 2399 *last = double_bin_op;
2400 2400
2401 return true; 2401 return true;
2402 } 2402 }
2403 2403
2404 2404
2405 static bool InlineDoubleTestOp(FlowGraph* flow_graph,
2406 Instruction* call,
2407 MethodRecognizer::Kind kind,
2408 TargetEntryInstr** entry,
2409 Definition** last) {
2410 if (!CanUnboxDouble()) {
2411 return false;
2412 }
2413 Definition* d = call->ArgumentAt(0);
2414
2415 *entry = new(Z) TargetEntryInstr(flow_graph->allocate_block_id(),
2416 call->GetBlock()->try_index());
2417 (*entry)->InheritDeoptTarget(Z, call);
2418 // Arguments are checked. No need for class check.
2419
2420 DoubleTestOpInstr* double_test_op =
2421 new(Z) DoubleTestOpInstr(kind,
2422 new(Z) Value(d),
2423 call->deopt_id(),
2424 call->token_pos());
2425 flow_graph->AppendTo(
2426 *entry, double_test_op, call->env(), FlowGraph::kValue);
2427 *last = double_test_op;
2428
2429 return true;
2430 }
2431
2432
2433 static bool InlineSmiBitAndFromSmi(FlowGraph* flow_graph, 2405 static bool InlineSmiBitAndFromSmi(FlowGraph* flow_graph,
2434 Instruction* call, 2406 Instruction* call,
2435 TargetEntryInstr** entry, 2407 TargetEntryInstr** entry,
2436 Definition** last) { 2408 Definition** last) {
2437 Definition* left = call->ArgumentAt(0); 2409 Definition* left = call->ArgumentAt(0);
2438 Definition* right = call->ArgumentAt(1); 2410 Definition* right = call->ArgumentAt(1);
2439 2411
2440 *entry = new(Z) TargetEntryInstr(flow_graph->allocate_block_id(), 2412 *entry = new(Z) TargetEntryInstr(flow_graph->allocate_block_id(),
2441 call->GetBlock()->try_index()); 2413 call->GetBlock()->try_index());
2442 (*entry)->InheritDeoptTarget(Z, call); 2414 (*entry)->InheritDeoptTarget(Z, call);
(...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after
3670 return InlineStringBaseCharAt( 3642 return InlineStringBaseCharAt(
3671 flow_graph, call, receiver_cid, entry, last); 3643 flow_graph, call, receiver_cid, entry, last);
3672 case MethodRecognizer::kDoubleAdd: 3644 case MethodRecognizer::kDoubleAdd:
3673 return InlineDoubleOp(flow_graph, Token::kADD, call, entry, last); 3645 return InlineDoubleOp(flow_graph, Token::kADD, call, entry, last);
3674 case MethodRecognizer::kDoubleSub: 3646 case MethodRecognizer::kDoubleSub:
3675 return InlineDoubleOp(flow_graph, Token::kSUB, call, entry, last); 3647 return InlineDoubleOp(flow_graph, Token::kSUB, call, entry, last);
3676 case MethodRecognizer::kDoubleMul: 3648 case MethodRecognizer::kDoubleMul:
3677 return InlineDoubleOp(flow_graph, Token::kMUL, call, entry, last); 3649 return InlineDoubleOp(flow_graph, Token::kMUL, call, entry, last);
3678 case MethodRecognizer::kDoubleDiv: 3650 case MethodRecognizer::kDoubleDiv:
3679 return InlineDoubleOp(flow_graph, Token::kDIV, call, entry, last); 3651 return InlineDoubleOp(flow_graph, Token::kDIV, call, entry, last);
3680 case MethodRecognizer::kDouble_getIsNaN:
3681 case MethodRecognizer::kDouble_getIsInfinite:
3682 return InlineDoubleTestOp(flow_graph, call, kind, entry, last);
3683 case MethodRecognizer::kGrowableArraySetData: 3652 case MethodRecognizer::kGrowableArraySetData:
3684 ASSERT(receiver_cid == kGrowableObjectArrayCid); 3653 ASSERT(receiver_cid == kGrowableObjectArrayCid);
3685 ASSERT(ic_data.NumberOfChecks() == 1); 3654 ASSERT(ic_data.NumberOfChecks() == 1);
3686 return InlineGrowableArraySetter( 3655 return InlineGrowableArraySetter(
3687 flow_graph, GrowableObjectArray::data_offset(), kEmitStoreBarrier, 3656 flow_graph, GrowableObjectArray::data_offset(), kEmitStoreBarrier,
3688 call, entry, last); 3657 call, entry, last);
3689 case MethodRecognizer::kGrowableArraySetLength: 3658 case MethodRecognizer::kGrowableArraySetLength:
3690 ASSERT(receiver_cid == kGrowableObjectArrayCid); 3659 ASSERT(receiver_cid == kGrowableObjectArrayCid);
3691 ASSERT(ic_data.NumberOfChecks() == 1); 3660 ASSERT(ic_data.NumberOfChecks() == 1);
3692 return InlineGrowableArraySetter( 3661 return InlineGrowableArraySetter(
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
3836 return true; 3805 return true;
3837 } 3806 }
3838 3807
3839 default: 3808 default:
3840 return false; 3809 return false;
3841 } 3810 }
3842 } 3811 }
3843 3812
3844 3813
3845 } // namespace dart 3814 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/constants_dbc.h ('k') | runtime/vm/flow_graph_type_propagator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698