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.
-
mentioned in commit 65ddd79b
-
mentioned in commit 2b2a3db8
-
mentioned in commit 4b0b23ae
-
mentioned in commit 43fb21b6
-
mentioned in commit 976febcc
-
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 3e62d028
-
mentioned in commit 3d840575
-
mentioned in commit 1e0a4fac
-
mentioned in commit ec99af5c
-
mentioned in commit b50fa3ab
-
mentioned in commit dcc47cf6
-
mentioned in commit ca0af95e
-
mentioned in commit ad27b7c8
-
mentioned in commit 8dff5b23
-
mentioned in commit ed2f14de
-
mentioned in commit ghc/ghc@9f5046b3
Please register or sign in to comment