[all-commits] [llvm/llvm-project] 07f7c0: [RISCV] Add support for save/restore of callee-sav...

lewis-revill via All-commits all-commits at lists.llvm.org
Tue Feb 11 13:25:49 PST 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 07f7c00208b393296f8f27d6cd3cec2b11d86fd8
      https://github.com/llvm/llvm-project/commit/07f7c00208b393296f8f27d6cd3cec2b11d86fd8
  Author: lewis-revill <lewis.revill at embecosm.com>
  Date:   2020-02-11 (Tue, 11 Feb 2020)

  Changed paths:
    M clang/lib/Driver/ToolChains/Arch/RISCV.cpp
    M clang/test/Driver/riscv-features.c
    M llvm/lib/Target/RISCV/RISCV.td
    M llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
    M llvm/lib/Target/RISCV/RISCVFrameLowering.h
    M llvm/lib/Target/RISCV/RISCVMachineFunctionInfo.h
    M llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
    M llvm/lib/Target/RISCV/RISCVRegisterInfo.h
    M llvm/lib/Target/RISCV/RISCVSubtarget.h
    A llvm/test/CodeGen/RISCV/saverestore.ll
    M llvm/test/CodeGen/RISCV/shrinkwrap.ll

  Log Message:
  -----------
  [RISCV] Add support for save/restore of callee-saved registers via libcalls

This patch adds the support required for using the __riscv_save and
__riscv_restore libcalls to implement a size-optimization for prologue
and epilogue code, whereby the spill and restore code of callee-saved
registers is implemented by common functions to reduce code duplication.

Logic is also included to ensure that if both this optimization and
shrink wrapping are enabled then the prologue and epilogue code can be
safely inserted into the basic blocks chosen by shrink wrapping.

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


  Commit: a6bd1256ce8ae5d5faf66a2ed198e0bc8674ee97
      https://github.com/llvm/llvm-project/commit/a6bd1256ce8ae5d5faf66a2ed198e0bc8674ee97
  Author: lewis-revill <lewis.revill at embecosm.com>
  Date:   2020-02-11 (Tue, 11 Feb 2020)

  Changed paths:
    M llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
    A llvm/test/DebugInfo/RISCV/saverestore.ll

  Log Message:
  -----------
  [DebugInfo] Call site entries cannot be generated for FrameSetup calls

Instructions marked as FrameSetup do not cause requestLabelAfterInsn to
be called and so no such label is generated. Call instructions which
require call site entries to be generated require this label to be
present in order to calculate the return PC offset/address, but the
check for whether the call instruction is marked as FrameSetup was not
present.

Therefore in the case where a call instruction is marked as FrameSetup,
an assertion failure occurs if a call site entry is to be generated.
This is the case with RISC-V's implementation of save/restore via
library calls.

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


Compare: https://github.com/llvm/llvm-project/compare/52aec3221fa5...a6bd1256ce8a


More information about the All-commits mailing list