| 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 #ifndef RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ | 5 #ifndef RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ |
| 6 #define RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ | 6 #define RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ |
| 7 | 7 |
| 8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
| 9 #include "vm/ast.h" | 9 #include "vm/ast.h" |
| 10 #include "vm/flags.h" | 10 #include "vm/flags.h" |
| (...skipping 2836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2847 virtual EffectSet Effects() const { return EffectSet::All(); } | 2847 virtual EffectSet Effects() const { return EffectSet::All(); } |
| 2848 | 2848 |
| 2849 PRINT_OPERANDS_TO_SUPPORT | 2849 PRINT_OPERANDS_TO_SUPPORT |
| 2850 | 2850 |
| 2851 private: | 2851 private: |
| 2852 DISALLOW_COPY_AND_ASSIGN(ClosureCallInstr); | 2852 DISALLOW_COPY_AND_ASSIGN(ClosureCallInstr); |
| 2853 }; | 2853 }; |
| 2854 | 2854 |
| 2855 class InstanceCallInstr : public TemplateDartCall<0> { | 2855 class InstanceCallInstr : public TemplateDartCall<0> { |
| 2856 public: | 2856 public: |
| 2857 InstanceCallInstr(TokenPosition token_pos, | 2857 InstanceCallInstr( |
| 2858 const String& function_name, | 2858 TokenPosition token_pos, |
| 2859 Token::Kind token_kind, | 2859 const String& function_name, |
| 2860 ZoneGrowableArray<PushArgumentInstr*>* arguments, | 2860 Token::Kind token_kind, |
| 2861 intptr_t type_args_len, | 2861 ZoneGrowableArray<PushArgumentInstr*>* arguments, |
| 2862 const Array& argument_names, | 2862 intptr_t type_args_len, |
| 2863 intptr_t checked_argument_count, | 2863 const Array& argument_names, |
| 2864 const ZoneGrowableArray<const ICData*>& ic_data_array, | 2864 intptr_t checked_argument_count, |
| 2865 intptr_t deopt_id) | 2865 const ZoneGrowableArray<const ICData*>& ic_data_array, |
| 2866 intptr_t deopt_id, |
| 2867 const Function& interface_target = Function::null_function()) |
| 2866 : TemplateDartCall(deopt_id, | 2868 : TemplateDartCall(deopt_id, |
| 2867 type_args_len, | 2869 type_args_len, |
| 2868 argument_names, | 2870 argument_names, |
| 2869 arguments, | 2871 arguments, |
| 2870 token_pos), | 2872 token_pos), |
| 2871 ic_data_(NULL), | 2873 ic_data_(NULL), |
| 2872 function_name_(function_name), | 2874 function_name_(function_name), |
| 2873 token_kind_(token_kind), | 2875 token_kind_(token_kind), |
| 2874 checked_argument_count_(checked_argument_count), | 2876 checked_argument_count_(checked_argument_count), |
| 2877 interface_target_(interface_target), |
| 2875 has_unique_selector_(false) { | 2878 has_unique_selector_(false) { |
| 2876 ic_data_ = GetICData(ic_data_array); | 2879 ic_data_ = GetICData(ic_data_array); |
| 2877 ASSERT(function_name.IsNotTemporaryScopedHandle()); | 2880 ASSERT(function_name.IsNotTemporaryScopedHandle()); |
| 2881 ASSERT(interface_target_.IsNotTemporaryScopedHandle()); |
| 2878 ASSERT(!arguments->is_empty()); | 2882 ASSERT(!arguments->is_empty()); |
| 2879 ASSERT(Token::IsBinaryOperator(token_kind) || | 2883 ASSERT(Token::IsBinaryOperator(token_kind) || |
| 2880 Token::IsEqualityOperator(token_kind) || | 2884 Token::IsEqualityOperator(token_kind) || |
| 2881 Token::IsRelationalOperator(token_kind) || | 2885 Token::IsRelationalOperator(token_kind) || |
| 2882 Token::IsUnaryOperator(token_kind) || | 2886 Token::IsUnaryOperator(token_kind) || |
| 2883 Token::IsIndexOperator(token_kind) || | 2887 Token::IsIndexOperator(token_kind) || |
| 2884 Token::IsTypeTestOperator(token_kind) || | 2888 Token::IsTypeTestOperator(token_kind) || |
| 2885 Token::IsTypeCastOperator(token_kind) || token_kind == Token::kGET || | 2889 Token::IsTypeCastOperator(token_kind) || token_kind == Token::kGET || |
| 2886 token_kind == Token::kSET || token_kind == Token::kILLEGAL); | 2890 token_kind == Token::kSET || token_kind == Token::kILLEGAL); |
| 2887 } | 2891 } |
| 2888 | 2892 |
| 2889 DECLARE_INSTRUCTION(InstanceCall) | 2893 DECLARE_INSTRUCTION(InstanceCall) |
| 2890 | 2894 |
| 2891 const ICData* ic_data() const { return ic_data_; } | 2895 const ICData* ic_data() const { return ic_data_; } |
| 2892 bool HasICData() const { return (ic_data() != NULL) && !ic_data()->IsNull(); } | 2896 bool HasICData() const { return (ic_data() != NULL) && !ic_data()->IsNull(); } |
| 2893 | 2897 |
| 2894 // ICData can be replaced by optimizer. | 2898 // ICData can be replaced by optimizer. |
| 2895 void set_ic_data(const ICData* value) { ic_data_ = value; } | 2899 void set_ic_data(const ICData* value) { ic_data_ = value; } |
| 2896 | 2900 |
| 2897 const String& function_name() const { return function_name_; } | 2901 const String& function_name() const { return function_name_; } |
| 2898 Token::Kind token_kind() const { return token_kind_; } | 2902 Token::Kind token_kind() const { return token_kind_; } |
| 2899 intptr_t checked_argument_count() const { return checked_argument_count_; } | 2903 intptr_t checked_argument_count() const { return checked_argument_count_; } |
| 2904 const Function& interface_target() const { return interface_target_; } |
| 2900 | 2905 |
| 2901 bool has_unique_selector() const { return has_unique_selector_; } | 2906 bool has_unique_selector() const { return has_unique_selector_; } |
| 2902 void set_has_unique_selector(bool b) { has_unique_selector_ = b; } | 2907 void set_has_unique_selector(bool b) { has_unique_selector_ = b; } |
| 2903 | 2908 |
| 2904 virtual intptr_t CallCount() const { | 2909 virtual intptr_t CallCount() const { |
| 2905 return ic_data() == NULL ? 0 : ic_data()->AggregateCount(); | 2910 return ic_data() == NULL ? 0 : ic_data()->AggregateCount(); |
| 2906 } | 2911 } |
| 2907 | 2912 |
| 2908 virtual bool ComputeCanDeoptimize() const { return true; } | 2913 virtual bool ComputeCanDeoptimize() const { return true; } |
| 2909 | 2914 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2925 | 2930 |
| 2926 protected: | 2931 protected: |
| 2927 friend class JitOptimizer; | 2932 friend class JitOptimizer; |
| 2928 void set_ic_data(ICData* value) { ic_data_ = value; } | 2933 void set_ic_data(ICData* value) { ic_data_ = value; } |
| 2929 | 2934 |
| 2930 private: | 2935 private: |
| 2931 const ICData* ic_data_; | 2936 const ICData* ic_data_; |
| 2932 const String& function_name_; | 2937 const String& function_name_; |
| 2933 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL. | 2938 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL. |
| 2934 const intptr_t checked_argument_count_; | 2939 const intptr_t checked_argument_count_; |
| 2940 const Function& interface_target_; |
| 2935 bool has_unique_selector_; | 2941 bool has_unique_selector_; |
| 2936 | 2942 |
| 2937 DISALLOW_COPY_AND_ASSIGN(InstanceCallInstr); | 2943 DISALLOW_COPY_AND_ASSIGN(InstanceCallInstr); |
| 2938 }; | 2944 }; |
| 2939 | 2945 |
| 2940 class PolymorphicInstanceCallInstr : public TemplateDefinition<0, Throws> { | 2946 class PolymorphicInstanceCallInstr : public TemplateDefinition<0, Throws> { |
| 2941 public: | 2947 public: |
| 2942 PolymorphicInstanceCallInstr(InstanceCallInstr* instance_call, | 2948 PolymorphicInstanceCallInstr(InstanceCallInstr* instance_call, |
| 2943 const CallTargets& targets, | 2949 const CallTargets& targets, |
| 2944 bool complete) | 2950 bool complete) |
| (...skipping 5151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8096 #define DEFINE_UNIMPLEMENTED_INSTRUCTION(Name) \ | 8102 #define DEFINE_UNIMPLEMENTED_INSTRUCTION(Name) \ |
| 8097 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ | 8103 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ |
| 8098 UNIMPLEMENTED(); \ | 8104 UNIMPLEMENTED(); \ |
| 8099 return NULL; \ | 8105 return NULL; \ |
| 8100 } \ | 8106 } \ |
| 8101 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } | 8107 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } |
| 8102 | 8108 |
| 8103 } // namespace dart | 8109 } // namespace dart |
| 8104 | 8110 |
| 8105 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ | 8111 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ |
| OLD | NEW |