Lesson 12 — Tối ưu hóa (Optimization)

Ba module tương tác trên IR ba địa chỉ: (1) pipeline bật/tắt từng pass tối ưu, (2) constant-folding stepper gập biểu thức từng bước, (3) dead-code highlighter tô lệnh sẽ bị bỏ. Mọi pass viết bằng JS thật — bạn sửa input là thấy kết quả đổi theo.

1. Optimization Pipeline — bật/tắt từng pass

Nhập IR ba địa chỉ, mỗi dòng một lệnh dạng x = a op b, x = a, hoặc return x. Toán tử: + - * /. Bật/tắt các pass để xem IR rút gọn dần và số lệnh trước/sau.
Mẫu:
IR gốc

      
IR sau tối ưu

      

2. Constant Folding Stepper — gập từng bước

Nhập một biểu thức hằng (chỉ số và + - * /, có ()). Bấm "Bước tiếp" để gập một phép tính mỗi lần — đúng thứ tự ưu tiên (* / trước + -).

3. Dead Code Highlighter — tô lệnh sẽ bị bỏ

Phân tích liveness quét ngược: tô đỏ các lệnh CHẾT (gán cho biến không ai đọc, lệnh thuần khiết). Lệnh có side effect (print, read, call, return) màu xanh — không bao giờ bị bỏ dù kết quả không dùng.

    
Chết (sẽ bị DCE xóa) Side effect (giữ lại) Sống (giữ lại)