Lines Matching refs:func

113     func: &mut ir::Function,  in do_inlining()
116 trace!("function {} before inlining: {}", func.name, func); in do_inlining()
121 let mut cursor = FuncCursor::new(func); in do_inlining()
139 debug_assert_eq!(Some(block), cursor.func.layout.inst_block(inst)); in do_inlining()
141 match cursor.func.dfg.insts[inst] { in do_inlining()
143 if cursor.func.dfg.ext_funcs[func_ref].patchable => in do_inlining()
157 cursor.func.dfg.display_inst(inst), in do_inlining()
159 let args = cursor.func.dfg.inst_args(inst); in do_inlining()
160 match inliner.inline(&cursor.func, inst, opcode, func_ref, args) { in do_inlining()
170 cursor.func, in do_inlining()
199 cursor.func.dfg.display_inst(inst), in do_inlining()
201 let args = cursor.func.dfg.inst_args(inst); in do_inlining()
202 match inliner.inline(&cursor.func, inst, opcode, func_ref, args) { in do_inlining()
212 cursor.func, in do_inlining()
240 !cursor.func.dfg.insts[inst].opcode().is_call(), in do_inlining()
242 cursor.func.dfg.display_inst(inst), in do_inlining()
250 trace!("function {} after inlining: {}", func.name, func); in do_inlining()
252 trace!("function {} did not have any callees inlined", func.name); in do_inlining()
342 func: &mut ir::Function, in inline_one()
353 func.dfg.display_inst(call_inst) in inline_one()
357 let expected_callee_sig = func.dfg.ext_funcs[callee_func_ref].signature; in inline_one()
358 let expected_callee_sig = &func.dfg.signatures[expected_callee_sig]; in inline_one()
365 let entity_map = create_entities(allocs, func, callee); in inline_one()
369 let return_block = split_off_return_block(func, call_inst, call_opcode, callee); in inline_one()
370 let call_stack_map = replace_call_with_jump(allocs, func, call_inst, callee, &entity_map); in inline_one()
375 let mut last_inlined_block = inline_block_layout(func, call_block, callee, &entity_map); in inline_one()
381 let call_debug_tags = func.debug_tags.get(call_inst).to_vec(); in inline_one()
382 func.debug_tags.set(call_inst, []); in inline_one()
414 func, in inline_one()
418 let inlined_inst = func.dfg.make_inst(inlined_inst_data); in inline_one()
419 func.layout.append_inst(inlined_inst, inlined_block); in inline_one()
441 func.debug_tags.set(inlined_inst, tags); in inline_one()
453 func, in inline_one()
472 func.dfg.make_inst_results(inlined_inst, ctrl_typevar); in inline_one()
476 let inlined_results = func.dfg.inst_results(inlined_inst); in inline_one()
484 func, in inline_one()
518 func.dfg.display_inst(inlined_inst) in inline_one()
531 for block in entity_map.iter_inlined_blocks(func) { in inline_one()
532 if func.layout.is_block_inserted(block) && func.layout.first_inst(block).is_none() { in inline_one()
539 last_inlined_block = func.layout.prev_block(last_inlined_block).expect( in inline_one()
545 func.layout.remove_block(block); in inline_one()
567 fixup_inlined_call_exception_tables(allocs, func, call_exception_table); in inline_one()
571 func.layout.is_block_inserted(last_inlined_block), in inline_one()
580 func: &mut ir::Function, in append_stack_map_entries()
590 func.dfg.append_user_stack_map_entries( in append_stack_map_entries()
600 func.dfg.append_user_stack_map_entries( in append_stack_map_entries()
620 func: &mut ir::Function, in fixup_inlined_call_exception_tables()
625 let split_block_for_new_try_call = |func: &mut ir::Function, inst: ir::Inst| -> ir::Block { in fixup_inlined_call_exception_tables()
626 debug_assert!(func.dfg.insts[inst].opcode().is_call()); in fixup_inlined_call_exception_tables()
627 debug_assert!(!func.dfg.insts[inst].opcode().is_terminator()); in fixup_inlined_call_exception_tables()
630 let next_inst = func in fixup_inlined_call_exception_tables()
634 let new_block = func.dfg.blocks.add(); in fixup_inlined_call_exception_tables()
635 func.layout.split_block(new_block, next_inst); in fixup_inlined_call_exception_tables()
641 let old_results = SmallValueVec::from_iter(func.dfg.inst_results(inst).iter().copied()); in fixup_inlined_call_exception_tables()
642 func.dfg.detach_inst_results(inst); in fixup_inlined_call_exception_tables()
644 let ty = func.dfg.value_type(old_result); in fixup_inlined_call_exception_tables()
645 let new_block_param = func.dfg.append_block_param(new_block, ty); in fixup_inlined_call_exception_tables()
646 func.dfg.change_to_alias(old_result, new_block_param); in fixup_inlined_call_exception_tables()
654 let clone_exception_table_for_this_call = |func: &mut ir::Function, in fixup_inlined_call_exception_tables()
658 let mut exception = func.stencil.dfg.exception_tables[call_exception_table] in fixup_inlined_call_exception_tables()
659 .deep_clone(&mut func.stencil.dfg.value_lists); in fixup_inlined_call_exception_tables()
663 let returns_len = func.dfg.signatures[signature].returns.len(); in fixup_inlined_call_exception_tables()
669 &mut func.dfg.value_lists, in fixup_inlined_call_exception_tables()
672 func.dfg.exception_tables.push(exception) in fixup_inlined_call_exception_tables()
676 debug_assert!(func.dfg.insts[inst].opcode().is_call()); in fixup_inlined_call_exception_tables()
677 debug_assert!(!func.dfg.insts[inst].opcode().is_return()); in fixup_inlined_call_exception_tables()
678 match func.dfg.insts[inst] { in fixup_inlined_call_exception_tables()
696 let new_block = split_block_for_new_try_call(func, inst); in fixup_inlined_call_exception_tables()
697 let signature = func.dfg.ext_funcs[func_ref].signature; in fixup_inlined_call_exception_tables()
698 let exception = clone_exception_table_for_this_call(func, signature, new_block); in fixup_inlined_call_exception_tables()
699 func.dfg.insts[inst] = ir::InstructionData::TryCall { in fixup_inlined_call_exception_tables()
724 let new_block = split_block_for_new_try_call(func, inst); in fixup_inlined_call_exception_tables()
725 let exception = clone_exception_table_for_this_call(func, sig_ref, new_block); in fixup_inlined_call_exception_tables()
726 func.dfg.insts[inst] = ir::InstructionData::TryCallIndirect { in fixup_inlined_call_exception_tables()
751 let sig = func.dfg.exception_tables[exception].signature(); in fixup_inlined_call_exception_tables()
752 let normal_return = *func.dfg.exception_tables[exception].normal_return(); in fixup_inlined_call_exception_tables()
756 func.dfg.exception_tables[exception] in fixup_inlined_call_exception_tables()
758 .chain(func.dfg.exception_tables[call_exception_table].items()), in fixup_inlined_call_exception_tables()
760 .deep_clone(&mut func.dfg.value_lists); in fixup_inlined_call_exception_tables()
762 func.dfg.exception_tables[exception] = exception_data; in fixup_inlined_call_exception_tables()
776 func: &mut ir::Function, in fixup_inst_that_returns()
785 debug_assert!(func.dfg.insts[inlined_inst].opcode().is_return()); in fixup_inst_that_returns()
786 match func.dfg.insts[inlined_inst] { in fixup_inst_that_returns()
797 args.as_slice(&func.dfg.value_lists) in fixup_inst_that_returns()
802 func.dfg.replace(inlined_inst).jump(return_block, &rets); in fixup_inst_that_returns()
816 func.dfg.insts[inlined_inst] = ir::InstructionData::Call { in fixup_inst_that_returns()
821 func.dfg.make_inst_results(inlined_inst, ir::types::INVALID); in fixup_inst_that_returns()
824 func, in fixup_inst_that_returns()
833 func.dfg in fixup_inst_that_returns()
839 let mut cursor = FuncCursor::new(func); in fixup_inst_that_returns()
861 func.dfg.insts[inlined_inst] = ir::InstructionData::CallIndirect { in fixup_inst_that_returns()
866 func.dfg.make_inst_results(inlined_inst, ir::types::INVALID); in fixup_inst_that_returns()
869 func, in fixup_inst_that_returns()
878 func.dfg in fixup_inst_that_returns()
884 let mut cursor = FuncCursor::new(func); in fixup_inst_that_returns()
906 func: &'a mut ir::Function, field
923 inlined_list.push(inlined_val, &mut self.func.dfg.value_lists); in map_value_list()
940 self.func in map_jump_table()
964 self.func in map_exception_table()
984 ir::BlockCall::new(inlined_block, args, &mut self.func.dfg.value_lists) in map_block_call()
1028 func: &mut ir::Function, in inline_block_layout()
1033 debug_assert!(func.layout.is_block_inserted(call_block)); in inline_block_layout()
1040 debug_assert!(func.layout.is_block_inserted(prev_inlined_block)); in inline_block_layout()
1043 func.layout in inline_block_layout()
1050 debug_assert!(func.layout.is_block_inserted(prev_inlined_block)); in inline_block_layout()
1060 func: &mut ir::Function, in split_off_return_block()
1067 let return_block = func.layout.next_inst(call_inst).map(|next_inst| { in split_off_return_block()
1068 let return_block = func.dfg.blocks.add(); in split_off_return_block()
1069 func.layout.split_block(return_block, next_inst); in split_off_return_block()
1074 SmallValueVec::from_iter(func.dfg.inst_results(call_inst).iter().copied()); in split_off_return_block()
1076 func.dfg.detach_inst_results(call_inst); in split_off_return_block()
1078 debug_assert_eq!(abi.value_type, func.dfg.value_type(old_val)); in split_off_return_block()
1079 let ret_param = func.dfg.append_block_param(return_block, abi.value_type); in split_off_return_block()
1080 func.dfg.change_to_alias(old_val, ret_param); in split_off_return_block()
1120 return_block.or_else(|| match func.dfg.insts[call_inst] { in split_off_return_block()
1127 let normal_return = func.dfg.exception_tables[exception].normal_return(); in split_off_return_block()
1128 let normal_return_block = normal_return.block(&func.dfg.value_lists); in split_off_return_block()
1132 let normal_return_args = normal_return.args(&func.dfg.value_lists); in split_off_return_block()
1146 let return_block = func.dfg.blocks.add(); in split_off_return_block()
1147 func.layout.insert_block(return_block, normal_return_block); in split_off_return_block()
1153 .map(|abi| func.dfg.append_block_param(return_block, abi.value_type)) in split_off_return_block()
1156 let normal_return_args = func.dfg.exception_tables[exception] in split_off_return_block()
1158 .args(&func.dfg.value_lists) in split_off_return_block()
1174 let mut cursor = FuncCursor::new(func); in split_off_return_block()
1193 func: &mut ir::Function, in replace_call_with_jump()
1201 func.dfg.display_inst(call_inst) in replace_call_with_jump()
1209 let caller_arg_values = SmallValueVec::from_iter(func.dfg.inst_args(call_inst).iter().copied()); in replace_call_with_jump()
1219 debug_assert_eq!(abi.value_type, func.dfg.value_type(caller_arg_value)); in replace_call_with_jump()
1230 func.dfg.replace(call_inst).jump(inlined_entry_block, &[]); in replace_call_with_jump()
1233 func.dfg.display_inst(call_inst) in replace_call_with_jump()
1236 let stack_map_entries = func.dfg.take_user_stack_map_entries(call_inst); in replace_call_with_jump()
1274 fn iter_inlined_blocks(&self, func: &ir::Function) -> impl Iterator<Item = ir::Block> + use<> { in iter_inlined_blocks()
1279 let end = func.dfg.blocks.len(); in iter_inlined_blocks()
1343 func: &mut ir::Function, in create_entities()
1348 entity_map.block_offset = Some(create_blocks(allocs, func, callee)); in create_entities()
1349 entity_map.global_value_offset = Some(create_global_values(func, callee)); in create_entities()
1350 entity_map.sig_ref_offset = Some(create_sig_refs(func, callee)); in create_entities()
1351 create_user_external_name_refs(allocs, func, callee); in create_entities()
1352 entity_map.func_ref_offset = Some(create_func_refs(allocs, func, callee, &entity_map)); in create_entities()
1353 entity_map.stack_slot_offset = Some(create_stack_slots(func, callee)); in create_entities()
1354 entity_map.dynamic_type_offset = Some(create_dynamic_types(func, callee, &entity_map)); in create_entities()
1356 Some(create_dynamic_stack_slots(func, callee, &entity_map)); in create_entities()
1357 entity_map.immediate_offset = Some(create_immediates(func, callee)); in create_entities()
1362 create_constants(allocs, func, callee); in create_entities()
1370 func: &mut ir::Function, in create_blocks()
1373 let offset = func.dfg.blocks.len(); in create_blocks()
1376 func.dfg.blocks.reserve(callee.dfg.blocks.len()); in create_blocks()
1378 let caller_block = func.dfg.blocks.add(); in create_blocks()
1382 func.layout.set_cold(caller_block); in create_blocks()
1391 let caller_param = func.dfg.append_block_param(caller_block, ty); in create_blocks()
1402 fn create_global_values(func: &mut ir::Function, callee: &ir::Function) -> u32 { in create_global_values()
1403 let gv_offset = func.global_values.len(); in create_global_values()
1406 func.global_values.reserve(callee.global_values.len()); in create_global_values()
1408 func.global_values.push(match gv { in create_global_values()
1444 fn create_sig_refs(func: &mut ir::Function, callee: &ir::Function) -> u32 { in create_sig_refs()
1445 let offset = func.dfg.signatures.len(); in create_sig_refs()
1448 func.dfg.signatures.reserve(callee.dfg.signatures.len()); in create_sig_refs()
1450 func.dfg.signatures.push(sig.clone()); in create_sig_refs()
1458 func: &mut ir::Function, in create_user_external_name_refs()
1462 let caller_named_func_ref = func.declare_imported_user_function(name.clone()); in create_user_external_name_refs()
1470 func: &mut ir::Function, in create_func_refs()
1474 let offset = func.dfg.ext_funcs.len(); in create_func_refs()
1477 func.dfg.ext_funcs.reserve(callee.dfg.ext_funcs.len()); in create_func_refs()
1485 func.dfg.ext_funcs.push(ir::ExtFuncData { in create_func_refs()
1507 fn create_stack_slots(func: &mut ir::Function, callee: &ir::Function) -> u32 { in create_stack_slots()
1508 let offset = func.sized_stack_slots.len(); in create_stack_slots()
1511 func.sized_stack_slots in create_stack_slots()
1514 func.sized_stack_slots.push(slot.clone()); in create_stack_slots()
1522 func: &mut ir::Function, in create_dynamic_types()
1526 let offset = func.dynamic_stack_slots.len(); in create_dynamic_types()
1529 func.dfg in create_dynamic_types()
1537 func.dfg.dynamic_types.push(ir::DynamicTypeData { in create_dynamic_types()
1548 func: &mut ir::Function, in create_dynamic_stack_slots()
1552 let offset = func.dynamic_stack_slots.len(); in create_dynamic_stack_slots()
1555 func.dynamic_stack_slots in create_dynamic_stack_slots()
1558 func.dynamic_stack_slots.push(ir::DynamicStackSlotData { in create_dynamic_stack_slots()
1568 fn create_immediates(func: &mut ir::Function, callee: &ir::Function) -> u32 { in create_immediates()
1569 let offset = func.dfg.immediates.len(); in create_immediates()
1572 func.dfg.immediates.reserve(callee.dfg.immediates.len()); in create_immediates()
1574 func.dfg.immediates.push(imm.clone()); in create_immediates()
1581 fn create_constants(allocs: &mut InliningAllocs, func: &mut ir::Function, callee: &ir::Function) { in create_constants()
1583 let inlined_constant = func.dfg.constants.insert(data.clone()); in create_constants()