[all-commits] [llvm/llvm-project] a60b9f: Add fatal error when running out of registers for ...

Cullen Rhodes via All-commits all-commits at lists.llvm.org
Tue Dec 8 13:31:47 PST 2020


  Branch: refs/heads/release/11.x
  Home:   https://github.com/llvm/llvm-project
  Commit: a60b9f1bf32026995080d28f7be33f2658da191e
      https://github.com/llvm/llvm-project/commit/a60b9f1bf32026995080d28f7be33f2658da191e
  Author: David Sherwood <david.sherwood at arm.com>
  Date:   2020-12-08 (Tue, 08 Dec 2020)

  Changed paths:
    M llvm/lib/Target/AArch64/AArch64CallingConvention.cpp
    M llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
    M llvm/test/CodeGen/AArch64/llvm-ir-to-intrinsic.ll
    A llvm/test/CodeGen/AArch64/sve-calling-convention-tuples-broken.ll

  Log Message:
  -----------
  Add fatal error when running out of registers for SVE tuple call arguments

When passing SVE types as arguments to function calls we can run
out of hardware SVE registers. This is normally fine, since we
switch to an indirect mode where we pass a pointer to a SVE stack
object in a GPR. However, if we switch over part-way through
processing a SVE tuple then part of it will be in registers and
the other part will be on the stack. This is wrong and we'd like
to avoid any silent ABI compatibility issues in future. For now,
I've added a fatal error when this happens until we can get a
proper fix.

NOTE: Cherry-pick contains changes to remove redundant operand from
min/max tests in 'llvm-ir-to-intrinsic.ll', which weren't originally
part of this patch since they were removed in D85142 before this landed,
but they fail otherwise.

Differential Revision: https://reviews.llvm.org/D89326

(cherry picked from commit af57a0838eba528c2e5bd805d92c611435fca0d8)


  Commit: 724f62a50241d782f9c46d98e4fb796d60953df4
      https://github.com/llvm/llvm-project/commit/724f62a50241d782f9c46d98e4fb796d60953df4
  Author: David Sherwood <david.sherwood at arm.com>
  Date:   2020-12-08 (Tue, 08 Dec 2020)

  Changed paths:
    M clang/lib/CodeGen/TargetInfo.cpp
    A clang/test/CodeGen/aarch64-varargs-sve.c
    M llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
    A llvm/test/CodeGen/AArch64/sve-varargs-callee-broken.ll
    A llvm/test/CodeGen/AArch64/sve-varargs-caller-broken.ll
    A llvm/test/CodeGen/AArch64/sve-varargs.ll

  Log Message:
  -----------
  Add fatal error for unnamed SVE variadic arguments

We don't currently support passing unnamed variadic SVE arguments
so I've added a fatal error if we hit such cases to prevent any
silent ABI issues in future.

Differential Revision: https://reviews.llvm.org/D90230

(cherry picked from commit cea69fa4dcc4fcf3be62dba49ad012879d89377d)


  Commit: 542174d77deb7f2a59bcd0b8147144d4e123cf7b
      https://github.com/llvm/llvm-project/commit/542174d77deb7f2a59bcd0b8147144d4e123cf7b
  Author: Cullen Rhodes <cullen.rhodes at arm.com>
  Date:   2020-12-08 (Tue, 08 Dec 2020)

  Changed paths:
    M llvm/include/llvm/BinaryFormat/ELF.h
    M llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
    M llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
    M llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp
    M llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
    A llvm/test/CodeGen/AArch64/variant-pcs.ll
    A llvm/test/MC/AArch64/directive-variant_pcs-err.s
    A llvm/test/MC/AArch64/directive-variant_pcs.s

  Log Message:
  -----------
  Implement .variant_pcs directive

A dynamic linker with lazy binding support may need to handle variant
PCS function symbols specially, so an ELF symbol table marking
STO_AARCH64_VARIANT_PCS [1] was added to address this.

Function symbols that follow the vector PCS are marked via the
.variant_pcs assembler directive, which takes a single parameter
specifying the symbol name and sets the STO_AARCH64_VARIANT_PCS st_other
flag in the object file.

[1] https://github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst#st-other-values

Reviewed By: sdesmalen

Differential Revision: https://reviews.llvm.org/D89138

(cherry picked from commit c87bd2d8eb378d152f2b6bde4cb088ad390a676c)


Compare: https://github.com/llvm/llvm-project/compare/79cac55bf044...542174d77deb


More information about the All-commits mailing list