[Test] Optimizasyon — Dead Code Elimination Doğrulama (Ölü Kod Temizliği) #105
Labels
No Label
cli-ux
faz-plani
felsefe-gozden-gecir
ffi-builtin
fikir
gelecek-vizyon
ir-vm
kalite-mimari
moduller-import
test-senaryosu
tip-sistemi
tooling-lsp
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: saqut/saqut-compiler#105
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Giriş (Nedir, Neden Önemli?)
Faz 4'ün DCE (Dead Code Elimination, Ölü Kod Eleme) pass'i, erişilemez kodu ve kullanılmayan değişkenleri temizlemeli. Bu issue, "ölü kod" sayılan farklı durumların her birini ayrı ayrı örnekler — DCE'nin sadece "return sonrası kod" ile sınırlı kalmaması gerektiğini gösterir.
Test Kodu (
examples/tests/opt_dead_code.sqt)Beklenen Davranış
saqut ast examples/tests/opt_dead_code.sqt --optimizedçıktısında:int kullanilmayan = 99;satırı silinmiş olmalı (referans sayısı 0 → Faz 2'ninreferenceslistesi boş).print(n);(return sonrası) silinmiş olmalı.int olu = 5; return olu;(fonksiyonun sonreturn -1;'inden sonraki erişilemez kuyruk) silinmiş olmalı.W001(kullanılmayan değişken), iki adetW003(erişilemez kod) — konum bilgileriyle (satır/sütun) birlikte.saqut ast examples/tests/opt_dead_code.sqt(bayraksız, optimize edilmemiş): hiçbir satır silinmemiş, ama uyarılar yine de raporlanabilir (uyarı raporlama optimizasyondan bağımsız olabilir — bu ayrım netleştirilmeli).saqut run examples/tests/opt_dead_code.sqtçıktısı (optimize edilsin/edilmesin aynı olmalı — DCE anlamı değiştirmez, sadece temizler):10Açık Sorular / Bağlı Fazlar
W001) tespiti Faz 2'ninreferencessayacına dayanır — ama bu sayaç optimize edilmemiş orijinal AST'de mi tutulur, yoksa her fixpoint turunda klon üzerinde yeniden mi hesaplanır (ADR-009, "flow-bound analiz her turda klon üzerinde yeniden hesaplanır")? Bu örnek, o kararın doğru uygulanıp uygulanmadığının testi.return'den sonraki kod) ile "if içindeki return sonrası kod" aynıisReachable=falsemekanizmasıyla mı işaretleniyor — yoksa farklı kod yolları mı?İmza/Yorum: "deadcode elimination eklenecek" değil, tam olarak kullanıcının istediği gibi: "optimizasyonlu/optimizasyonsuz çıktı karşılaştırıldığında gereksiz kod gözlemlenene kadar" çalışılacak somut hedef budur.
Golden test eklendi:
tests/golden/opt/dce.sqt. Return sonrası ölü kod (print(99)) programı etkilemiyor, çıktı 10/0/0. 9/9 ctest geçti.Yeniden yazıldı. Golden değer artık
saqut ir --optimizedIR dump'ı. Optimize edilmişhesaplafonksiyonundaLOAD_CONST 99+CALLHOST printinstruction'ları silindi — DCE kanıtlandı. Bonus:main'de-3literali doğrudanLOAD_CONST s4 = -3(folding de devrede). Yanıltıcı run-output testi kaldırıldı.