(func $main/test (type $t1) (param $p0 i32) (param $p1 i32)
...)
(func $main/test|trampoline (export "test") (type $t1) (param $p0 i32) (param $p1 i32)
block $B0
block $B1
block $B2
get_global $g25
i32.const 1
i32.sub
br_table $B1 $B0 $B2
end
unreachable
end
i32.const 0
set_local $p1
end
get_local $p0
get_local $p1
call $main/test)
(func $~setargc (export "_setargc") (type $t2) (param $p0 i32)
get_local $p0
set_global $g25)
Trampolin dihasilkan jika fungsi dengan argumen opsional dipanggil dengan argumen yang dihilangkan. Ini pada dasarnya membungkus inisialisasi argumen opsional dalam konteks yang tepat dan memanggil fungsi asli dengan mereka. Jika Anda selalu memanggil fungsi dengan argumen opsional dengan semua argumen yang disediakan, trampolin tidak harus dibuat.
Ini mengingatkan saya bahwa beberapa pengoptimalan dapat dilakukan di sana. Salah satunya adalah jika nilai default dari argumen yang dihilangkan adalah nol, yang lain adalah jika nilai default adalah konstanta yang dapat dimasukkan ke dalam panggilan.
Menutup masalah ini untuk saat ini karena belum menerima balasan apa pun baru-baru ini, jadi saya berasumsi bahwa pengoptimalan yang diterapkan di atas cukup mengatasinya. Jangan ragu untuk membuka kembali jika perlu!
Komentar yang paling membantu
Ini mengingatkan saya bahwa beberapa pengoptimalan dapat dilakukan di sana. Salah satunya adalah jika nilai default dari argumen yang dihilangkan adalah nol, yang lain adalah jika nilai default adalah konstanta yang dapat dimasukkan ke dalam panggilan.