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::VarPair(place_local, var1, var2) => {
82 assert_eq!(local, place_local);
83 ("ssa", Cow::Owned(format!(",var=({}, {})", var1.index(), var2.index())))
85 CPlaceInner::VarLane(_local, _var, _lane) => unreachable!(),
86 CPlaceInner::Addr(ptr, meta) => {
87 let meta = if let Some(meta) = meta {
88 Cow::Owned(format!(",meta={}", meta))
92 match ptr.base_and_offset() {
93 (crate::pointer::PointerBase::Addr(addr), offset) => {
94 ("reuse", format!("storage={}{}{}", addr, offset, meta).into())
96 (crate::pointer::PointerBase::Stack(stack_slot), offset) => {
97 ("stack", format!("storage={}{}{}", stack_slot, offset, meta).into())
99 (crate::pointer::PointerBase::Dangling(align), offset) => {
100 ("zst", format!("align={},offset={}", align.bytes(), offset).into())
106 fx.add_global_comment(format!(
107 "{:<5} {:5} {:30} {:4}b {}, {}{}{}",
109 format!("{:?}", local),
114 if extra.is_empty() { "" } else { " " },