Lines Matching refs:func

208     pub fn with_function(func: &Function, cfg: &ControlFlowGraph) -> Self {  in with_function()
209 let block_capacity = func.layout.block_capacity(); in with_function()
216 domtree.compute(func, cfg); in with_function()
221 pub fn compute(&mut self, func: &Function, cfg: &ControlFlowGraph) { in compute()
224 self.compute_postorder(func); in compute()
225 self.compute_domtree(func, cfg); in compute()
249 fn compute_postorder(&mut self, func: &Function) { in compute_postorder()
251 self.nodes.resize(func.dfg.num_blocks()); in compute_postorder()
252 self.postorder.extend(self.dfs.post_order_iter(func)); in compute_postorder()
257 fn compute_domtree(&mut self, func: &Function, cfg: &ControlFlowGraph) { in compute_domtree()
270 debug_assert_eq!(Some(entry_block), func.layout.entry_block()); in compute_domtree()
340 let func = Function::new(); in empty() localVariable
341 let cfg = ControlFlowGraph::with_function(&func); in empty()
343 let dtree = SimpleDominatorTree::with_function(&func, &cfg); in empty()
350 let mut func = Function::new(); in unreachable_node() localVariable
351 let block0 = func.dfg.make_block(); in unreachable_node()
352 let v0 = func.dfg.append_block_param(block0, I32); in unreachable_node()
353 let block1 = func.dfg.make_block(); in unreachable_node()
354 let block2 = func.dfg.make_block(); in unreachable_node()
355 let trap_block = func.dfg.make_block(); in unreachable_node()
357 let mut cur = FuncCursor::new(&mut func); in unreachable_node()
373 let cfg = ControlFlowGraph::with_function(cur.func); in unreachable_node()
374 let dt = SimpleDominatorTree::with_function(cur.func, &cfg); in unreachable_node()
387 let v2_def = cur.func.dfg.value_def(v2).unwrap_inst(); in unreachable_node()
388 assert!(!dt.dominates(v2_def, block0, &cur.func.layout)); in unreachable_node()
389 assert!(!dt.dominates(block0, v2_def, &cur.func.layout)); in unreachable_node()
391 assert!(dt.dominates(block0, block0, &cur.func.layout)); in unreachable_node()
392 assert!(!dt.dominates(block0, block1, &cur.func.layout)); in unreachable_node()
393 assert!(dt.dominates(block0, block2, &cur.func.layout)); in unreachable_node()
394 assert!(!dt.dominates(block1, block0, &cur.func.layout)); in unreachable_node()
395 assert!(dt.dominates(block1, block1, &cur.func.layout)); in unreachable_node()
396 assert!(!dt.dominates(block1, block2, &cur.func.layout)); in unreachable_node()
397 assert!(!dt.dominates(block2, block0, &cur.func.layout)); in unreachable_node()
398 assert!(!dt.dominates(block2, block1, &cur.func.layout)); in unreachable_node()
399 assert!(dt.dominates(block2, block2, &cur.func.layout)); in unreachable_node()
404 let mut func = Function::new(); in non_zero_entry_block() localVariable
405 let block0 = func.dfg.make_block(); in non_zero_entry_block()
406 let block1 = func.dfg.make_block(); in non_zero_entry_block()
407 let block2 = func.dfg.make_block(); in non_zero_entry_block()
408 let block3 = func.dfg.make_block(); in non_zero_entry_block()
409 let cond = func.dfg.append_block_param(block3, I32); in non_zero_entry_block()
411 let mut cur = FuncCursor::new(&mut func); in non_zero_entry_block()
424 let cfg = ControlFlowGraph::with_function(cur.func); in non_zero_entry_block()
425 let dt = SimpleDominatorTree::with_function(cur.func, &cfg); in non_zero_entry_block()
447 assert_eq!(cur.func.layout.entry_block().unwrap(), block3); in non_zero_entry_block()
456 &cur.func.layout in non_zero_entry_block()
458 assert!(!dt.dominates(br_block1_block0_block2, jmp_block3_block1, &cur.func.layout)); in non_zero_entry_block()
459 assert!(dt.dominates(jmp_block3_block1, br_block1_block0_block2, &cur.func.layout)); in non_zero_entry_block()
462 dt.rpo_cmp(block3, block3, &cur.func.layout), in non_zero_entry_block()
465 assert_eq!(dt.rpo_cmp(block3, block1, &cur.func.layout), Ordering::Less); in non_zero_entry_block()
467 dt.rpo_cmp(block3, jmp_block3_block1, &cur.func.layout), in non_zero_entry_block()
471 dt.rpo_cmp(jmp_block3_block1, br_block1_block0_block2, &cur.func.layout), in non_zero_entry_block()
478 let mut func = Function::new(); in backwards_layout() localVariable
479 let block0 = func.dfg.make_block(); in backwards_layout()
480 let block1 = func.dfg.make_block(); in backwards_layout()
481 let block2 = func.dfg.make_block(); in backwards_layout()
483 let mut cur = FuncCursor::new(&mut func); in backwards_layout()
494 let cfg = ControlFlowGraph::with_function(cur.func); in backwards_layout()
495 let dt = SimpleDominatorTree::with_function(cur.func, &cfg); in backwards_layout()
497 assert_eq!(cur.func.layout.entry_block(), Some(block0)); in backwards_layout()
502 assert!(dt.dominates(block0, block0, &cur.func.layout)); in backwards_layout()
503 assert!(dt.dominates(block0, jmp02, &cur.func.layout)); in backwards_layout()
504 assert!(dt.dominates(block0, block1, &cur.func.layout)); in backwards_layout()
505 assert!(dt.dominates(block0, trap, &cur.func.layout)); in backwards_layout()
506 assert!(dt.dominates(block0, block2, &cur.func.layout)); in backwards_layout()
507 assert!(dt.dominates(block0, jmp21, &cur.func.layout)); in backwards_layout()
509 assert!(!dt.dominates(jmp02, block0, &cur.func.layout)); in backwards_layout()
510 assert!(dt.dominates(jmp02, jmp02, &cur.func.layout)); in backwards_layout()
511 assert!(dt.dominates(jmp02, block1, &cur.func.layout)); in backwards_layout()
512 assert!(dt.dominates(jmp02, trap, &cur.func.layout)); in backwards_layout()
513 assert!(dt.dominates(jmp02, block2, &cur.func.layout)); in backwards_layout()
514 assert!(dt.dominates(jmp02, jmp21, &cur.func.layout)); in backwards_layout()
516 assert!(!dt.dominates(block1, block0, &cur.func.layout)); in backwards_layout()
517 assert!(!dt.dominates(block1, jmp02, &cur.func.layout)); in backwards_layout()
518 assert!(dt.dominates(block1, block1, &cur.func.layout)); in backwards_layout()
519 assert!(dt.dominates(block1, trap, &cur.func.layout)); in backwards_layout()
520 assert!(!dt.dominates(block1, block2, &cur.func.layout)); in backwards_layout()
521 assert!(!dt.dominates(block1, jmp21, &cur.func.layout)); in backwards_layout()
523 assert!(!dt.dominates(trap, block0, &cur.func.layout)); in backwards_layout()
524 assert!(!dt.dominates(trap, jmp02, &cur.func.layout)); in backwards_layout()
525 assert!(!dt.dominates(trap, block1, &cur.func.layout)); in backwards_layout()
526 assert!(dt.dominates(trap, trap, &cur.func.layout)); in backwards_layout()
527 assert!(!dt.dominates(trap, block2, &cur.func.layout)); in backwards_layout()
528 assert!(!dt.dominates(trap, jmp21, &cur.func.layout)); in backwards_layout()
530 assert!(!dt.dominates(block2, block0, &cur.func.layout)); in backwards_layout()
531 assert!(!dt.dominates(block2, jmp02, &cur.func.layout)); in backwards_layout()
532 assert!(dt.dominates(block2, block1, &cur.func.layout)); in backwards_layout()
533 assert!(dt.dominates(block2, trap, &cur.func.layout)); in backwards_layout()
534 assert!(dt.dominates(block2, block2, &cur.func.layout)); in backwards_layout()
535 assert!(dt.dominates(block2, jmp21, &cur.func.layout)); in backwards_layout()
537 assert!(!dt.dominates(jmp21, block0, &cur.func.layout)); in backwards_layout()
538 assert!(!dt.dominates(jmp21, jmp02, &cur.func.layout)); in backwards_layout()
539 assert!(dt.dominates(jmp21, block1, &cur.func.layout)); in backwards_layout()
540 assert!(dt.dominates(jmp21, trap, &cur.func.layout)); in backwards_layout()
541 assert!(!dt.dominates(jmp21, block2, &cur.func.layout)); in backwards_layout()
542 assert!(dt.dominates(jmp21, jmp21, &cur.func.layout)); in backwards_layout()
547 let mut func = Function::new(); in insts_same_block() localVariable
548 let block0 = func.dfg.make_block(); in insts_same_block()
550 let mut cur = FuncCursor::new(&mut func); in insts_same_block()
558 let cfg = ControlFlowGraph::with_function(cur.func); in insts_same_block()
559 let dt = SimpleDominatorTree::with_function(cur.func, &cfg); in insts_same_block()
561 let v1_def = cur.func.dfg.value_def(v1).unwrap_inst(); in insts_same_block()
562 let v2_def = cur.func.dfg.value_def(v2).unwrap_inst(); in insts_same_block()
563 let v3_def = cur.func.dfg.value_def(v3).unwrap_inst(); in insts_same_block()
565 assert!(dt.dominates(v1_def, v2_def, &cur.func.layout)); in insts_same_block()
566 assert!(dt.dominates(v2_def, v3_def, &cur.func.layout)); in insts_same_block()
567 assert!(dt.dominates(v1_def, v3_def, &cur.func.layout)); in insts_same_block()
569 assert!(!dt.dominates(v2_def, v1_def, &cur.func.layout)); in insts_same_block()
570 assert!(!dt.dominates(v3_def, v2_def, &cur.func.layout)); in insts_same_block()
571 assert!(!dt.dominates(v3_def, v1_def, &cur.func.layout)); in insts_same_block()
573 assert!(dt.dominates(v2_def, v2_def, &cur.func.layout)); in insts_same_block()
574 assert!(dt.dominates(block0, block0, &cur.func.layout)); in insts_same_block()
576 assert!(dt.dominates(block0, v1_def, &cur.func.layout)); in insts_same_block()
577 assert!(dt.dominates(block0, v2_def, &cur.func.layout)); in insts_same_block()
578 assert!(dt.dominates(block0, v3_def, &cur.func.layout)); in insts_same_block()
580 assert!(!dt.dominates(v1_def, block0, &cur.func.layout)); in insts_same_block()
581 assert!(!dt.dominates(v2_def, block0, &cur.func.layout)); in insts_same_block()
582 assert!(!dt.dominates(v3_def, block0, &cur.func.layout)); in insts_same_block()