[all-commits] [llvm/llvm-project] e08aa5: Revert "[X86][ABI] Don't preserve return regs for ...

Hans via All-commits all-commits at lists.llvm.org
Wed Feb 1 05:00:36 PST 2023


  Branch: refs/heads/release/16.x
  Home:   https://github.com/llvm/llvm-project
  Commit: e08aa5bed1e6bdbc38ba2c37a0689f78cc7e78f6
      https://github.com/llvm/llvm-project/commit/e08aa5bed1e6bdbc38ba2c37a0689f78cc7e78f6
  Author: Hans Wennborg <hans at chromium.org>
  Date:   2023-02-01 (Wed, 01 Feb 2023)

  Changed paths:
    M llvm/docs/LangRef.rst
    M llvm/lib/Target/X86/X86CallingConv.td
    M llvm/lib/Target/X86/X86ISelLowering.cpp
    R llvm/test/CodeGen/X86/preserve_allcc64-ret-double.ll
    M llvm/test/CodeGen/X86/preserve_allcc64.ll
    R llvm/test/CodeGen/X86/preserve_mostcc64-ret-double.ll
    M llvm/test/CodeGen/X86/preserve_mostcc64.ll

  Log Message:
  -----------
  Revert "[X86][ABI] Don't preserve return regs for preserve_all/preserve_most CCs"

This caused Chromium to crash, see comment on the code review.

> Currently both calling conventions preserve registers that are used to
> store a return value. This causes the returned value to be lost:
>
>   define i32 @bar() {
>     %1 = call preserve_mostcc i32 @foo()
>     ret i32 %1
>   }
>
>   define preserve_mostcc i32 @foo() {
>     ret i32 2
>     ; preserve_mostcc will restore %rax,
>     ; whatever it was before the call.
>   }
>
> This contradicts the current documentation (preserve_allcc "behaves
> identical to the `C` calling conventions on how arguments and return
> values are passed") and also breaks [[clang::preserve_most]].
>
> This change makes CSRs be preserved iff they are not used to store a
> return value (e.g. %rax for scalars, {%rax:%rdx} for __int128, %xmm0
> for double). For void functions no additional registers are
> preserved, i.e. the behaviour is backward compatible with existing
> code.
>
> Differential Revision: https://reviews.llvm.org/D141020

This reverts commit 0276fa89d7a4dbe73105c9148f947716b3d8f17f.

(cherry picked from commit faac9f215962982bdbc613e15715822568204203)




More information about the All-commits mailing list