compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs
This patch makes the STG->Cmm backend avoid saving foreign call target to local when there are no caller-save GlobalRegs. Since 321941a8, when we lower a foreign call, we unconditionally save the foreign call target to a temporary local first, then rely on cmmSink to clean it up later, which only happens with -fcmm-sink (implied by -O) and not in unoptimized code. And this is troublesome for the wasm backend NCG, which needs to infer a foreign call target symbol's type signature from the Cmm call site. Previously, the NCG has been emitting incorrect type signatures for unoptimized code, which happens to work with `wasm-ld` most of the time, but this is never future-proof against upstream toolchain updates, and it causes horrible breakages when LTO objects are included in linker input. Hence this patch. (cherry picked from commit 8dd8a076)
Loading
-
mentioned in commit 4b0b23ae
-
mentioned in commit 43fb21b6
-
mentioned in commit 602537bb
-
mentioned in commit 88f5a1a5
-
mentioned in commit de7c02b5
-
mentioned in commit c657ffc4
-
mentioned in commit 382337a0
-
mentioned in commit bf64c99a
-
mentioned in commit 25a457d1
-
mentioned in commit 755fe603
-
mentioned in commit 6f00a035
-
mentioned in commit 3d840575
-
mentioned in commit dcc47cf6
-
mentioned in commit ca0af95e
-
mentioned in commit 8dff5b23
-
mentioned in commit ed2f14de
Please register or sign in to comment