5 use cranelift_codegen::entity::EntityRef;
7 use crate::abi::pass_mode::*;
10 pub(super) fn add_args_header_comment(fx: &mut FunctionCx<'_, '_, impl Backend>) {
11 fx.add_global_comment(format!(
12 "kind loc.idx param pass mode ty"
16 pub(super) fn add_arg_comment<'tcx>(
17 fx: &mut FunctionCx<'_, 'tcx, impl Backend>,
19 local: Option<mir::Local>,
20 local_field: Option<usize>,
21 params: EmptySinglePair<Value>,
25 let local = if let Some(local) = local {
26 Cow::Owned(format!("{:?}", local))
30 let local_field = if let Some(local_field) = local_field {
31 Cow::Owned(format!(".{}", local_field))
36 let params = match params {
37 Empty => Cow::Borrowed("-"),
38 Single(param) => Cow::Owned(format!("= {:?}", param)),
39 Pair(param_a, param_b) => Cow::Owned(format!("= {:?}, {:?}", param_a, param_b)),
42 let pass_mode = format!("{:?}", pass_mode);
43 fx.add_global_comment(format!(
44 "{kind:5}{local:>3}{local_field:<5} {params:10} {pass_mode:36} {ty:?}",
47 local_field = local_field,
49 pass_mode = pass_mode,
54 pub(super) fn add_locals_header_comment(fx: &mut FunctionCx<'_, '_, impl Backend>) {
55 fx.add_global_comment(String::new());
56 fx.add_global_comment(format!(
57 "kind local ty size align (abi,pref)"
61 pub(super) fn add_local_place_comments<'tcx>(
62 fx: &mut FunctionCx<'_, 'tcx, impl Backend>,
66 let TyAndLayout { ty, layout } = place.layout();
67 let rustc_target::abi::Layout {
76 let (kind, extra) = match *place.inner() {
77 CPlaceInner::Var(place_local, var) => {
78 assert_eq!(local, place_local);
79 ("ssa", Cow::Owned(format!(",var={}", var.index())))
81 CPlaceInner::Addr(ptr, meta) => {
82 let meta = if let Some(meta) = meta {
83 Cow::Owned(format!(",meta={}", meta))
87 match ptr.base_and_offset() {
88 (crate::pointer::PointerBase::Addr(addr), offset) => {
89 ("reuse", format!("storage={}{}{}", addr, offset, meta).into())
91 (crate::pointer::PointerBase::Stack(stack_slot), offset) => {
92 ("stack", format!("storage={}{}{}", stack_slot, offset, meta).into())
94 (crate::pointer::PointerBase::Dangling(align), offset) => {
95 ("zst", format!("align={},offset={}", align.bytes(), offset).into())
101 fx.add_global_comment(format!(
102 "{:<5} {:5} {:30} {:4}b {}, {}{}{}",
104 format!("{:?}", local),
109 if extra.is_empty() { "" } else { " " },