Lines Matching refs:func

82 #define func_prev(func)		list_prev_entry(func, l)  argument
83 #define func_next(func) list_next_entry(func, l) argument
86 #define entry_bb(func) func_first_bb(func) argument
87 #define exit_bb(func) func_last_bb(func) argument
92 #define func_first_bb(func) \ argument
93 list_first_entry(&func->bbs, struct bb_node, l)
94 #define func_last_bb(func) \ argument
95 list_last_entry(&func->bbs, struct bb_node, l)
99 struct func_node *new_func, *func; in cfg_append_func() local
101 list_for_each_entry(func, &cfg->funcs, l) { in cfg_append_func()
102 if (func->start == insn) in cfg_append_func()
103 return func; in cfg_append_func()
104 else if (func->start > insn) in cfg_append_func()
108 func = func_prev(func); in cfg_append_func()
116 list_add(&new_func->l, &func->l); in cfg_append_func()
122 static struct bb_node *func_append_bb(struct func_node *func, in func_append_bb() argument
127 list_for_each_entry(bb, &func->bbs, l) { in func_append_bb()
168 struct func_node *func, *last_func; in cfg_partition_funcs() local
170 func = cfg_append_func(cfg, cur); in cfg_partition_funcs()
171 if (!func) in cfg_partition_funcs()
179 func = cfg_append_func(cfg, cur + cur->off + 1); in cfg_partition_funcs()
180 if (!func) in cfg_partition_funcs()
186 func = cfg_first_func(cfg); in cfg_partition_funcs()
187 list_for_each_entry_from(func, &last_func->l, l) { in cfg_partition_funcs()
188 func->end = func_next(func)->start - 1; in cfg_partition_funcs()
194 static bool func_partition_bb_head(struct func_node *func) in func_partition_bb_head() argument
199 cur = func->start; in func_partition_bb_head()
200 end = func->end; in func_partition_bb_head()
201 INIT_LIST_HEAD(&func->bbs); in func_partition_bb_head()
202 bb = func_append_bb(func, cur); in func_partition_bb_head()
213 bb = func_append_bb(func, cur + cur->off + 1); in func_partition_bb_head()
218 bb = func_append_bb(func, cur + 1); in func_partition_bb_head()
228 static void func_partition_bb_tail(struct func_node *func) in func_partition_bb_tail() argument
233 last = func_last_bb(func); in func_partition_bb_tail()
234 last->tail = func->end; in func_partition_bb_tail()
235 bb = func_first_bb(func); in func_partition_bb_tail()
242 func->bb_num = bb_idx; in func_partition_bb_tail()
245 static bool func_add_special_bb(struct func_node *func) in func_add_special_bb() argument
249 bb = func_insert_dummy_bb(&func->bbs); in func_add_special_bb()
254 bb = func_insert_dummy_bb(&func_last_bb(func)->l); in func_add_special_bb()
262 static bool func_partition_bb(struct func_node *func) in func_partition_bb() argument
264 if (func_partition_bb_head(func)) in func_partition_bb()
267 func_partition_bb_tail(func); in func_partition_bb()
272 static struct bb_node *func_search_bb_with_head(struct func_node *func, in func_search_bb_with_head() argument
277 list_for_each_entry(bb, &func->bbs, l) { in func_search_bb_with_head()
306 static bool func_add_bb_edges(struct func_node *func) in func_add_bb_edges() argument
312 bb = entry_bb(func); in func_add_bb_edges()
318 bb = exit_bb(func); in func_add_bb_edges()
324 bb = entry_bb(func); in func_add_bb_edges()
326 list_for_each_entry_from(bb, &exit_bb(func)->l, l) { in func_add_bb_edges()
340 e->dst = func_search_bb_with_head(func, in func_add_bb_edges()
355 e->dst = func_search_bb_with_head(func, insn + insn->off + 1); in func_add_bb_edges()
365 struct func_node *func; in cfg_build() local
372 list_for_each_entry(func, &cfg->funcs, l) { in cfg_build()
373 if (func_partition_bb(func) || func_add_special_bb(func)) in cfg_build()
376 if (func_add_bb_edges(func)) in cfg_build()
385 struct func_node *func, *func2; in cfg_destroy() local
387 list_for_each_entry_safe(func, func2, &cfg->funcs, l) { in cfg_destroy()
390 list_for_each_entry_safe(bb, bb2, &func->bbs, l) { in cfg_destroy()
407 list_del(&func->l); in cfg_destroy()
408 free(func); in cfg_destroy()
412 static void draw_bb_node(struct func_node *func, struct bb_node *bb) in draw_bb_node() argument
422 func->idx, bb->idx, shape); in draw_bb_node()
434 start_idx = bb->head - func->start; in draw_bb_node()
443 static void draw_bb_succ_edges(struct func_node *func, struct bb_node *bb) in draw_bb_succ_edges() argument
447 int func_idx = func->idx; in draw_bb_succ_edges()
462 static void func_output_bb_def(struct func_node *func) in func_output_bb_def() argument
466 list_for_each_entry(bb, &func->bbs, l) { in func_output_bb_def()
467 draw_bb_node(func, bb); in func_output_bb_def()
471 static void func_output_edges(struct func_node *func) in func_output_edges() argument
473 int func_idx = func->idx; in func_output_edges()
476 list_for_each_entry(bb, &func->bbs, l) { in func_output_edges()
477 draw_bb_succ_edges(func, bb); in func_output_edges()
489 struct func_node *func; in cfg_dump() local
492 list_for_each_entry(func, &cfg->funcs, l) { in cfg_dump()
494 func->idx, func->idx); in cfg_dump()
495 func_output_bb_def(func); in cfg_dump()
496 func_output_edges(func); in cfg_dump()