Khi chuyển chương trình sang dạng SSA (Static Single Assignment), tại các điểm hợp nhất (join point) của nhiều luồng định nghĩa cùng một biến, trình biên dịch phải chèn một hàm phi (ϕ) để gộp các giá trị đến từ nhiều nhánh. Vị trí cần chèn ϕ cho một biến được xác định chính xác bằng biên trội lặp (Iterated Dominance Frontier — IDF) của tập các khối chứa định nghĩa của biến đó.
Cho một CFG gồm n khối đánh số 1..n (khối 1 là điểm vào, mọi khối đều tới được từ khối 1), và tập S gồm k khối có chứa định nghĩa của một biến v. Hãy tính tập các khối cần chèn hàm ϕ cho v, theo thuật toán chuẩn:
Ví dụ: CFG hình thoi 1→2, 1→3, 2→4, 3→4, với S={2,3} (biến được định nghĩa ở cả hai nhánh). Khối 4 là điểm hợp nhất của hai nhánh nên DF(2)=DF(3)={4}, do đó cần chèn ϕ tại khối 4 — kết quả là {4}.
In ra 2 dòng: dòng đầu là số lượng khối cần chèn hàm ϕ; dòng thứ hai liệt kê chỉ số các khối đó theo thứ tự tăng dần, cách nhau bởi khoảng trắng (dòng này có thể rỗng nếu không có khối nào).
Ví dụ:
Đầu vào:
4
4
1 2
1 3
2 4
3 4
2
2 3
Đầu ra:
1
4
Đầu vào:
4
4
1 2
2 3
3 2
2 4
1
3
Đầu ra:
1
2
Đang tải editor...