Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
dart::LoadStaticFieldInstr Class Reference

#include <il.h>

Inheritance diagram for dart::LoadStaticFieldInstr:
dart::TemplateLoadField< 0 > dart::TemplateDefinition< N, Throws >

Public Member Functions

 LoadStaticFieldInstr (const Field &field, const InstructionSource &source, bool calls_initializer=false, intptr_t deopt_id=DeoptId::kNone)
 
virtual CompileType ComputeType () const
 
const Fieldfield () const
 
virtual bool AllowsCSE () const
 
virtual bool AttributesEqual (const Instruction &other) const
 
- Public Member Functions inherited from dart::TemplateLoadField< 0 >
 TemplateLoadField (const InstructionSource &source, bool calls_initializer=false, intptr_t deopt_id=DeoptId::kNone, const Field *field=nullptr)
 
virtual TokenPosition token_pos () const
 
bool calls_initializer () const
 
void set_calls_initializer (bool value)
 
bool throw_exception_on_initialization () const
 
virtual bool UseSharedSlowPathStub (bool is_optimizing) const
 
virtual intptr_t DeoptimizationTarget () const
 
virtual bool ComputeCanDeoptimize () const
 
virtual bool ComputeCanDeoptimizeAfterCall () const
 
virtual intptr_t NumberOfInputsConsumedBeforeCall () const
 
virtual bool HasUnknownSideEffects () const
 
virtual bool CanCallDart () const
 
virtual bool CanTriggerGC () const
 
virtual bool MayThrow () const
 
- Public Member Functions inherited from dart::TemplateDefinition< N, Throws >
 TemplateDefinition (intptr_t deopt_id=DeoptId::kNone)
 
 TemplateDefinition (const InstructionSource &source, intptr_t deopt_id=DeoptId::kNone)
 
virtual intptr_t InputCount () const
 
virtual ValueInputAt (intptr_t i) const
 

Additional Inherited Members

- Public Types inherited from dart::TemplateDefinition< N, Throws >
using BaseClass = typename NoCSE< Definition, PureDefinition >::Base
 
- Protected Attributes inherited from dart::TemplateDefinition< N, Throws >
EmbeddedArray< Value *, Ninputs_
 

Detailed Description

Definition at line 6626 of file il.h.

Constructor & Destructor Documentation

◆ LoadStaticFieldInstr()

dart::LoadStaticFieldInstr::LoadStaticFieldInstr ( const Field field,
const InstructionSource source,
bool  calls_initializer = false,
intptr_t  deopt_id = DeoptId::kNone 
)
inline

Definition at line 6628 of file il.h.

6632 : TemplateLoadField<0>(source, calls_initializer, deopt_id, &field),
6633 field_(field) {}
const Field & field() const
Definition il.h:6639
bool calls_initializer() const
Definition il.h:6579
SkBitmap source
Definition examples.cpp:28

Member Function Documentation

◆ AllowsCSE()

virtual bool dart::LoadStaticFieldInstr::AllowsCSE ( ) const
inlinevirtual

Definition at line 6641 of file il.h.

6641 {
6642 // If two loads of a static-final-late field call the initializer and one
6643 // dominates another, we can remove the dominated load with the result of
6644 // the dominating load.
6645 //
6646 // Though if the field is final-late there can be stores into it via
6647 // load/compare-with-sentinel/store. Those loads have
6648 // `!field().has_initializer()` and we won't allow CSE for them.
6649 return field().is_final() &&
6650 (!field().is_late() || field().has_initializer());
6651 }
bool is_final() const
Definition object.h:4420
bool has_initializer() const
Definition object.h:4586
bool is_late() const
Definition object.h:4422

◆ AttributesEqual()

bool dart::LoadStaticFieldInstr::AttributesEqual ( const Instruction other) const
virtual

Definition at line 1125 of file il.cc.

1125 {
1126 ASSERT(AllowsCSE());
1127 return field().ptr() == other.AsLoadStaticField()->field().ptr();
1128}
virtual bool AllowsCSE() const
Definition il.h:6641
ObjectPtr ptr() const
Definition object.h:332
#define ASSERT(E)

◆ ComputeType()

CompileType dart::LoadStaticFieldInstr::ComputeType ( ) const
virtual

Definition at line 1641 of file type_propagator.cc.

1641 {
1642 const Field& field = this->field();
1643 ASSERT(field.is_static());
1644 bool is_nullable = true;
1645 intptr_t cid = kIllegalCid; // Abstract type is known, calculate cid lazily.
1646
1647 AbstractType* abstract_type = &AbstractType::ZoneHandle(field.type());
1648 TraceStrongModeType(this, *abstract_type);
1649 if (abstract_type->IsStrictlyNonNullable()) {
1650 is_nullable = false;
1651 }
1652
1653 if ((field.guarded_cid() != kIllegalCid) &&
1654 (field.guarded_cid() != kDynamicCid)) {
1655 cid = field.guarded_cid();
1656 if (!field.is_nullable()) {
1657 is_nullable = false;
1658 }
1659 abstract_type = nullptr; // Cid is known, calculate abstract type lazily.
1660 }
1661
1662 if (field.needs_load_guard()) {
1663 // Should be kept in sync with Slot::Get.
1664 DEBUG_ASSERT(IsolateGroup::Current()->HasAttemptedReload());
1665 return CompileType::Dynamic();
1666 }
1667
1668 const bool can_be_sentinel = !calls_initializer() && field.is_late() &&
1670 return CompileType(is_nullable, can_be_sentinel, cid, abstract_type);
1671}
#define DEBUG_ASSERT(cond)
Definition assert.h:321
static CompileType Dynamic()
bool is_nullable() const
Definition object.cc:11821
bool needs_load_guard() const
Definition object.h:4429
intptr_t guarded_cid() const
Definition object.cc:11800
AbstractTypePtr type() const
Definition object.h:4523
static IsolateGroup * Current()
Definition isolate.h:534
static Object & ZoneHandle()
Definition object.h:419
@ kIllegalCid
Definition class_id.h:214
@ kDynamicCid
Definition class_id.h:253
const intptr_t cid
static void TraceStrongModeType(const Instruction *instr, const AbstractType &type)

◆ field()

const Field & dart::LoadStaticFieldInstr::field ( ) const
inline

Definition at line 6639 of file il.h.

6639{ return field_; }

The documentation for this class was generated from the following files: