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

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

Issue 2799373002: Pass a second type argument vector to all type instantiation calls in the VM. (Closed)
Patch Set: addressed comments Created 3 years, 8 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
« no previous file with comments | « runtime/vm/flow_graph_inliner.cc ('k') | runtime/vm/intermediate_language.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 #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 2518 matching lines...) Expand 10 before | Expand all | Expand 10 after
2529 DECLARE_INSTRUCTION(UnboxedConstant) 2529 DECLARE_INSTRUCTION(UnboxedConstant)
2530 2530
2531 private: 2531 private:
2532 const Representation representation_; 2532 const Representation representation_;
2533 uword constant_address_; // Either NULL or points to the untagged constant. 2533 uword constant_address_; // Either NULL or points to the untagged constant.
2534 2534
2535 DISALLOW_COPY_AND_ASSIGN(UnboxedConstantInstr); 2535 DISALLOW_COPY_AND_ASSIGN(UnboxedConstantInstr);
2536 }; 2536 };
2537 2537
2538 2538
2539 class AssertAssignableInstr : public TemplateDefinition<2, Throws, Pure> { 2539 class AssertAssignableInstr : public TemplateDefinition<3, Throws, Pure> {
2540 public: 2540 public:
2541 AssertAssignableInstr(TokenPosition token_pos, 2541 AssertAssignableInstr(TokenPosition token_pos,
2542 Value* value, 2542 Value* value,
2543 Value* instantiator_type_arguments, 2543 Value* instantiator_type_arguments,
2544 Value* function_type_arguments, 2544 Value* function_type_arguments,
2545 const AbstractType& dst_type, 2545 const AbstractType& dst_type,
2546 const String& dst_name, 2546 const String& dst_name,
2547 intptr_t deopt_id) 2547 intptr_t deopt_id)
2548 : TemplateDefinition(deopt_id), 2548 : TemplateDefinition(deopt_id),
2549 token_pos_(token_pos), 2549 token_pos_(token_pos),
2550 dst_type_(AbstractType::ZoneHandle(dst_type.raw())), 2550 dst_type_(AbstractType::ZoneHandle(dst_type.raw())),
2551 dst_name_(dst_name) { 2551 dst_name_(dst_name) {
2552 ASSERT(!dst_type.IsNull()); 2552 ASSERT(!dst_type.IsNull());
2553 ASSERT(!dst_type.IsTypeRef()); 2553 ASSERT(!dst_type.IsTypeRef());
2554 ASSERT(!dst_name.IsNull()); 2554 ASSERT(!dst_name.IsNull());
2555 SetInputAt(0, value); 2555 SetInputAt(0, value);
2556 SetInputAt(1, instantiator_type_arguments); 2556 SetInputAt(1, instantiator_type_arguments);
2557 ASSERT(function_type_arguments == NULL); // TODO(regis): Implement. 2557 SetInputAt(2, function_type_arguments);
2558 } 2558 }
2559 2559
2560 DECLARE_INSTRUCTION(AssertAssignable) 2560 DECLARE_INSTRUCTION(AssertAssignable)
2561 virtual CompileType ComputeType() const; 2561 virtual CompileType ComputeType() const;
2562 virtual bool RecomputeType(); 2562 virtual bool RecomputeType();
2563 2563
2564 Value* value() const { return inputs_[0]; } 2564 Value* value() const { return inputs_[0]; }
2565 Value* instantiator_type_arguments() const { return inputs_[1]; } 2565 Value* instantiator_type_arguments() const { return inputs_[1]; }
2566 Value* function_type_arguments() const { return inputs_[2]; }
2566 2567
2567 virtual TokenPosition token_pos() const { return token_pos_; } 2568 virtual TokenPosition token_pos() const { return token_pos_; }
2568 const AbstractType& dst_type() const { return dst_type_; } 2569 const AbstractType& dst_type() const { return dst_type_; }
2569 void set_dst_type(const AbstractType& dst_type) { 2570 void set_dst_type(const AbstractType& dst_type) {
2570 ASSERT(!dst_type.IsTypeRef()); 2571 ASSERT(!dst_type.IsTypeRef());
2571 dst_type_ = dst_type.raw(); 2572 dst_type_ = dst_type.raw();
2572 } 2573 }
2573 const String& dst_name() const { return dst_name_; } 2574 const String& dst_name() const { return dst_name_; }
2574 2575
2575 virtual bool ComputeCanDeoptimize() const { return true; } 2576 virtual bool ComputeCanDeoptimize() const { return true; }
(...skipping 1388 matching lines...) Expand 10 before | Expand all | Expand 10 after
3964 3965
3965 virtual EffectSet Effects() const { return EffectSet::None(); } 3966 virtual EffectSet Effects() const { return EffectSet::None(); }
3966 3967
3967 virtual Definition* Canonicalize(FlowGraph* flow_graph); 3968 virtual Definition* Canonicalize(FlowGraph* flow_graph);
3968 3969
3969 private: 3970 private:
3970 DISALLOW_COPY_AND_ASSIGN(BooleanNegateInstr); 3971 DISALLOW_COPY_AND_ASSIGN(BooleanNegateInstr);
3971 }; 3972 };
3972 3973
3973 3974
3974 class InstanceOfInstr : public TemplateDefinition<2, Throws> { 3975 class InstanceOfInstr : public TemplateDefinition<3, Throws> {
3975 public: 3976 public:
3976 InstanceOfInstr(TokenPosition token_pos, 3977 InstanceOfInstr(TokenPosition token_pos,
3977 Value* value, 3978 Value* value,
3978 Value* instantiator_type_arguments, 3979 Value* instantiator_type_arguments,
3979 Value* function_type_arguments, 3980 Value* function_type_arguments,
3980 const AbstractType& type, 3981 const AbstractType& type,
3981 intptr_t deopt_id) 3982 intptr_t deopt_id)
3982 : TemplateDefinition(deopt_id), token_pos_(token_pos), type_(type) { 3983 : TemplateDefinition(deopt_id), token_pos_(token_pos), type_(type) {
3983 ASSERT(!type.IsNull()); 3984 ASSERT(!type.IsNull());
3984 SetInputAt(0, value); 3985 SetInputAt(0, value);
3985 SetInputAt(1, instantiator_type_arguments); 3986 SetInputAt(1, instantiator_type_arguments);
3986 ASSERT(function_type_arguments == NULL); // TODO(regis): Implement. 3987 SetInputAt(2, function_type_arguments);
3987 } 3988 }
3988 3989
3989 DECLARE_INSTRUCTION(InstanceOf) 3990 DECLARE_INSTRUCTION(InstanceOf)
3990 virtual CompileType ComputeType() const; 3991 virtual CompileType ComputeType() const;
3991 3992
3992 Value* value() const { return inputs_[0]; } 3993 Value* value() const { return inputs_[0]; }
3993 Value* instantiator_type_arguments() const { return inputs_[1]; } 3994 Value* instantiator_type_arguments() const { return inputs_[1]; }
3995 Value* function_type_arguments() const { return inputs_[2]; }
3994 3996
3995 const AbstractType& type() const { return type_; } 3997 const AbstractType& type() const { return type_; }
3996 virtual TokenPosition token_pos() const { return token_pos_; } 3998 virtual TokenPosition token_pos() const { return token_pos_; }
3997 3999
3998 virtual bool ComputeCanDeoptimize() const { return true; } 4000 virtual bool ComputeCanDeoptimize() const { return true; }
3999 4001
4000 virtual EffectSet Effects() const { return EffectSet::None(); } 4002 virtual EffectSet Effects() const { return EffectSet::None(); }
4001 4003
4002 PRINT_OPERANDS_TO_SUPPORT 4004 PRINT_OPERANDS_TO_SUPPORT
4003 4005
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
4391 bool immutable_; 4393 bool immutable_;
4392 4394
4393 MethodRecognizer::Kind recognized_kind_; 4395 MethodRecognizer::Kind recognized_kind_;
4394 const Field* field_; 4396 const Field* field_;
4395 const TokenPosition token_pos_; 4397 const TokenPosition token_pos_;
4396 4398
4397 DISALLOW_COPY_AND_ASSIGN(LoadFieldInstr); 4399 DISALLOW_COPY_AND_ASSIGN(LoadFieldInstr);
4398 }; 4400 };
4399 4401
4400 4402
4401 class InstantiateTypeInstr : public TemplateDefinition<1, Throws> { 4403 class InstantiateTypeInstr : public TemplateDefinition<2, Throws> {
4402 public: 4404 public:
4403 InstantiateTypeInstr(TokenPosition token_pos, 4405 InstantiateTypeInstr(TokenPosition token_pos,
4404 const AbstractType& type, 4406 const AbstractType& type,
4405 Value* instantiator_type_arguments, 4407 Value* instantiator_type_arguments,
4406 Value* function_type_arguments) 4408 Value* function_type_arguments)
4407 : TemplateDefinition(Thread::Current()->GetNextDeoptId()), 4409 : TemplateDefinition(Thread::Current()->GetNextDeoptId()),
4408 token_pos_(token_pos), 4410 token_pos_(token_pos),
4409 type_(type) { 4411 type_(type) {
4410 ASSERT(type.IsZoneHandle() || type.IsReadOnlyHandle()); 4412 ASSERT(type.IsZoneHandle() || type.IsReadOnlyHandle());
4411 ASSERT(function_type_arguments == NULL); // TODO(regis): Implement.
4412 SetInputAt(0, instantiator_type_arguments); 4413 SetInputAt(0, instantiator_type_arguments);
4414 SetInputAt(1, function_type_arguments);
4413 } 4415 }
4414 4416
4415 DECLARE_INSTRUCTION(InstantiateType) 4417 DECLARE_INSTRUCTION(InstantiateType)
4416 4418
4417 Value* instantiator_type_arguments() const { return inputs_[0]; } 4419 Value* instantiator_type_arguments() const { return inputs_[0]; }
4420 Value* function_type_arguments() const { return inputs_[1]; }
4418 const AbstractType& type() const { return type_; } 4421 const AbstractType& type() const { return type_; }
4419 virtual TokenPosition token_pos() const { return token_pos_; } 4422 virtual TokenPosition token_pos() const { return token_pos_; }
4420 4423
4421 virtual bool ComputeCanDeoptimize() const { return true; } 4424 virtual bool ComputeCanDeoptimize() const { return true; }
4422 4425
4423 virtual EffectSet Effects() const { return EffectSet::None(); } 4426 virtual EffectSet Effects() const { return EffectSet::None(); }
4424 4427
4425 PRINT_OPERANDS_TO_SUPPORT 4428 PRINT_OPERANDS_TO_SUPPORT
4426 4429
4427 private: 4430 private:
4428 const TokenPosition token_pos_; 4431 const TokenPosition token_pos_;
4429 const AbstractType& type_; 4432 const AbstractType& type_;
4430 4433
4431 DISALLOW_COPY_AND_ASSIGN(InstantiateTypeInstr); 4434 DISALLOW_COPY_AND_ASSIGN(InstantiateTypeInstr);
4432 }; 4435 };
4433 4436
4434 4437
4435 class InstantiateTypeArgumentsInstr : public TemplateDefinition<1, Throws> { 4438 class InstantiateTypeArgumentsInstr : public TemplateDefinition<2, Throws> {
4436 public: 4439 public:
4437 InstantiateTypeArgumentsInstr(TokenPosition token_pos, 4440 InstantiateTypeArgumentsInstr(TokenPosition token_pos,
4438 const TypeArguments& type_arguments, 4441 const TypeArguments& type_arguments,
4439 const Class& instantiator_class, 4442 const Class& instantiator_class,
4440 Value* instantiator_type_arguments, 4443 Value* instantiator_type_arguments,
4441 Value* function_type_arguments) 4444 Value* function_type_arguments)
4442 : TemplateDefinition(Thread::Current()->GetNextDeoptId()), 4445 : TemplateDefinition(Thread::Current()->GetNextDeoptId()),
4443 token_pos_(token_pos), 4446 token_pos_(token_pos),
4444 type_arguments_(type_arguments), 4447 type_arguments_(type_arguments),
4445 instantiator_class_(instantiator_class) { 4448 instantiator_class_(instantiator_class) {
4446 ASSERT(type_arguments.IsZoneHandle()); 4449 ASSERT(type_arguments.IsZoneHandle());
4447 ASSERT(function_type_arguments == NULL); // TODO(regis): Implement.
4448 SetInputAt(0, instantiator_type_arguments); 4450 SetInputAt(0, instantiator_type_arguments);
4451 SetInputAt(1, function_type_arguments);
4449 } 4452 }
4450 4453
4451 DECLARE_INSTRUCTION(InstantiateTypeArguments) 4454 DECLARE_INSTRUCTION(InstantiateTypeArguments)
4452 4455
4453 Value* instantiator_type_arguments() const { return inputs_[0]; } 4456 Value* instantiator_type_arguments() const { return inputs_[0]; }
4457 Value* function_type_arguments() const { return inputs_[1]; }
4454 const TypeArguments& type_arguments() const { return type_arguments_; } 4458 const TypeArguments& type_arguments() const { return type_arguments_; }
4455 const Class& instantiator_class() const { return instantiator_class_; } 4459 const Class& instantiator_class() const { return instantiator_class_; }
4456 virtual TokenPosition token_pos() const { return token_pos_; } 4460 virtual TokenPosition token_pos() const { return token_pos_; }
4457 4461
4458 virtual bool ComputeCanDeoptimize() const { return true; } 4462 virtual bool ComputeCanDeoptimize() const { return true; }
4459 4463
4460 virtual EffectSet Effects() const { return EffectSet::None(); } 4464 virtual EffectSet Effects() const { return EffectSet::None(); }
4461 4465
4462 virtual Definition* Canonicalize(FlowGraph* flow_graph); 4466 virtual Definition* Canonicalize(FlowGraph* flow_graph);
4463 4467
(...skipping 3579 matching lines...) Expand 10 before | Expand all | Expand 10 after
8043 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ 8047 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \
8044 UNIMPLEMENTED(); \ 8048 UNIMPLEMENTED(); \
8045 return NULL; \ 8049 return NULL; \
8046 } \ 8050 } \
8047 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } 8051 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); }
8048 8052
8049 8053
8050 } // namespace dart 8054 } // namespace dart
8051 8055
8052 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ 8056 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_inliner.cc ('k') | runtime/vm/intermediate_language.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698