5 #ifndef V8_HYDROGEN_GVN_H_
6 #define V8_HYDROGEN_GVN_H_
22 class SideEffects
FINAL {
30 bool IsEmpty()
const {
return bits_ == 0; }
32 return (bits_ & MaskFlag(
flag)) != 0;
35 return (bits_ & MaskSpecial(special)) != 0;
37 bool ContainsAnyOf(SideEffects set)
const {
return (bits_ & set.bits_) != 0; }
38 void Add(SideEffects set) { bits_ |= set.bits_; }
39 void AddSpecial(
int special) { bits_ |= MaskSpecial(special); }
46 return static_cast<uint64_t
>(1) <<
static_cast<unsigned>(
flag);
50 DCHECK(special < kNumberOfSpecials);
51 return static_cast<uint64_t
>(1) <<
static_cast<unsigned>(
79 DCHECK(index < kNumberOfGlobalVars);
84 DCHECK(index < kNumberOfInobjectFields);
85 return index + kNumberOfGlobalVars;
89 static const int kNumberOfGlobalVars = 4;
94 static const int kNumberOfInobjectFields =
95 SideEffects::kNumberOfSpecials - kNumberOfGlobalVars;
96 HObjectAccess inobject_fields_[kNumberOfInobjectFields];
114 class HGlobalValueNumberingPhase
FINAL :
public HPhase {
122 HBasicBlock* dominator,
123 HBasicBlock* dominated);
128 HBasicBlock* before_loop,
129 SideEffects loop_kills);
static int GlobalVar(int index)
bool ComputeGlobalVar(Unique< Cell > cell, int *index)
SideEffects ComputeChanges(HInstruction *instr)
bool ComputeInobjectField(HObjectAccess access, int *index)
static int InobjectField(int index)
SideEffects ComputeDependsOn(HInstruction *instr)
Source to read snapshot and builtins files from.
bool ContainsFlag(GVNFlag flag) const
SideEffects CollectSideEffectsOnPathsToDominatedBlock(HBasicBlock *dominator, HBasicBlock *dominated)
void AddSpecial(int special)
ZoneList< SideEffects > block_side_effects_
uint64_t MaskFlag(GVNFlag flag) const
bool removed_side_effects_
uint64_t ToIntegral() const
TrackedEffects Print(SideEffects side_effects)
void ProcessLoopBlock(HBasicBlock *block, HBasicBlock *before_loop, SideEffects loop_kills)
void LoopInvariantCodeMotion()
void ComputeBlockSideEffects()
BitVector visited_on_paths_
void Add(SideEffects set)
ZoneList< SideEffects > loop_side_effects_
void RemoveFlag(GVNFlag flag)
bool ContainsSpecial(int special) const
SideEffectsTracker side_effects_tracker_
SideEffects(GVNFlagSet flags)
DISALLOW_COPY_AND_ASSIGN(HGlobalValueNumberingPhase)
uint64_t MaskSpecial(int special) const
bool ShouldMove(HInstruction *instr, HBasicBlock *loop_header)
HGlobalValueNumberingPhase(HGraph *graph)
bool ContainsAnyOf(SideEffects set) const
#define DCHECK(condition)
OStream & operator<<(OStream &os, const BasicBlockProfiler &p)
kFeedbackVectorOffset flag
Debugger support for the V8 JavaScript engine.
SideEffectsTracker * tracker
TrackedEffects(SideEffectsTracker *t, SideEffects e)