Kekurangan bentuk perantara fungsional

16

Saya sedang menulis pengoptimal untuk bahasa yang mirip dengan JavaScript, dan perlu memilih representasi kode perantara. Pilihan yang jelas / tipikal akhir-akhir ini adalah Static Single Assignment (SSA).

Namun, Implementasi Kompiler Modern di C juga membahas bentuk perantara fungsional, yang pada dasarnya berarti akan berfungsi murni untuk representasi perantara (murni dalam hal hanya variabel lokal, tumpukan data masih bisa berubah, dan bukan CPS, hanya letblok sederhana dan panggilan ekor) dan memiliki beberapa keunggulan dalam hal lebih mudah untuk dipikirkan.

Agaknya itu bukan no-brainer atau semua orang sudah akan menggunakan representasi seperti itu, jadi pertanyaan saya adalah, apa kerugiannya bentuk perantara fungsional dibandingkan dengan SSA?

rwallace
sumber
3
Apa jenis analisis yang akan Anda lakukan pada bentuk peralihan ini? SSA sangat bagus untuk menghilangkan kode mati, propagasi konstan, spesialisasi parsial dan semacamnya. Jika hal-hal semacam ini tidak ada di menu Anda, Anda dapat melewati SSA dan menggunakan representasi yang lebih santai untuk lintasan analisis yang lebih sederhana. Tetapi, membuat formulir SSA adalah tugas yang sangat sepele, dan Anda dapat dengan mudah mengubah SSA menjadi CPS (dan sebaliknya), yang menggandakan manfaat.
SK-logic
Ya, saya bertujuan untuk monty penuh, cukup banyak, dan bahasa input dan format output (awalnya C ++) keduanya bahasa imperatif.
rwallace
Membuat formulir SSA adalah tugas yang sangat sepele, dan Anda dapat dengan mudah mengkonversi SSA ke CPS, juga Anda dapat mengkonversi CPS ke SSA, yang menggandakan manfaatnya.
Leon Alexis Cardinal

Jawaban:

1

SSA sangat bagus untuk menghilangkan kode mati, propagasi konstan, spesialisasi parsial dan semacamnya. Jika hal-hal semacam ini tidak ada di menu Anda, Anda dapat melewati SSA dan menggunakan representasi yang lebih santai untuk lintasan analisis yang lebih sederhana

Adromil Balais
sumber