Tối ưu hoá peephole (peephole optimization) là kỹ thuật tối ưu bytecode bằng cách xét một cửa sổ nhỏ các lệnh liên tiếp và thay thế bằng một dãy lệnh tương đương ngắn/nhanh hơn. Cho một chương trình thẳng (không nhãn, không rẽ nhánh) gồm các lệnh PUSH x, ADD, SUB, MUL, DUP, POP (lưu ý: chương trình chỉ mang tính cú pháp để luyện viết lại, không cần đảm bảo có thể thực thi hợp lệ mà không tràn dưới ngăn xếp — bạn chỉ cần áp dụng máy móc các luật viết lại dưới đây trên dãy lệnh).
Áp dụng lặp đi lặp lại các luật viết lại sau, cho đến khi không còn luật nào áp dụng được (điểm bất động):
PUSH a, PUSH b, ADD → PUSH (a+b)PUSH a, PUSH b, SUB → PUSH (a-b)PUSH a, PUSH b, MUL → PUSH (a*b)PUSH a, POP → (xoá cả hai lệnh)PUSH a, DUP → PUSH a, PUSH aThuật toán xác định (bắt buộc tuân theo để đảm bảo kết quả duy nhất): lặp lại nhiều vòng; ở mỗi vòng, quét từ trái sang phải để tìm vị trí i nhỏ nhất mà tại đó có một luật khớp (luật 1–3 xét cửa sổ 3 lệnh, luật 4–5 xét cửa sổ 2 lệnh; tại một vị trí không thể có hai luật cùng khớp), áp dụng luật đó, rồi bắt đầu lại việc quét từ đầu danh sách đã cập nhật. Dừng khi một vòng quét đầy đủ không tìm thấy vị trí nào khớp.
Ví dụ: PUSH 3; DUP; ADD → (luật 5 tại vị trí 0) PUSH 3; PUSH 3; ADD → (luật 1 tại vị trí 0) PUSH 6.
Dòng đầu chứa số nguyên n (0≤n≤1000) là số lệnh. n dòng tiếp theo là các lệnh theo cú pháp trên (các số nguyên có trị tuyệt đối không vượt quá 109, kết quả trung gian không vượt quá 1015 về trị tuyệt đối).
In ra danh sách lệnh sau khi tối ưu, mỗi lệnh một dòng, theo đúng cú pháp ban đầu (PUSH x hoặc tên lệnh). Nếu danh sách rỗng sau khi tối ưu (hoặc n=0), in ra một dòng trống.
Ví dụ:
Đầu vào:
3
PUSH 3
DUP
ADD
Đầu ra:
PUSH 6
Đầu vào:
5
PUSH 1
PUSH 2
PUSH 3
ADD
ADD
Đầu ra:
PUSH 6
Đang tải editor...