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

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

Issue 2463593002: VM: Enable branch merging of isnan, isinf. (Closed)
Patch Set: DBC support Created 4 years, 1 month 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
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 #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/growable_array.h" 10 #include "vm/growable_array.h"
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 // Fetch deopt id without checking if this computation can deoptimize. 903 // Fetch deopt id without checking if this computation can deoptimize.
904 intptr_t GetDeoptId() const { 904 intptr_t GetDeoptId() const {
905 return deopt_id_; 905 return deopt_id_;
906 } 906 }
907 907
908 void CopyDeoptIdFrom(const Instruction& instr) { 908 void CopyDeoptIdFrom(const Instruction& instr) {
909 deopt_id_ = instr.deopt_id_; 909 deopt_id_ = instr.deopt_id_;
910 } 910 }
911 911
912 private: 912 private:
913 friend class BranchInstr; // For RawSetInputAt.
914 friend class IfThenElseInstr; // For RawSetInputAt.
915
913 virtual void RawSetInputAt(intptr_t i, Value* value) = 0; 916 virtual void RawSetInputAt(intptr_t i, Value* value) = 0;
914 917
915 enum { 918 enum {
916 kNoPlaceId = -1 919 kNoPlaceId = -1
917 }; 920 };
918 921
919 intptr_t deopt_id_; 922 intptr_t deopt_id_;
920 union { 923 union {
921 intptr_t lifetime_position_; // Position used by register allocator. 924 intptr_t lifetime_position_; // Position used by register allocator.
922 intptr_t place_id_; 925 intptr_t place_id_;
(...skipping 1425 matching lines...) Expand 10 before | Expand all | Expand 10 after
2348 void ComputeOffsetTable(); 2351 void ComputeOffsetTable();
2349 2352
2350 PRINT_TO_SUPPORT 2353 PRINT_TO_SUPPORT
2351 2354
2352 private: 2355 private:
2353 GrowableArray<TargetEntryInstr*> successors_; 2356 GrowableArray<TargetEntryInstr*> successors_;
2354 TypedData& offsets_; 2357 TypedData& offsets_;
2355 }; 2358 };
2356 2359
2357 2360
2358 class ComparisonInstr : public TemplateDefinition<2, NoThrow, Pure> { 2361 class ComparisonInstr : public Definition {
2359 public: 2362 public:
2360 Value* left() const { return inputs_[0]; } 2363 Value* left() const { return InputAt(0); }
2361 Value* right() const { return inputs_[1]; } 2364 Value* right() const { return InputAt(1); }
2362 2365
2363 virtual TokenPosition token_pos() const { return token_pos_; } 2366 virtual TokenPosition token_pos() const { return token_pos_; }
2364 Token::Kind kind() const { return kind_; } 2367 Token::Kind kind() const { return kind_; }
2365 2368
2366 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right) = 0; 2369 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right) = 0;
2367 2370
2368 virtual void EmitBranchCode(FlowGraphCompiler* compiler, 2371 virtual void EmitBranchCode(FlowGraphCompiler* compiler,
2369 BranchInstr* branch) = 0; 2372 BranchInstr* branch) = 0;
2370 2373
2371 virtual Condition EmitComparisonCode(FlowGraphCompiler* compiler, 2374 virtual Condition EmitComparisonCode(FlowGraphCompiler* compiler,
(...skipping 18 matching lines...) Expand all
2390 ComparisonInstr* other_comparison = other->AsComparison(); 2393 ComparisonInstr* other_comparison = other->AsComparison();
2391 return kind() == other_comparison->kind() && 2394 return kind() == other_comparison->kind() &&
2392 (operation_cid() == other_comparison->operation_cid()); 2395 (operation_cid() == other_comparison->operation_cid());
2393 } 2396 }
2394 2397
2395 DEFINE_INSTRUCTION_TYPE_CHECK(Comparison) 2398 DEFINE_INSTRUCTION_TYPE_CHECK(Comparison)
2396 2399
2397 protected: 2400 protected:
2398 ComparisonInstr(TokenPosition token_pos, 2401 ComparisonInstr(TokenPosition token_pos,
2399 Token::Kind kind, 2402 Token::Kind kind,
2400 Value* left,
2401 Value* right,
2402 intptr_t deopt_id = Thread::kNoDeoptId) 2403 intptr_t deopt_id = Thread::kNoDeoptId)
2403 : TemplateDefinition(deopt_id), 2404 : Definition(deopt_id),
2404 token_pos_(token_pos), 2405 token_pos_(token_pos),
2405 kind_(kind), 2406 kind_(kind),
2406 operation_cid_(kIllegalCid) { 2407 operation_cid_(kIllegalCid) {
2407 SetInputAt(0, left);
2408 if (right != NULL) {
2409 SetInputAt(1, right);
2410 }
2411 } 2408 }
2412 2409
2413 private: 2410 private:
2414 const TokenPosition token_pos_; 2411 const TokenPosition token_pos_;
2415 Token::Kind kind_; 2412 Token::Kind kind_;
2416 intptr_t operation_cid_; // Set by optimizer. 2413 intptr_t operation_cid_; // Set by optimizer.
2417 2414
2418 DISALLOW_COPY_AND_ASSIGN(ComparisonInstr); 2415 DISALLOW_COPY_AND_ASSIGN(ComparisonInstr);
2419 }; 2416 };
2420 2417
2421 2418
2419 class PureComparison: public ComparisonInstr {
zra 2016/10/31 17:28:15 missing space before colon.
Florian Schneider 2016/10/31 18:48:16 Done.
2420 public:
2421 virtual bool AllowsCSE() const { return true; }
2422 virtual EffectSet Dependencies() const { return EffectSet::None(); }
2423
2424 virtual EffectSet Effects() const { return EffectSet::None(); }
2425
2426 protected:
2427 explicit PureComparison(TokenPosition token_pos,
zra 2016/10/31 17:28:14 explicit not needed.
Florian Schneider 2016/10/31 18:48:16 Done.
2428 Token::Kind kind,
2429 intptr_t deopt_id)
2430 : ComparisonInstr(token_pos, kind, deopt_id) { }
2431 };
2432
2433
2434 template<intptr_t N,
2435 typename ThrowsTrait,
2436 template<typename Impure, typename Pure> class CSETrait = NoCSE>
2437 class TemplateComparison : public CSETrait<
2438 ComparisonInstr, PureComparison>::Base {
2439 public:
2440 TemplateComparison(TokenPosition token_pos,
2441 Token::Kind kind,
2442 intptr_t deopt_id = Thread::kNoDeoptId)
2443 : CSETrait<ComparisonInstr, PureComparison>::Base(
2444 token_pos, kind, deopt_id),
2445 inputs_() { }
2446
2447 virtual intptr_t InputCount() const { return N; }
2448 virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
2449
2450 virtual bool MayThrow() const { return ThrowsTrait::kCanThrow; }
2451
2452 protected:
2453 EmbeddedArray<Value*, N> inputs_;
2454
2455 private:
2456 virtual void RawSetInputAt(intptr_t i, Value* value) {
2457 inputs_[i] = value;
2458 }
2459 };
2460
2461
2422 class BranchInstr : public Instruction { 2462 class BranchInstr : public Instruction {
2423 public: 2463 public:
2424 explicit BranchInstr(ComparisonInstr* comparison) 2464 explicit BranchInstr(ComparisonInstr* comparison)
2425 : Instruction(Thread::Current()->GetNextDeoptId()), 2465 : Instruction(Thread::Current()->GetNextDeoptId()),
2426 comparison_(comparison), 2466 comparison_(comparison),
2427 is_checked_(false), 2467 is_checked_(false),
2428 constrained_type_(NULL), 2468 constrained_type_(NULL),
2429 constant_target_(NULL) { 2469 constant_target_(NULL) {
2430 ASSERT(comparison->env() == NULL); 2470 ASSERT(comparison->env() == NULL);
2431 for (intptr_t i = comparison->InputCount() - 1; i >= 0; --i) { 2471 for (intptr_t i = comparison->InputCount() - 1; i >= 0; --i) {
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
2970 private: 3010 private:
2971 InstanceCallInstr* instance_call_; 3011 InstanceCallInstr* instance_call_;
2972 const ICData& ic_data_; 3012 const ICData& ic_data_;
2973 bool with_checks_; 3013 bool with_checks_;
2974 const bool complete_; 3014 const bool complete_;
2975 3015
2976 DISALLOW_COPY_AND_ASSIGN(PolymorphicInstanceCallInstr); 3016 DISALLOW_COPY_AND_ASSIGN(PolymorphicInstanceCallInstr);
2977 }; 3017 };
2978 3018
2979 3019
2980 class StrictCompareInstr : public ComparisonInstr { 3020 class StrictCompareInstr : public TemplateComparison<2, NoThrow, Pure> {
2981 public: 3021 public:
2982 StrictCompareInstr(TokenPosition token_pos, 3022 StrictCompareInstr(TokenPosition token_pos,
2983 Token::Kind kind, 3023 Token::Kind kind,
2984 Value* left, 3024 Value* left,
2985 Value* right, 3025 Value* right,
2986 bool needs_number_check); 3026 bool needs_number_check);
2987 3027
2988 DECLARE_INSTRUCTION(StrictCompare) 3028 DECLARE_INSTRUCTION(StrictCompare)
2989 3029
2990 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); 3030 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right);
(...skipping 21 matching lines...) Expand all
3012 // True if the comparison must check for double, Mint or Bigint and 3052 // True if the comparison must check for double, Mint or Bigint and
3013 // use value comparison instead. 3053 // use value comparison instead.
3014 bool needs_number_check_; 3054 bool needs_number_check_;
3015 3055
3016 DISALLOW_COPY_AND_ASSIGN(StrictCompareInstr); 3056 DISALLOW_COPY_AND_ASSIGN(StrictCompareInstr);
3017 }; 3057 };
3018 3058
3019 3059
3020 // Comparison instruction that is equivalent to the (left & right) == 0 3060 // Comparison instruction that is equivalent to the (left & right) == 0
3021 // comparison pattern. 3061 // comparison pattern.
3022 class TestSmiInstr : public ComparisonInstr { 3062 class TestSmiInstr : public TemplateComparison<2, NoThrow, Pure> {
3023 public: 3063 public:
3024 TestSmiInstr(TokenPosition token_pos, 3064 TestSmiInstr(TokenPosition token_pos,
3025 Token::Kind kind, 3065 Token::Kind kind,
3026 Value* left, 3066 Value* left,
3027 Value* right) 3067 Value* right)
3028 : ComparisonInstr(token_pos, kind, left, right) { 3068 : TemplateComparison(token_pos, kind) {
3029 ASSERT(kind == Token::kEQ || kind == Token::kNE); 3069 ASSERT(kind == Token::kEQ || kind == Token::kNE);
3070 SetInputAt(0, left);
3071 SetInputAt(1, right);
3030 } 3072 }
3031 3073
3032 DECLARE_INSTRUCTION(TestSmi); 3074 DECLARE_INSTRUCTION(TestSmi);
3033 3075
3034 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); 3076 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right);
3035 3077
3036 virtual CompileType ComputeType() const; 3078 virtual CompileType ComputeType() const;
3037 3079
3038 virtual bool CanDeoptimize() const { return false; } 3080 virtual bool CanDeoptimize() const { return false; }
3039 3081
3040 virtual Representation RequiredInputRepresentation(intptr_t idx) const { 3082 virtual Representation RequiredInputRepresentation(intptr_t idx) const {
3041 return kTagged; 3083 return kTagged;
3042 } 3084 }
3043 3085
3044 virtual void EmitBranchCode(FlowGraphCompiler* compiler, 3086 virtual void EmitBranchCode(FlowGraphCompiler* compiler,
3045 BranchInstr* branch); 3087 BranchInstr* branch);
3046 3088
3047 virtual Condition EmitComparisonCode(FlowGraphCompiler* compiler, 3089 virtual Condition EmitComparisonCode(FlowGraphCompiler* compiler,
3048 BranchLabels labels); 3090 BranchLabels labels);
3049 3091
3050 private: 3092 private:
3051 DISALLOW_COPY_AND_ASSIGN(TestSmiInstr); 3093 DISALLOW_COPY_AND_ASSIGN(TestSmiInstr);
3052 }; 3094 };
3053 3095
3054 3096
3055 // Checks the input value cid against cids stored in a table and returns either 3097 // Checks the input value cid against cids stored in a table and returns either
3056 // a result or deoptimizes. 3098 // a result or deoptimizes.
3057 // TODO(srdjan): Modify ComparisonInstr to allow 1 or 2 arguments, since 3099 class TestCidsInstr : public TemplateComparison<1, NoThrow, Pure> {
3058 // TestCidInstr needs only one argument
3059 class TestCidsInstr : public ComparisonInstr {
3060 public: 3100 public:
3061 TestCidsInstr(TokenPosition token_pos, 3101 TestCidsInstr(TokenPosition token_pos,
3062 Token::Kind kind, 3102 Token::Kind kind,
3063 Value* value, 3103 Value* value,
3064 const ZoneGrowableArray<intptr_t>& cid_results, 3104 const ZoneGrowableArray<intptr_t>& cid_results,
3065 intptr_t deopt_id) 3105 intptr_t deopt_id)
3066 : ComparisonInstr(token_pos, kind, value, NULL, deopt_id), 3106 : TemplateComparison(token_pos, kind, deopt_id),
3067 cid_results_(cid_results), 3107 cid_results_(cid_results),
3068 licm_hoisted_(false) { 3108 licm_hoisted_(false) {
3069 ASSERT((kind == Token::kIS) || (kind == Token::kISNOT)); 3109 ASSERT((kind == Token::kIS) || (kind == Token::kISNOT));
3110 SetInputAt(0, value);
3070 set_operation_cid(kObjectCid); 3111 set_operation_cid(kObjectCid);
3071 } 3112 }
3072 3113
3073 virtual intptr_t InputCount() const { return 1; }
3074
3075 const ZoneGrowableArray<intptr_t>& cid_results() const { 3114 const ZoneGrowableArray<intptr_t>& cid_results() const {
3076 return cid_results_; 3115 return cid_results_;
3077 } 3116 }
3078 3117
3079 DECLARE_INSTRUCTION(TestCids); 3118 DECLARE_INSTRUCTION(TestCids);
3080 3119
3081 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); 3120 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right);
3082 3121
3083 virtual CompileType ComputeType() const; 3122 virtual CompileType ComputeType() const;
3084 3123
(...skipping 19 matching lines...) Expand all
3104 3143
3105 PRINT_OPERANDS_TO_SUPPORT 3144 PRINT_OPERANDS_TO_SUPPORT
3106 3145
3107 private: 3146 private:
3108 const ZoneGrowableArray<intptr_t>& cid_results_; 3147 const ZoneGrowableArray<intptr_t>& cid_results_;
3109 bool licm_hoisted_; 3148 bool licm_hoisted_;
3110 DISALLOW_COPY_AND_ASSIGN(TestCidsInstr); 3149 DISALLOW_COPY_AND_ASSIGN(TestCidsInstr);
3111 }; 3150 };
3112 3151
3113 3152
3114 class EqualityCompareInstr : public ComparisonInstr { 3153 class EqualityCompareInstr : public TemplateComparison<2, NoThrow, Pure> {
3115 public: 3154 public:
3116 EqualityCompareInstr(TokenPosition token_pos, 3155 EqualityCompareInstr(TokenPosition token_pos,
3117 Token::Kind kind, 3156 Token::Kind kind,
3118 Value* left, 3157 Value* left,
3119 Value* right, 3158 Value* right,
3120 intptr_t cid, 3159 intptr_t cid,
3121 intptr_t deopt_id) 3160 intptr_t deopt_id)
3122 : ComparisonInstr(token_pos, kind, left, right, deopt_id) { 3161 : TemplateComparison(token_pos, kind, deopt_id) {
3123 ASSERT(Token::IsEqualityOperator(kind)); 3162 ASSERT(Token::IsEqualityOperator(kind));
3163 SetInputAt(0, left);
3164 SetInputAt(1, right);
3124 set_operation_cid(cid); 3165 set_operation_cid(cid);
3125 } 3166 }
3126 3167
3127 DECLARE_INSTRUCTION(EqualityCompare) 3168 DECLARE_INSTRUCTION(EqualityCompare)
3128 3169
3129 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); 3170 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right);
3130 3171
3131 virtual CompileType ComputeType() const; 3172 virtual CompileType ComputeType() const;
3132 3173
3133 virtual bool CanDeoptimize() const { return false; } 3174 virtual bool CanDeoptimize() const { return false; }
(...skipping 11 matching lines...) Expand all
3145 return kTagged; 3186 return kTagged;
3146 } 3187 }
3147 3188
3148 PRINT_OPERANDS_TO_SUPPORT 3189 PRINT_OPERANDS_TO_SUPPORT
3149 3190
3150 private: 3191 private:
3151 DISALLOW_COPY_AND_ASSIGN(EqualityCompareInstr); 3192 DISALLOW_COPY_AND_ASSIGN(EqualityCompareInstr);
3152 }; 3193 };
3153 3194
3154 3195
3155 class RelationalOpInstr : public ComparisonInstr { 3196 class RelationalOpInstr : public TemplateComparison<2, NoThrow, Pure> {
3156 public: 3197 public:
3157 RelationalOpInstr(TokenPosition token_pos, 3198 RelationalOpInstr(TokenPosition token_pos,
3158 Token::Kind kind, 3199 Token::Kind kind,
3159 Value* left, 3200 Value* left,
3160 Value* right, 3201 Value* right,
3161 intptr_t cid, 3202 intptr_t cid,
3162 intptr_t deopt_id) 3203 intptr_t deopt_id)
3163 : ComparisonInstr(token_pos, kind, left, right, deopt_id) { 3204 : TemplateComparison(token_pos, kind, deopt_id) {
3164 ASSERT(Token::IsRelationalOperator(kind)); 3205 ASSERT(Token::IsRelationalOperator(kind));
3206 SetInputAt(0, left);
3207 SetInputAt(1, right);
3165 set_operation_cid(cid); 3208 set_operation_cid(cid);
3166 } 3209 }
3167 3210
3168 DECLARE_INSTRUCTION(RelationalOp) 3211 DECLARE_INSTRUCTION(RelationalOp)
3169 3212
3170 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); 3213 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right);
3171 3214
3172 virtual CompileType ComputeType() const; 3215 virtual CompileType ComputeType() const;
3173 3216
3174 virtual bool CanDeoptimize() const { return false; } 3217 virtual bool CanDeoptimize() const { return false; }
(...skipping 2162 matching lines...) Expand 10 before | Expand all | Expand 10 after
5337 } 5380 }
5338 5381
5339 private: 5382 private:
5340 const Token::Kind op_kind_; 5383 const Token::Kind op_kind_;
5341 const TokenPosition token_pos_; 5384 const TokenPosition token_pos_;
5342 5385
5343 DISALLOW_COPY_AND_ASSIGN(BinaryDoubleOpInstr); 5386 DISALLOW_COPY_AND_ASSIGN(BinaryDoubleOpInstr);
5344 }; 5387 };
5345 5388
5346 5389
5347 class DoubleTestOpInstr : public TemplateDefinition<1, NoThrow, Pure> { 5390 class DoubleTestOpInstr : public TemplateComparison<1, NoThrow, Pure> {
5348 public: 5391 public:
5349 DoubleTestOpInstr(MethodRecognizer::Kind op_kind, 5392 DoubleTestOpInstr(MethodRecognizer::Kind op_kind,
5350 Value* d, 5393 Value* value,
5351 intptr_t deopt_id, 5394 intptr_t deopt_id,
5352 TokenPosition token_pos) 5395 TokenPosition token_pos)
5353 : TemplateDefinition(deopt_id), 5396 : TemplateComparison(token_pos, Token::kEQ, deopt_id),
5354 op_kind_(op_kind), 5397 op_kind_(op_kind) {
5355 token_pos_(token_pos) { 5398 SetInputAt(0, value);
5356 SetInputAt(0, d);
5357 } 5399 }
5358 5400
5359 Value* value() const { return inputs_[0]; } 5401 Value* value() const { return InputAt(0); }
5360 5402
5361 MethodRecognizer::Kind op_kind() const { return op_kind_; } 5403 MethodRecognizer::Kind op_kind() const { return op_kind_; }
5362 5404
5363 virtual TokenPosition token_pos() const { return token_pos_; }
5364
5365 virtual bool CanDeoptimize() const { return false; } 5405 virtual bool CanDeoptimize() const { return false; }
5366 5406
5367 virtual Representation RequiredInputRepresentation(intptr_t idx) const { 5407 virtual Representation RequiredInputRepresentation(intptr_t idx) const {
5368 ASSERT(idx == 0); 5408 ASSERT(idx == 0);
5369 return kUnboxedDouble; 5409 return kUnboxedDouble;
5370 } 5410 }
5371 5411
5372 virtual intptr_t DeoptimizationTarget() const {
5373 // Direct access since this instruction cannot deoptimize, and the deopt-id
5374 // was inherited from another instruction that could deoptimize.
5375 return GetDeoptId();
5376 }
5377
5378 PRINT_OPERANDS_TO_SUPPORT 5412 PRINT_OPERANDS_TO_SUPPORT
5379 5413
5380 DECLARE_INSTRUCTION(DoubleTestOp) 5414 DECLARE_INSTRUCTION(DoubleTestOp)
5381 virtual CompileType ComputeType() const; 5415 virtual CompileType ComputeType() const;
5382 5416
5383 virtual Definition* Canonicalize(FlowGraph* flow_graph); 5417 virtual Definition* Canonicalize(FlowGraph* flow_graph);
5384 5418
5385 virtual bool AttributesEqual(Instruction* other) const { 5419 virtual bool AttributesEqual(Instruction* other) const {
5386 return op_kind_ == other->AsDoubleTestOp()->op_kind(); 5420 return op_kind_ == other->AsDoubleTestOp()->op_kind()
5421 && ComparisonInstr::AttributesEqual(other);
5387 } 5422 }
5388 5423
5424 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right);
5425
5426 virtual void EmitBranchCode(FlowGraphCompiler* compiler,
5427 BranchInstr* branch);
5428
5429 virtual Condition EmitComparisonCode(FlowGraphCompiler* compiler,
5430 BranchLabels labels);
5431
5389 private: 5432 private:
5390 const MethodRecognizer::Kind op_kind_; 5433 const MethodRecognizer::Kind op_kind_;
5391 const TokenPosition token_pos_;
5392 5434
5393 DISALLOW_COPY_AND_ASSIGN(DoubleTestOpInstr); 5435 DISALLOW_COPY_AND_ASSIGN(DoubleTestOpInstr);
5394 }; 5436 };
5395 5437
5396 5438
5397 class BinaryFloat32x4OpInstr : public TemplateDefinition<2, NoThrow, Pure> { 5439 class BinaryFloat32x4OpInstr : public TemplateDefinition<2, NoThrow, Pure> {
5398 public: 5440 public:
5399 BinaryFloat32x4OpInstr(Token::Kind op_kind, 5441 BinaryFloat32x4OpInstr(Token::Kind op_kind,
5400 Value* left, 5442 Value* left,
5401 Value* right, 5443 Value* right,
(...skipping 2981 matching lines...) Expand 10 before | Expand all | Expand 10 after
8383 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ 8425 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \
8384 UNIMPLEMENTED(); \ 8426 UNIMPLEMENTED(); \
8385 return NULL; \ 8427 return NULL; \
8386 } \ 8428 } \
8387 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } 8429 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); }
8388 8430
8389 8431
8390 } // namespace dart 8432 } // namespace dart
8391 8433
8392 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ 8434 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698