Skip to content

feat(ir): construir CFG a partir do TAC#147

Merged
HugoFreitass merged 1 commit into
developerfrom
feat/issue25-cfg
Jun 17, 2026
Merged

feat(ir): construir CFG a partir do TAC#147
HugoFreitass merged 1 commit into
developerfrom
feat/issue25-cfg

Conversation

@Bappoz

@Bappoz Bappoz commented Jun 17, 2026

Copy link
Copy Markdown
Owner

Descrição

Implementa src/ir/cfg.rs, construindo o Control Flow Graph (CFG) a partir de uma TacFunction, conforme #25.

O que foi adicionado

  • BlockId / BasicBlock { id, instrs, succs, preds }
  • identify_leaders(instrs: &[TacInstr]) -> HashSet<usize> — identifica índices que iniciam blocos (início da função, alvos de Label, instrução após Jump/CondJump)
  • build_cfg(func: &TacFunction) -> Cfg — particiona instruções em blocos e conecta via succs/preds com base em Jump/CondJump/fallthrough
  • Cfg { blocks, entry, exit } com métodos predecessors/successors
  • Display para Cfg, útil para debug

Testes

  • straight_line_code_is_one_block
  • if_else_produces_three_blocks
  • while_loop_has_back_edge (verifica aresta de volta)
  • cfg_entry_has_no_predecessors

CI

cargo build --all, cargo test --all, cargo clippy -- -D warnings e cargo fmt --check passam localmente.

Closes #25

image

Adds src/ir/cfg.rs implementing leader-based basic block
partitioning and successor/predecessor wiring from a
TacFunction, closes #25.
@Bappoz Bappoz self-assigned this Jun 17, 2026
@Bappoz Bappoz linked an issue Jun 17, 2026 that may be closed by this pull request
7 tasks
@HugoFreitass HugoFreitass merged commit 7798aa1 into developer Jun 17, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Construir Control Flow Graph (CFG) a partir do TAC

2 participants