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

Method do_disassemble

crates/rustc_codegen_spirv/src/codegen_cx/mod.rs:599–706  ·  view source on GitHub ↗
(&self, module: &Module)

Source from the content-addressed store, hash-verified

597 }
598
599 pub fn do_disassemble(&self, module: &Module) {
600 fn compact_ids(module: &mut rspirv::dr::Function) -> u32 {
601 let mut remap = std::collections::HashMap::new();
602 let mut insert = |current_id: &mut u32| {
603 let len = remap.len();
604 *current_id = *remap.entry(*current_id).or_insert_with(|| len as u32 + 1);
605 };
606 module.all_inst_iter_mut().for_each(|inst| {
607 if let Some(ref mut result_id) = &mut inst.result_id {
608 insert(result_id);
609 }
610 if let Some(ref mut result_type) = &mut inst.result_type {
611 insert(result_type);
612 }
613 inst.operands.iter_mut().for_each(|op| {
614 if let Some(w) = op.id_ref_any_mut() {
615 insert(w);
616 }
617 });
618 });
619 remap.len() as u32 + 1
620 }
621
622 use rspirv::binary::Disassemble;
623
624 if self.disassemble {
625 eprintln!("{}", module.disassemble());
626 }
627
628 if let Some(func) = &self.disassemble_fn {
629 let id = module
630 .debug_names
631 .iter()
632 .find(|inst| {
633 inst.class.opcode == rspirv::spirv::Op::Name
634 && inst.operands[1].unwrap_literal_string() == func
635 })
636 .unwrap_or_else(|| {
637 panic!(
638 "no function with the name `{}` found in:\n{}\n",
639 func,
640 module.disassemble()
641 )
642 })
643 .operands[0]
644 .unwrap_id_ref();
645 let mut func = module
646 .functions
647 .iter()
648 .find(|f| f.def_id().unwrap() == id)
649 .unwrap()
650 .clone();
651 // Compact to make IDs more stable
652 compact_ids(&mut func);
653 eprintln!("{}", func.disassemble());
654 }
655
656 if let Some(entry) = &self.disassemble_entry {

Callers 1

post_link_single_moduleFunction · 0.80

Calls 2

compact_idsFunction · 0.85
iterMethod · 0.80

Tested by

no test coverage detected