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

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

Issue 855533002: Isolate/Thread split: Isolate -> Zone for LocationSummary. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/intermediate_language.h ('k') | runtime/vm/intermediate_language_arm.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/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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language.h ('k') | runtime/vm/intermediate_language_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698