Lesson 15 — Cấp phát thanh ghi & Mục tiêu sinh mã
Ba công cụ tương tác: (A) phân tích liveness trên đoạn IR, (B) tô màu interference graph với số register tùy chọn, (C) target explorer — cùng một biểu thức ra nhiều dạng mã. Bài cuối lĩnh vực Compilers.
A. Liveness Analyzer — temp nào đang sống?
Chọn một đoạn IR mẫu. Mỗi cột bên phải là một temp; thanh màu = khoảng nó sống (từ lúc gán tới lần dùng cuối). Cột "Live" đếm số temp sống cùng lúc (register pressure).
def (bắt đầu sống)
đang sống
chết / chưa sinh
B. Graph Coloring — tô màu để cấp phát register
Đỉnh = temp; cạnh = hai temp sống cùng lúc (không thể chung register). Kéo slider chọn số register k. Bấm Tô tự động (greedy), hoặc tự click vào đỉnh rồi chọn màu để tô tay. Hai đỉnh kề cùng màu = lỗi. Nếu cần nhiều màu hơn k → báo phải spill.
C. Target Explorer — một IR, nhiều mục tiêu
Chọn một biểu thức. Cùng một IR ba địa chỉ được sinh ra ba dạng mã: stack-VM bytecode (L13), x86-ish register asm (cần cấp phát register), và WebAssembly (stack machine). Đây là minh họa "IR chung → nhiều target".