[RISCV] Add support for -ffixed-xX flags
authorSimon Cook <simon.cook@embecosm.com>
Tue, 22 Oct 2019 20:25:01 +0000 (21:25 +0100)
committerSimon Cook <simon.cook@embecosm.com>
Tue, 22 Oct 2019 20:25:01 +0000 (21:25 +0100)
commitaed9d6d64a38d155cd09232da5640b5ade069bd9
tree039d8d57a1065a034a383b13a5448fa7c993704a
parent68f5ca4e19c16f12895a6f0b9fbabc1d86c4b6b0
[RISCV] Add support for -ffixed-xX flags

This adds support for reserving GPRs such that the compiler will not
choose a register for register allocation. The implementation follows
the same design as for AArch64; each reserved register becomes a target
feature and used for getting the reserved registers for a given
MachineFunction. The backend checks that it does not need to write to
any reserved register; if it does a relevant error is generated.

Differential Revision: https://reviews.llvm.org/D67185
13 files changed:
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Arch/RISCV.cpp
clang/test/Driver/riscv-fixed-x-register.c [new file with mode: 0644]
llvm/lib/Target/RISCV/RISCV.td
llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/lib/Target/RISCV/RISCVISelLowering.h
llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
llvm/lib/Target/RISCV/RISCVRegisterInfo.h
llvm/lib/Target/RISCV/RISCVSubtarget.cpp
llvm/lib/Target/RISCV/RISCVSubtarget.h
llvm/test/CodeGen/RISCV/reserved-reg-errors.ll [new file with mode: 0644]
llvm/test/CodeGen/RISCV/reserved-regs.ll [new file with mode: 0644]