MCPcopy Create free account
hub / github.com/Rust-GPU/rust-gpu / insert_phi_value

Method insert_phi_value

crates/rustc_codegen_spirv/src/linker/mem2reg.rs:441–476  ·  view source on GitHub ↗

Returns the phi definition.

(&mut self, block: usize, from_block: usize)

Source from the content-addressed store, hash-verified

439impl Renamer<'_> {
440 // Returns the phi definition.
441 fn insert_phi_value(&mut self, block: usize, from_block: usize) -> Word {
442 let from_block_label = self.blocks[from_block].label_id().unwrap();
443 let phi_defs = &self.phi_defs;
444 let existing_phi = self.blocks[block].instructions.iter_mut().find(|inst| {
445 inst.class.opcode == Op::Phi && phi_defs.contains(&inst.result_id.unwrap())
446 });
447 let top_def = top_stack_or_undef(
448 self.header,
449 self.types_global_values,
450 &self.stack,
451 self.base_var_type,
452 );
453 match existing_phi {
454 None => {
455 let new_id = id(self.header);
456 self.blocks[block].instructions.insert(
457 0,
458 Instruction::new(
459 Op::Phi,
460 Some(self.base_var_type),
461 Some(new_id),
462 vec![Operand::IdRef(top_def), Operand::IdRef(from_block_label)],
463 ),
464 );
465 self.phi_defs.insert(new_id);
466 new_id
467 }
468 Some(existing_phi) => {
469 existing_phi.operands.extend_from_slice(&[
470 Operand::IdRef(top_def),
471 Operand::IdRef(from_block_label),
472 ]);
473 existing_phi.result_id.unwrap()
474 }
475 }
476 }
477
478 fn rename(&mut self, block: usize, from_block: Option<usize>) {
479 let original_stack = self.stack.len();

Callers 1

renameMethod · 0.80

Calls 3

top_stack_or_undefFunction · 0.85
idFunction · 0.85
insertMethod · 0.80

Tested by

no test coverage detected