11bool CouldBeAllocate(
const Operation& base) {
12 return base.Is<PhiOp>() ||
base.Is<AllocateOp>();
18 OpIndex base_idx = store.base();
19 OpIndex value_idx = store.value();
23 if (!CouldBeAllocate(
base) || !CouldBeAllocate(value)) {
34 if (value.Is<
PhiOp>() &&
TryFind(value_idx) ==
nullptr) {
56 for (
OpIndex input : phi.inputs()) {
64 if (interesting_inputs.
empty())
return;
67 for (
OpIndex input : interesting_inputs) {
87 if (contained ==
nullptr)
return false;
88 for (
OpIndex index : *contained) {
132 case Opcode::kAllocate:
void push_back(const T &value)
base::iterator_range< MutableOperationIterator > AllOperations()
OpIndex Index(const Operation &op) const
V8_INLINE const Operation & Get(OpIndex i) const
void OldifySubgraph(OpIndex old_alloc)
void BuildStoreInputGraph()
ZoneVector< OpIndex > * TryFind(OpIndex idx)
void PropagateAllocationTypes()
ZoneVector< OpIndex > * FindOrCreate(OpIndex idx)
void ProcessAllocate(const AllocateOp &allocate)
bool PushContainedValues(OpIndex base)
ZoneVector< OpIndex > old_allocs_
void ProcessPhi(const PhiOp &phi)
ZoneAbslFlatHashSet< OpIndex > old_phis_
ZoneVector< OpIndex > queue_
ZoneVector< OpIndex > * Create(OpIndex idx)
void ProcessStore(const StoreOp &store)
V8_EXPORT_PRIVATE V8_INLINE bool ShouldSkipOperation(const Operation &op)
#define DCHECK(condition)
const underlying_operation_t< Op > * TryCast() const
underlying_operation_t< Op > & Cast()