Chromium Code Reviews| 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/growable_array.h" | 10 #include "vm/growable_array.h" |
| (...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 408 M(LoadField) \ | 408 M(LoadField) \ |
| 409 M(LoadUntagged) \ | 409 M(LoadUntagged) \ |
| 410 M(LoadClassId) \ | 410 M(LoadClassId) \ |
| 411 M(InstantiateType) \ | 411 M(InstantiateType) \ |
| 412 M(InstantiateTypeArguments) \ | 412 M(InstantiateTypeArguments) \ |
| 413 M(AllocateContext) \ | 413 M(AllocateContext) \ |
| 414 M(AllocateUninitializedContext) \ | 414 M(AllocateUninitializedContext) \ |
| 415 M(CloneContext) \ | 415 M(CloneContext) \ |
| 416 M(BinarySmiOp) \ | 416 M(BinarySmiOp) \ |
| 417 M(CheckedSmiComparison) \ | 417 M(CheckedSmiComparison) \ |
| 418 M(SmiRangeComparison) \ | |
| 418 M(CheckedSmiOp) \ | 419 M(CheckedSmiOp) \ |
| 419 M(BinaryInt32Op) \ | 420 M(BinaryInt32Op) \ |
| 420 M(UnarySmiOp) \ | 421 M(UnarySmiOp) \ |
| 421 M(UnaryDoubleOp) \ | 422 M(UnaryDoubleOp) \ |
| 422 M(CheckStackOverflow) \ | 423 M(CheckStackOverflow) \ |
| 423 M(SmiToDouble) \ | 424 M(SmiToDouble) \ |
| 424 M(Int32ToDouble) \ | 425 M(Int32ToDouble) \ |
| 425 M(MintToDouble) \ | 426 M(MintToDouble) \ |
| 426 M(DoubleToInteger) \ | 427 M(DoubleToInteger) \ |
| 427 M(DoubleToSmi) \ | 428 M(DoubleToSmi) \ |
| (...skipping 6529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6957 | 6958 |
| 6958 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); | 6959 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); |
| 6959 | 6960 |
| 6960 private: | 6961 private: |
| 6961 InstanceCallInstr* call_; | 6962 InstanceCallInstr* call_; |
| 6962 bool is_negated_; | 6963 bool is_negated_; |
| 6963 DISALLOW_COPY_AND_ASSIGN(CheckedSmiComparisonInstr); | 6964 DISALLOW_COPY_AND_ASSIGN(CheckedSmiComparisonInstr); |
| 6964 }; | 6965 }; |
| 6965 | 6966 |
| 6966 | 6967 |
| 6968 // Instruction that checks whether a Smi input is in a constant | |
| 6969 // inclusive range. | |
| 6970 class SmiRangeComparisonInstr : public TemplateComparison<1, NoThrow, Pure> { | |
| 6971 public: | |
| 6972 SmiRangeComparisonInstr(TokenPosition token_pos, | |
| 6973 Value* input, | |
| 6974 intptr_t from, | |
| 6975 intptr_t to) | |
| 6976 : TemplateComparison(token_pos, Token::kIS, Thread::kNoDeoptId), | |
|
Vyacheslav Egorov (Google)
2017/06/28 13:53:47
Please comment here why Token::kIS makes sense for
erikcorry
2017/07/03 08:59:55
Done.
| |
| 6977 from_(from), | |
| 6978 to_(to), | |
| 6979 is_negated_(false) { | |
| 6980 SetInputAt(0, input); | |
| 6981 } | |
| 6982 | |
| 6983 virtual bool ComputeCanDeoptimize() const { return false; } | |
| 6984 | |
| 6985 virtual void NegateComparison() { | |
| 6986 ComparisonInstr::NegateComparison(); | |
| 6987 is_negated_ = !is_negated_; | |
| 6988 } | |
| 6989 | |
| 6990 Value* input() const { return inputs_[0]; } | |
| 6991 | |
| 6992 intptr_t from() { return from_; } | |
| 6993 intptr_t to() { return to_; } | |
| 6994 bool is_negated() const { return is_negated_; } | |
|
Vyacheslav Egorov (Google)
2017/06/28 13:53:47
I think you don't need is_negated_ member:
is_neg
erikcorry
2017/07/03 08:59:55
Done.
| |
| 6995 | |
| 6996 virtual EffectSet Effects() const { return EffectSet::None(); } | |
| 6997 | |
| 6998 virtual CompileType ComputeType() const; | |
| 6999 | |
| 7000 PRINT_OPERANDS_TO_SUPPORT | |
| 7001 | |
| 7002 DECLARE_COMPARISON_INSTRUCTION(SmiRangeComparison) | |
| 7003 | |
| 7004 virtual ComparisonInstr* CopyWithNewOperands(Value* left, Value* right); | |
| 7005 | |
| 7006 virtual Representation RequiredInputRepresentation(intptr_t idx) const { | |
| 7007 return kTagged; | |
| 7008 } | |
| 7009 | |
| 7010 private: | |
| 7011 intptr_t from_; | |
|
Vyacheslav Egorov (Google)
2017/06/28 13:53:47
const intptr_t from_;
const intptr_t to_;
Also y
erikcorry
2017/07/03 08:59:55
Done.
| |
| 7012 intptr_t to_; | |
| 7013 bool is_negated_; | |
| 7014 DISALLOW_COPY_AND_ASSIGN(SmiRangeComparisonInstr); | |
| 7015 }; | |
| 7016 | |
| 7017 | |
| 6967 class BinaryIntegerOpInstr : public TemplateDefinition<2, NoThrow, Pure> { | 7018 class BinaryIntegerOpInstr : public TemplateDefinition<2, NoThrow, Pure> { |
| 6968 public: | 7019 public: |
| 6969 BinaryIntegerOpInstr(Token::Kind op_kind, | 7020 BinaryIntegerOpInstr(Token::Kind op_kind, |
| 6970 Value* left, | 7021 Value* left, |
| 6971 Value* right, | 7022 Value* right, |
| 6972 intptr_t deopt_id) | 7023 intptr_t deopt_id) |
| 6973 : TemplateDefinition(deopt_id), | 7024 : TemplateDefinition(deopt_id), |
| 6974 op_kind_(op_kind), | 7025 op_kind_(op_kind), |
| 6975 can_overflow_(true), | 7026 can_overflow_(true), |
| 6976 is_truncating_(false) { | 7027 is_truncating_(false) { |
| (...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8256 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ | 8307 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ |
| 8257 UNIMPLEMENTED(); \ | 8308 UNIMPLEMENTED(); \ |
| 8258 return NULL; \ | 8309 return NULL; \ |
| 8259 } \ | 8310 } \ |
| 8260 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } | 8311 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } |
| 8261 | 8312 |
| 8262 | 8313 |
| 8263 } // namespace dart | 8314 } // namespace dart |
| 8264 | 8315 |
| 8265 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ | 8316 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ |
| OLD | NEW |