| OLD | NEW |
| 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/intermediate_language.h" | 5 #include "vm/intermediate_language.h" |
| 6 | 6 |
| 7 #include "vm/bit_vector.h" | 7 #include "vm/bit_vector.h" |
| 8 #include "vm/constant_propagator.h" | 8 #include "vm/constant_propagator.h" |
| 9 #include "vm/cpu.h" | 9 #include "vm/cpu.h" |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 1926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 } | 1937 } |
| 1938 return this; | 1938 return this; |
| 1939 } | 1939 } |
| 1940 | 1940 |
| 1941 | 1941 |
| 1942 Definition* InstantiateTypeArgumentsInstr::Canonicalize(FlowGraph* flow_graph) { | 1942 Definition* InstantiateTypeArgumentsInstr::Canonicalize(FlowGraph* flow_graph) { |
| 1943 return (FLAG_enable_type_checks || HasUses()) ? this : NULL; | 1943 return (FLAG_enable_type_checks || HasUses()) ? this : NULL; |
| 1944 } | 1944 } |
| 1945 | 1945 |
| 1946 | 1946 |
| 1947 LocationSummary* DebugStepCheckInstr::MakeLocationSummary(Isolate* isolate, | 1947 LocationSummary* DebugStepCheckInstr::MakeLocationSummary(Zone* zone, |
| 1948 bool opt) const { | 1948 bool opt) const { |
| 1949 const intptr_t kNumInputs = 0; | 1949 const intptr_t kNumInputs = 0; |
| 1950 const intptr_t kNumTemps = 0; | 1950 const intptr_t kNumTemps = 0; |
| 1951 LocationSummary* locs = new(isolate) LocationSummary( | 1951 LocationSummary* locs = new(zone) LocationSummary( |
| 1952 isolate, kNumInputs, kNumTemps, LocationSummary::kCall); | 1952 zone, kNumInputs, kNumTemps, LocationSummary::kCall); |
| 1953 return locs; | 1953 return locs; |
| 1954 } | 1954 } |
| 1955 | 1955 |
| 1956 | 1956 |
| 1957 Instruction* DebugStepCheckInstr::Canonicalize(FlowGraph* flow_graph) { | 1957 Instruction* DebugStepCheckInstr::Canonicalize(FlowGraph* flow_graph) { |
| 1958 return NULL; | 1958 return NULL; |
| 1959 } | 1959 } |
| 1960 | 1960 |
| 1961 | 1961 |
| 1962 static bool HasTryBlockUse(Value* use_list) { | 1962 static bool HasTryBlockUse(Value* use_list) { |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2537 } | 2537 } |
| 2538 | 2538 |
| 2539 | 2539 |
| 2540 // Shared code generation methods (EmitNativeCode and | 2540 // Shared code generation methods (EmitNativeCode and |
| 2541 // MakeLocationSummary). Only assembly code that can be shared across all | 2541 // MakeLocationSummary). Only assembly code that can be shared across all |
| 2542 // architectures can be used. Machine specific register allocation and code | 2542 // architectures can be used. Machine specific register allocation and code |
| 2543 // generation is located in intermediate_language_<arch>.cc | 2543 // generation is located in intermediate_language_<arch>.cc |
| 2544 | 2544 |
| 2545 #define __ compiler->assembler()-> | 2545 #define __ compiler->assembler()-> |
| 2546 | 2546 |
| 2547 LocationSummary* GraphEntryInstr::MakeLocationSummary(Isolate* isolate, | 2547 LocationSummary* GraphEntryInstr::MakeLocationSummary(Zone* zone, |
| 2548 bool optimizing) const { | 2548 bool optimizing) const { |
| 2549 UNREACHABLE(); | 2549 UNREACHABLE(); |
| 2550 return NULL; | 2550 return NULL; |
| 2551 } | 2551 } |
| 2552 | 2552 |
| 2553 | 2553 |
| 2554 LocationSummary* JoinEntryInstr::MakeLocationSummary(Isolate* isolate, | 2554 LocationSummary* JoinEntryInstr::MakeLocationSummary(Zone* zone, |
| 2555 bool optimizing) const { | 2555 bool optimizing) const { |
| 2556 UNREACHABLE(); | 2556 UNREACHABLE(); |
| 2557 return NULL; | 2557 return NULL; |
| 2558 } | 2558 } |
| 2559 | 2559 |
| 2560 | 2560 |
| 2561 void JoinEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2561 void JoinEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2562 __ Bind(compiler->GetJumpLabel(this)); | 2562 __ Bind(compiler->GetJumpLabel(this)); |
| 2563 if (!compiler->is_optimizing()) { | 2563 if (!compiler->is_optimizing()) { |
| 2564 compiler->AddCurrentDescriptor(RawPcDescriptors::kDeopt, | 2564 compiler->AddCurrentDescriptor(RawPcDescriptors::kDeopt, |
| 2565 GetDeoptId(), | 2565 GetDeoptId(), |
| 2566 Scanner::kNoSourcePos); | 2566 Scanner::kNoSourcePos); |
| 2567 } | 2567 } |
| 2568 if (HasParallelMove()) { | 2568 if (HasParallelMove()) { |
| 2569 compiler->parallel_move_resolver()->EmitNativeCode(parallel_move()); | 2569 compiler->parallel_move_resolver()->EmitNativeCode(parallel_move()); |
| 2570 } | 2570 } |
| 2571 } | 2571 } |
| 2572 | 2572 |
| 2573 | 2573 |
| 2574 LocationSummary* TargetEntryInstr::MakeLocationSummary(Isolate* isolate, | 2574 LocationSummary* TargetEntryInstr::MakeLocationSummary(Zone* zone, |
| 2575 bool optimizing) const { | 2575 bool optimizing) const { |
| 2576 UNREACHABLE(); | 2576 UNREACHABLE(); |
| 2577 return NULL; | 2577 return NULL; |
| 2578 } | 2578 } |
| 2579 | 2579 |
| 2580 | 2580 |
| 2581 void TargetEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2581 void TargetEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2582 __ Bind(compiler->GetJumpLabel(this)); | 2582 __ Bind(compiler->GetJumpLabel(this)); |
| 2583 if (!compiler->is_optimizing()) { | 2583 if (!compiler->is_optimizing()) { |
| 2584 if (compiler->NeedsEdgeCounter(this)) { | 2584 if (compiler->NeedsEdgeCounter(this)) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2626 } | 2626 } |
| 2627 | 2627 |
| 2628 ASSERT(offset > 0); | 2628 ASSERT(offset > 0); |
| 2629 offset -= Assembler::EntryPointToPcMarkerOffset(); | 2629 offset -= Assembler::EntryPointToPcMarkerOffset(); |
| 2630 offsets_.SetInt32(i * element_size, offset); | 2630 offsets_.SetInt32(i * element_size, offset); |
| 2631 } | 2631 } |
| 2632 } | 2632 } |
| 2633 | 2633 |
| 2634 | 2634 |
| 2635 LocationSummary* IndirectEntryInstr::MakeLocationSummary( | 2635 LocationSummary* IndirectEntryInstr::MakeLocationSummary( |
| 2636 Isolate* isolate, bool optimizing) const { | 2636 Zone* zone, bool optimizing) const { |
| 2637 return JoinEntryInstr::MakeLocationSummary(isolate, optimizing); | 2637 return JoinEntryInstr::MakeLocationSummary(zone, optimizing); |
| 2638 } | 2638 } |
| 2639 | 2639 |
| 2640 | 2640 |
| 2641 void IndirectEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2641 void IndirectEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2642 JoinEntryInstr::EmitNativeCode(compiler); | 2642 JoinEntryInstr::EmitNativeCode(compiler); |
| 2643 } | 2643 } |
| 2644 | 2644 |
| 2645 | 2645 |
| 2646 LocationSummary* PhiInstr::MakeLocationSummary(Isolate* isolate, | 2646 LocationSummary* PhiInstr::MakeLocationSummary(Zone* zone, |
| 2647 bool optimizing) const { | 2647 bool optimizing) const { |
| 2648 UNREACHABLE(); | 2648 UNREACHABLE(); |
| 2649 return NULL; | 2649 return NULL; |
| 2650 } | 2650 } |
| 2651 | 2651 |
| 2652 | 2652 |
| 2653 void PhiInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2653 void PhiInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2654 UNREACHABLE(); | 2654 UNREACHABLE(); |
| 2655 } | 2655 } |
| 2656 | 2656 |
| 2657 | 2657 |
| 2658 LocationSummary* RedefinitionInstr::MakeLocationSummary(Isolate* isolate, | 2658 LocationSummary* RedefinitionInstr::MakeLocationSummary(Zone* zone, |
| 2659 bool optimizing) const { | 2659 bool optimizing) const { |
| 2660 UNREACHABLE(); | 2660 UNREACHABLE(); |
| 2661 return NULL; | 2661 return NULL; |
| 2662 } | 2662 } |
| 2663 | 2663 |
| 2664 | 2664 |
| 2665 void RedefinitionInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2665 void RedefinitionInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2666 UNREACHABLE(); | 2666 UNREACHABLE(); |
| 2667 } | 2667 } |
| 2668 | 2668 |
| 2669 | 2669 |
| 2670 LocationSummary* ParameterInstr::MakeLocationSummary(Isolate* isolate, | 2670 LocationSummary* ParameterInstr::MakeLocationSummary(Zone* zone, |
| 2671 bool optimizing) const { | 2671 bool optimizing) const { |
| 2672 UNREACHABLE(); | 2672 UNREACHABLE(); |
| 2673 return NULL; | 2673 return NULL; |
| 2674 } | 2674 } |
| 2675 | 2675 |
| 2676 | 2676 |
| 2677 void ParameterInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2677 void ParameterInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2678 UNREACHABLE(); | 2678 UNREACHABLE(); |
| 2679 } | 2679 } |
| 2680 | 2680 |
| 2681 | 2681 |
| 2682 bool ParallelMoveInstr::IsRedundant() const { | 2682 bool ParallelMoveInstr::IsRedundant() const { |
| 2683 for (intptr_t i = 0; i < moves_.length(); i++) { | 2683 for (intptr_t i = 0; i < moves_.length(); i++) { |
| 2684 if (!moves_[i]->IsRedundant()) { | 2684 if (!moves_[i]->IsRedundant()) { |
| 2685 return false; | 2685 return false; |
| 2686 } | 2686 } |
| 2687 } | 2687 } |
| 2688 return true; | 2688 return true; |
| 2689 } | 2689 } |
| 2690 | 2690 |
| 2691 | 2691 |
| 2692 LocationSummary* ParallelMoveInstr::MakeLocationSummary(Isolate* isolate, | 2692 LocationSummary* ParallelMoveInstr::MakeLocationSummary(Zone* zone, |
| 2693 bool optimizing) const { | 2693 bool optimizing) const { |
| 2694 return NULL; | 2694 return NULL; |
| 2695 } | 2695 } |
| 2696 | 2696 |
| 2697 | 2697 |
| 2698 void ParallelMoveInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2698 void ParallelMoveInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2699 UNREACHABLE(); | 2699 UNREACHABLE(); |
| 2700 } | 2700 } |
| 2701 | 2701 |
| 2702 | 2702 |
| 2703 LocationSummary* ConstraintInstr::MakeLocationSummary(Isolate* isolate, | 2703 LocationSummary* ConstraintInstr::MakeLocationSummary(Zone* zone, |
| 2704 bool optimizing) const { | 2704 bool optimizing) const { |
| 2705 UNREACHABLE(); | 2705 UNREACHABLE(); |
| 2706 return NULL; | 2706 return NULL; |
| 2707 } | 2707 } |
| 2708 | 2708 |
| 2709 | 2709 |
| 2710 void ConstraintInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2710 void ConstraintInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2711 UNREACHABLE(); | 2711 UNREACHABLE(); |
| 2712 } | 2712 } |
| 2713 | 2713 |
| 2714 | 2714 |
| 2715 LocationSummary* MaterializeObjectInstr::MakeLocationSummary( | 2715 LocationSummary* MaterializeObjectInstr::MakeLocationSummary( |
| 2716 Isolate* isolate, bool optimizing) const { | 2716 Zone* zone, bool optimizing) const { |
| 2717 UNREACHABLE(); | 2717 UNREACHABLE(); |
| 2718 return NULL; | 2718 return NULL; |
| 2719 } | 2719 } |
| 2720 | 2720 |
| 2721 | 2721 |
| 2722 void MaterializeObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2722 void MaterializeObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2723 UNREACHABLE(); | 2723 UNREACHABLE(); |
| 2724 } | 2724 } |
| 2725 | 2725 |
| 2726 | 2726 |
| 2727 // This function should be kept in sync with | 2727 // This function should be kept in sync with |
| 2728 // FlowGraphCompiler::SlowPathEnvironmentFor(). | 2728 // FlowGraphCompiler::SlowPathEnvironmentFor(). |
| 2729 void MaterializeObjectInstr::RemapRegisters(intptr_t* cpu_reg_slots, | 2729 void MaterializeObjectInstr::RemapRegisters(intptr_t* cpu_reg_slots, |
| 2730 intptr_t* fpu_reg_slots) { | 2730 intptr_t* fpu_reg_slots) { |
| 2731 if (registers_remapped_) { | 2731 if (registers_remapped_) { |
| 2732 return; | 2732 return; |
| 2733 } | 2733 } |
| 2734 registers_remapped_ = true; | 2734 registers_remapped_ = true; |
| 2735 | 2735 |
| 2736 for (intptr_t i = 0; i < InputCount(); i++) { | 2736 for (intptr_t i = 0; i < InputCount(); i++) { |
| 2737 locations_[i] = LocationAt(i).RemapForSlowPath( | 2737 locations_[i] = LocationAt(i).RemapForSlowPath( |
| 2738 InputAt(i)->definition(), cpu_reg_slots, fpu_reg_slots); | 2738 InputAt(i)->definition(), cpu_reg_slots, fpu_reg_slots); |
| 2739 } | 2739 } |
| 2740 } | 2740 } |
| 2741 | 2741 |
| 2742 | 2742 |
| 2743 LocationSummary* CurrentContextInstr::MakeLocationSummary(Isolate* isolate, | 2743 LocationSummary* CurrentContextInstr::MakeLocationSummary(Zone* zone, |
| 2744 bool opt) const { | 2744 bool opt) const { |
| 2745 // Only appears in initial definitions, never in normal code. | 2745 // Only appears in initial definitions, never in normal code. |
| 2746 UNREACHABLE(); | 2746 UNREACHABLE(); |
| 2747 return NULL; | 2747 return NULL; |
| 2748 } | 2748 } |
| 2749 | 2749 |
| 2750 | 2750 |
| 2751 void CurrentContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2751 void CurrentContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2752 // Only appears in initial definitions, never in normal code. | 2752 // Only appears in initial definitions, never in normal code. |
| 2753 UNREACHABLE(); | 2753 UNREACHABLE(); |
| 2754 } | 2754 } |
| 2755 | 2755 |
| 2756 | 2756 |
| 2757 LocationSummary* PushTempInstr::MakeLocationSummary(Isolate* isolate, | 2757 LocationSummary* PushTempInstr::MakeLocationSummary(Zone* zone, |
| 2758 bool optimizing) const { | 2758 bool optimizing) const { |
| 2759 return LocationSummary::Make(isolate, | 2759 return LocationSummary::Make(zone, |
| 2760 1, | 2760 1, |
| 2761 Location::NoLocation(), | 2761 Location::NoLocation(), |
| 2762 LocationSummary::kNoCall); | 2762 LocationSummary::kNoCall); |
| 2763 } | 2763 } |
| 2764 | 2764 |
| 2765 | 2765 |
| 2766 void PushTempInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2766 void PushTempInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2767 ASSERT(!compiler->is_optimizing()); | 2767 ASSERT(!compiler->is_optimizing()); |
| 2768 // Nothing to do. | 2768 // Nothing to do. |
| 2769 } | 2769 } |
| 2770 | 2770 |
| 2771 | 2771 |
| 2772 LocationSummary* DropTempsInstr::MakeLocationSummary(Isolate* isolate, | 2772 LocationSummary* DropTempsInstr::MakeLocationSummary(Zone* zone, |
| 2773 bool optimizing) const { | 2773 bool optimizing) const { |
| 2774 return (InputCount() == 1) | 2774 return (InputCount() == 1) |
| 2775 ? LocationSummary::Make(isolate, | 2775 ? LocationSummary::Make(zone, |
| 2776 1, | 2776 1, |
| 2777 Location::SameAsFirstInput(), | 2777 Location::SameAsFirstInput(), |
| 2778 LocationSummary::kNoCall) | 2778 LocationSummary::kNoCall) |
| 2779 : LocationSummary::Make(isolate, | 2779 : LocationSummary::Make(zone, |
| 2780 0, | 2780 0, |
| 2781 Location::NoLocation(), | 2781 Location::NoLocation(), |
| 2782 LocationSummary::kNoCall); | 2782 LocationSummary::kNoCall); |
| 2783 } | 2783 } |
| 2784 | 2784 |
| 2785 | 2785 |
| 2786 void DropTempsInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2786 void DropTempsInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2787 ASSERT(!compiler->is_optimizing()); | 2787 ASSERT(!compiler->is_optimizing()); |
| 2788 // Assert that register assignment is correct. | 2788 // Assert that register assignment is correct. |
| 2789 ASSERT((InputCount() == 0) || (locs()->out(0).reg() == locs()->in(0).reg())); | 2789 ASSERT((InputCount() == 0) || (locs()->out(0).reg() == locs()->in(0).reg())); |
| 2790 __ Drop(num_temps()); | 2790 __ Drop(num_temps()); |
| 2791 } | 2791 } |
| 2792 | 2792 |
| 2793 | 2793 |
| 2794 StrictCompareInstr::StrictCompareInstr(intptr_t token_pos, | 2794 StrictCompareInstr::StrictCompareInstr(intptr_t token_pos, |
| 2795 Token::Kind kind, | 2795 Token::Kind kind, |
| 2796 Value* left, | 2796 Value* left, |
| 2797 Value* right, | 2797 Value* right, |
| 2798 bool needs_number_check) | 2798 bool needs_number_check) |
| 2799 : ComparisonInstr(token_pos, | 2799 : ComparisonInstr(token_pos, |
| 2800 kind, | 2800 kind, |
| 2801 left, | 2801 left, |
| 2802 right, | 2802 right, |
| 2803 Isolate::Current()->GetNextDeoptId()), | 2803 Isolate::Current()->GetNextDeoptId()), |
| 2804 needs_number_check_(needs_number_check) { | 2804 needs_number_check_(needs_number_check) { |
| 2805 ASSERT((kind == Token::kEQ_STRICT) || (kind == Token::kNE_STRICT)); | 2805 ASSERT((kind == Token::kEQ_STRICT) || (kind == Token::kNE_STRICT)); |
| 2806 } | 2806 } |
| 2807 | 2807 |
| 2808 | 2808 |
| 2809 LocationSummary* InstanceCallInstr::MakeLocationSummary(Isolate* isolate, | 2809 LocationSummary* InstanceCallInstr::MakeLocationSummary(Zone* zone, |
| 2810 bool optimizing) const { | 2810 bool optimizing) const { |
| 2811 return MakeCallSummary(isolate); | 2811 return MakeCallSummary(zone); |
| 2812 } | 2812 } |
| 2813 | 2813 |
| 2814 | 2814 |
| 2815 static uword TwoArgsSmiOpInlineCacheEntry(Token::Kind kind) { | 2815 static uword TwoArgsSmiOpInlineCacheEntry(Token::Kind kind) { |
| 2816 if (!FLAG_two_args_smi_icd) { | 2816 if (!FLAG_two_args_smi_icd) { |
| 2817 return 0; | 2817 return 0; |
| 2818 } | 2818 } |
| 2819 StubCode* stub_code = Isolate::Current()->stub_code(); | 2819 StubCode* stub_code = Isolate::Current()->stub_code(); |
| 2820 switch (kind) { | 2820 switch (kind) { |
| 2821 case Token::kADD: return stub_code->SmiAddInlineCacheEntryPoint(); | 2821 case Token::kADD: return stub_code->SmiAddInlineCacheEntryPoint(); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2930 const Function& target = Function::Handle(ic_data().GetTargetAt(i)); | 2930 const Function& target = Function::Handle(ic_data().GetTargetAt(i)); |
| 2931 if (!target.IsNoSuchMethodDispatcher() && | 2931 if (!target.IsNoSuchMethodDispatcher() && |
| 2932 !target.IsInvokeFieldDispatcher()) { | 2932 !target.IsInvokeFieldDispatcher()) { |
| 2933 return false; | 2933 return false; |
| 2934 } | 2934 } |
| 2935 } | 2935 } |
| 2936 return true; | 2936 return true; |
| 2937 } | 2937 } |
| 2938 | 2938 |
| 2939 | 2939 |
| 2940 LocationSummary* StaticCallInstr::MakeLocationSummary(Isolate* isolate, | 2940 LocationSummary* StaticCallInstr::MakeLocationSummary(Zone* zone, |
| 2941 bool optimizing) const { | 2941 bool optimizing) const { |
| 2942 return MakeCallSummary(isolate); | 2942 return MakeCallSummary(zone); |
| 2943 } | 2943 } |
| 2944 | 2944 |
| 2945 | 2945 |
| 2946 void StaticCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2946 void StaticCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2947 const ICData* call_ic_data = NULL; | 2947 const ICData* call_ic_data = NULL; |
| 2948 if (!FLAG_propagate_ic_data || !compiler->is_optimizing()) { | 2948 if (!FLAG_propagate_ic_data || !compiler->is_optimizing()) { |
| 2949 const Array& arguments_descriptor = | 2949 const Array& arguments_descriptor = |
| 2950 Array::Handle(ArgumentsDescriptor::New(ArgumentCount(), | 2950 Array::Handle(ArgumentsDescriptor::New(ArgumentCount(), |
| 2951 argument_names())); | 2951 argument_names())); |
| 2952 MethodRecognizer::Kind recognized_kind = | 2952 MethodRecognizer::Kind recognized_kind = |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2981 void AssertAssignableInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2981 void AssertAssignableInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2982 compiler->GenerateAssertAssignable(token_pos(), | 2982 compiler->GenerateAssertAssignable(token_pos(), |
| 2983 deopt_id(), | 2983 deopt_id(), |
| 2984 dst_type(), | 2984 dst_type(), |
| 2985 dst_name(), | 2985 dst_name(), |
| 2986 locs()); | 2986 locs()); |
| 2987 ASSERT(locs()->in(0).reg() == locs()->out(0).reg()); | 2987 ASSERT(locs()->in(0).reg() == locs()->out(0).reg()); |
| 2988 } | 2988 } |
| 2989 | 2989 |
| 2990 | 2990 |
| 2991 LocationSummary* DeoptimizeInstr::MakeLocationSummary(Isolate* isolate, | 2991 LocationSummary* DeoptimizeInstr::MakeLocationSummary(Zone* zone, |
| 2992 bool opt) const { | 2992 bool opt) const { |
| 2993 return new(isolate) LocationSummary(isolate, 0, 0, LocationSummary::kNoCall); | 2993 return new(zone) LocationSummary(zone, 0, 0, LocationSummary::kNoCall); |
| 2994 } | 2994 } |
| 2995 | 2995 |
| 2996 | 2996 |
| 2997 void DeoptimizeInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2997 void DeoptimizeInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2998 __ Jump(compiler->AddDeoptStub(deopt_id(), deopt_reason_)); | 2998 __ Jump(compiler->AddDeoptStub(deopt_id(), deopt_reason_)); |
| 2999 } | 2999 } |
| 3000 | 3000 |
| 3001 | 3001 |
| 3002 Environment* Environment::From(Isolate* isolate, | 3002 Environment* Environment::From(Isolate* isolate, |
| 3003 const GrowableArray<Definition*>& definitions, | 3003 const GrowableArray<Definition*>& definitions, |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3490 case Token::kTRUNCDIV: return 0; | 3490 case Token::kTRUNCDIV: return 0; |
| 3491 case Token::kMOD: return 1; | 3491 case Token::kMOD: return 1; |
| 3492 default: UNIMPLEMENTED(); return -1; | 3492 default: UNIMPLEMENTED(); return -1; |
| 3493 } | 3493 } |
| 3494 } | 3494 } |
| 3495 | 3495 |
| 3496 | 3496 |
| 3497 #undef __ | 3497 #undef __ |
| 3498 | 3498 |
| 3499 } // namespace dart | 3499 } // namespace dart |
| OLD | NEW |