Skip to content
  • Cheng Shao's avatar
    1e0a4fac
    compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs · 1e0a4fac
    Cheng Shao authored
    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)
    1e0a4fac
    compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs
    Cheng Shao authored
    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