Lines Matching defs:block

39   // - If the value is defined in a deferred block, then the logic to select
40 // the earliest deferred block as the insertion point would cause
53 // Iterate through the range and mark every block that needs the value to be
58 // Add every block that contains part of this live range.
66 // definition block.
74 // The end position is exclusive, so an end position exactly on a block
75 // boundary indicates that the range applies only to the prior block.
88 // Add every block that contains a use which requires the on-stack value.
92 InstructionBlock* block =
94 RpoNumber block_number = block->rpo_number();
97 // definition block.
103 SetSpillRequired(block, range->vreg(), top_start_block_number);
155 // Possible states for every value, at every block.
157 // This block is not (yet) known to require the on-stack value.
160 // The value must be on the stack in this block.
163 // The value doesn't need to be on-stack in this block, but some
167 // The value doesn't need to be on-stack in this block, but some
171 // The value is defined in this block.
249 void SpillPlacer::ExpandBoundsToInclude(RpoNumber block) {
252 first_block_ = block;
253 last_block_ = block;
255 if (first_block_ > block) {
256 first_block_ = block;
258 if (last_block_ < block) {
259 last_block_ = block;
264 void SpillPlacer::SetSpillRequired(InstructionBlock* block, int vreg,
266 // Spilling in loops is bad, so if the block is non-deferred and nested
269 if (!block->IsDeferred()) {
270 while (block->loop_header().IsValid() &&
271 block->loop_header() > top_start_block) {
272 block = data()->code()->InstructionBlockAt(block->loop_header());
277 entries_[block->rpo_number().ToSize()].SetSpillRequiredSingleValue(
279 ExpandBoundsToInclude(block->rpo_number());
282 void SpillPlacer::SetDefinition(RpoNumber block, int vreg) {
284 entries_[block.ToSize()].SetDefinitionSingleValue(value_index);
285 ExpandBoundsToInclude(block);
293 InstructionBlock* block = code->instruction_blocks()[i];
301 for (RpoNumber successor_id : block->successors()) {
319 // Starting state of the current block.
324 // definitions and spills required by this block itself.
339 InstructionBlock* block = code->instruction_blocks()[i];
343 // block (where a non-deferred block jumps to a deferred block), and
346 if (block->IsDeferred()) continue;
355 for (RpoNumber predecessor_id : block->predecessors()) {
368 // Starting state of the current block.
377 // currently have no markings in this block, to avoid pushing data too
384 // of this block also requires a spill, then this merge point requires a
396 InstructionBlock* block = code->instruction_blocks()[i];
406 for (RpoNumber successor_id : block->successors()) {
422 // Starting state of the current block.
435 if (block->IsDeferred()) {
438 // current block need a spill.
443 // all need a spill, regardless of whether the current block is
450 for (RpoNumber successor_id : block->successors()) {
459 CommitSpill(vreg_numbers_[index_to_spill], block, successor);