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 VM_INTERMEDIATE_LANGUAGE_H_ | 5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ |
6 #define VM_INTERMEDIATE_LANGUAGE_H_ | 6 #define 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 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
490 M(DoubleToDouble) \ | 490 M(DoubleToDouble) \ |
491 M(DoubleToFloat) \ | 491 M(DoubleToFloat) \ |
492 M(FloatToDouble) \ | 492 M(FloatToDouble) \ |
493 M(CheckClass) \ | 493 M(CheckClass) \ |
494 M(CheckClassId) \ | 494 M(CheckClassId) \ |
495 M(CheckSmi) \ | 495 M(CheckSmi) \ |
496 M(Constant) \ | 496 M(Constant) \ |
497 M(UnboxedConstant) \ | 497 M(UnboxedConstant) \ |
498 M(CheckEitherNonSmi) \ | 498 M(CheckEitherNonSmi) \ |
499 M(BinaryDoubleOp) \ | 499 M(BinaryDoubleOp) \ |
500 M(DoubleTestOp) \ | |
500 M(MathUnary) \ | 501 M(MathUnary) \ |
501 M(MathMinMax) \ | 502 M(MathMinMax) \ |
502 M(Box) \ | 503 M(Box) \ |
503 M(Unbox) \ | 504 M(Unbox) \ |
504 M(BoxInt64) \ | 505 M(BoxInt64) \ |
505 M(UnboxInt64) \ | 506 M(UnboxInt64) \ |
506 M(CaseInsensitiveCompareUC16) \ | 507 M(CaseInsensitiveCompareUC16) \ |
507 M(BinaryMintOp) \ | 508 M(BinaryMintOp) \ |
508 M(ShiftMintOp) \ | 509 M(ShiftMintOp) \ |
509 M(UnaryMintOp) \ | 510 M(UnaryMintOp) \ |
(...skipping 4826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5336 } | 5337 } |
5337 | 5338 |
5338 private: | 5339 private: |
5339 const Token::Kind op_kind_; | 5340 const Token::Kind op_kind_; |
5340 const TokenPosition token_pos_; | 5341 const TokenPosition token_pos_; |
5341 | 5342 |
5342 DISALLOW_COPY_AND_ASSIGN(BinaryDoubleOpInstr); | 5343 DISALLOW_COPY_AND_ASSIGN(BinaryDoubleOpInstr); |
5343 }; | 5344 }; |
5344 | 5345 |
5345 | 5346 |
5347 class DoubleTestOpInstr : public TemplateDefinition<1, NoThrow, Pure> { | |
Florian Schneider
2016/10/18 16:03:23
Can you make this inherit from ComparisonInstr?
T
zra
2016/10/18 17:20:40
Are there any other cases where we use an inlined
Florian Schneider
2016/10/18 20:34:20
I'm not aware of any. It should be straight-forwar
zra
2016/10/18 22:36:32
Does the inliner magically know that it can take a
| |
5348 public: | |
5349 DoubleTestOpInstr(MethodRecognizer::Kind op_kind, | |
5350 Value* d, | |
5351 intptr_t deopt_id, | |
5352 TokenPosition token_pos) | |
5353 : TemplateDefinition(deopt_id), | |
5354 op_kind_(op_kind), | |
5355 token_pos_(token_pos) { | |
5356 SetInputAt(0, d); | |
5357 } | |
5358 | |
5359 Value* value() const { return inputs_[0]; } | |
5360 | |
5361 MethodRecognizer::Kind op_kind() const { return op_kind_; } | |
5362 | |
5363 virtual TokenPosition token_pos() const { return token_pos_; } | |
5364 | |
5365 virtual bool CanDeoptimize() const { return false; } | |
5366 | |
5367 virtual Representation RequiredInputRepresentation(intptr_t idx) const { | |
5368 ASSERT(idx == 0); | |
5369 return kUnboxedDouble; | |
5370 } | |
5371 | |
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 | |
5379 | |
5380 DECLARE_INSTRUCTION(DoubleTestOp) | |
5381 virtual CompileType ComputeType() const; | |
5382 | |
5383 virtual Definition* Canonicalize(FlowGraph* flow_graph); | |
5384 | |
5385 virtual bool AttributesEqual(Instruction* other) const { return true; } | |
5386 | |
5387 private: | |
5388 const MethodRecognizer::Kind op_kind_; | |
5389 const TokenPosition token_pos_; | |
5390 | |
5391 DISALLOW_COPY_AND_ASSIGN(DoubleTestOpInstr); | |
5392 }; | |
5393 | |
5394 | |
5346 class BinaryFloat32x4OpInstr : public TemplateDefinition<2, NoThrow, Pure> { | 5395 class BinaryFloat32x4OpInstr : public TemplateDefinition<2, NoThrow, Pure> { |
5347 public: | 5396 public: |
5348 BinaryFloat32x4OpInstr(Token::Kind op_kind, | 5397 BinaryFloat32x4OpInstr(Token::Kind op_kind, |
5349 Value* left, | 5398 Value* left, |
5350 Value* right, | 5399 Value* right, |
5351 intptr_t deopt_id) | 5400 intptr_t deopt_id) |
5352 : TemplateDefinition(deopt_id), op_kind_(op_kind) { | 5401 : TemplateDefinition(deopt_id), op_kind_(op_kind) { |
5353 SetInputAt(0, left); | 5402 SetInputAt(0, left); |
5354 SetInputAt(1, right); | 5403 SetInputAt(1, right); |
5355 } | 5404 } |
(...skipping 2976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8332 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ | 8381 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ |
8333 UNIMPLEMENTED(); \ | 8382 UNIMPLEMENTED(); \ |
8334 return NULL; \ | 8383 return NULL; \ |
8335 } \ | 8384 } \ |
8336 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } | 8385 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } |
8337 | 8386 |
8338 | 8387 |
8339 } // namespace dart | 8388 } // namespace dart |
8340 | 8389 |
8341 #endif // VM_INTERMEDIATE_LANGUAGE_H_ | 8390 #endif // VM_INTERMEDIATE_LANGUAGE_H_ |
OLD | NEW |