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

#include <il.h>

Inheritance diagram for dart::ShiftIntegerOpInstr:
dart::BinaryIntegerOpInstr dart::TemplateDefinition< 2, NoThrow, Pure > dart::ShiftInt64OpInstr dart::ShiftUint32OpInstr dart::SpeculativeShiftInt64OpInstr dart::SpeculativeShiftUint32OpInstr

Public Member Functions

 ShiftIntegerOpInstr (Token::Kind op_kind, Value *left, Value *right, intptr_t deopt_id, Range *right_range=nullptr)
 
Rangeshift_range () const
 
void set_shift_range (Range *shift_range)
 
virtual void InferRange (RangeAnalysis *analysis, Range *range)
 
DECLARE_INSTRUCTION_SERIALIZABLE_FIELDS(ShiftIntegerOpInstr, BinaryIntegerOpInstr, FIELD_LIST) protected bool IsShiftCountInRange (int64_t max=kShiftCountLimit) const
 
- Public Member Functions inherited from dart::BinaryIntegerOpInstr
 BinaryIntegerOpInstr (Token::Kind op_kind, Value *left, Value *right, intptr_t deopt_id)
 
Token::Kind op_kind () const
 
Valueleft () const
 
Valueright () const
 
bool can_overflow () const
 
void set_can_overflow (bool overflow)
 
bool is_truncating () const
 
void mark_truncating ()
 
bool RightIsNonZero () const
 
bool RightIsPowerOfTwoConstant () const
 
virtual DefinitionCanonicalize (FlowGraph *flow_graph)
 
virtual bool AttributesEqual (const Instruction &other) const
 
virtual intptr_t DeoptimizationTarget () const
 
- Public Member Functions inherited from dart::TemplateDefinition< 2, NoThrow, Pure >
 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
 
virtual bool MayThrow () const
 

Additional Inherited Members

- Public Types inherited from dart::TemplateDefinition< 2, NoThrow, Pure >
using BaseClass = typename Pure< Definition, PureDefinition >::Base
 
- Static Public Member Functions inherited from dart::BinaryIntegerOpInstr
static BinaryIntegerOpInstrMake (Representation representation, Token::Kind op_kind, Value *left, Value *right, intptr_t deopt_id, SpeculativeMode speculative_mode=kGuardInputs)
 
static BinaryIntegerOpInstrMake (Representation representation, Token::Kind op_kind, Value *left, Value *right, intptr_t deopt_id, bool can_overflow, bool is_truncating, Range *range, SpeculativeMode speculative_mode=kGuardInputs)
 
- Protected Attributes inherited from dart::TemplateDefinition< 2, NoThrow, Pure >
EmbeddedArray< Value *, Ninputs_
 

Detailed Description

Definition at line 9592 of file il.h.

Constructor & Destructor Documentation

◆ ShiftIntegerOpInstr()

dart::ShiftIntegerOpInstr::ShiftIntegerOpInstr ( Token::Kind  op_kind,
Value left,
Value right,
intptr_t  deopt_id,
Range right_range = nullptr 
)
inline

Definition at line 9594 of file il.h.

9600 : BinaryIntegerOpInstr(op_kind, left, right, deopt_id),
9601 shift_range_(right_range) {
9602 ASSERT((op_kind == Token::kSHL) || (op_kind == Token::kSHR) ||
9603 (op_kind == Token::kUSHR));
9605 }
Value * right() const
Definition il.h:9350
Token::Kind op_kind() const
Definition il.h:9348
Value * left() const
Definition il.h:9349
BinaryIntegerOpInstr(Token::Kind op_kind, Value *left, Value *right, intptr_t deopt_id)
Definition il.h:9317
#define ASSERT(E)

Member Function Documentation

◆ InferRange()

void dart::ShiftIntegerOpInstr::InferRange ( RangeAnalysis analysis,
Range range 
)
virtual

Reimplemented from dart::BinaryIntegerOpInstr.

Definition at line 3055 of file range_analysis.cc.

3055 {
3056 const Range* right_range = RequiredInputRepresentation(1) == kTagged
3057 ? analysis->GetSmiRange(right())
3058 : right()->definition()->range();
3059 CacheRange(&shift_range_, right()->definition()->range(),
3061 InferRangeHelper(left()->definition()->range(), right_range, range);
3062}
Range * range() const
Definition il.h:2618
Definition * definition() const
Definition il.h:103
static void CacheRange(Range **slot, const Range *range, RangeBoundary::RangeSize size)

◆ IsShiftCountInRange()

bool dart::ShiftIntegerOpInstr::IsShiftCountInRange ( int64_t  max = kShiftCountLimit) const

Definition at line 2103 of file il.cc.

2103 {
2104 return RangeUtils::IsWithin(shift_range(), 0, max);
2105}
static bool IsWithin(const Range *range, int64_t min, int64_t max)
Range * shift_range() const
Definition il.h:9607
static float max(float r, float g, float b)
Definition hsl.cpp:49

◆ set_shift_range()

void dart::ShiftIntegerOpInstr::set_shift_range ( Range shift_range)
inline

Definition at line 9610 of file il.h.

9610{ shift_range_ = shift_range; }

◆ shift_range()

Range * dart::ShiftIntegerOpInstr::shift_range ( ) const
inline

Definition at line 9607 of file il.h.

9607{ return shift_range_; }

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