summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/RISCV/Utils
diff options
context:
space:
mode:
authorShiva Chen <shiva@andestech.com>2019-10-15 15:11:35 +0800
committershiva <shiva0217@gmail.com>2019-11-16 12:39:53 +0800
commitcf6cf0cd147ac2524c3533fd7c7ada7f95f6da60 (patch)
tree3d0a037b9119bd6c991651c9ea2265d289935dce /llvm/lib/Target/RISCV/Utils
parent77cfcd75092b57693d40123a013e59295634a945 (diff)
downloadbcm5719-llvm-cf6cf0cd147ac2524c3533fd7c7ada7f95f6da60.tar.gz
bcm5719-llvm-cf6cf0cd147ac2524c3533fd7c7ada7f95f6da60.zip
[RISCV] Handle variable sized objects with the stack need to be realigned
Differential Revision: https://reviews.llvm.org/D68979
Diffstat (limited to 'llvm/lib/Target/RISCV/Utils')
-rw-r--r--llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.cpp6
-rw-r--r--llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.h4
2 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.cpp b/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.cpp
index bc5395768ca..9c54c3749a1 100644
--- a/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.cpp
+++ b/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.cpp
@@ -66,6 +66,12 @@ ABI computeTargetABI(const Triple &TT, FeatureBitset FeatureBits,
return ABI_LP64;
return ABI_ILP32;
}
+
+// To avoid the BP value clobbered by a function call, we need to choose a
+// callee saved register to save the value. RV32E only has X8 and X9 as callee
+// saved registers and X8 will be used as fp. So we choose X9 as bp.
+Register getBPReg() { return RISCV::X9; }
+
} // namespace RISCVABI
namespace RISCVFeatures {
diff --git a/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.h
index 30e475e80a0..738f635ada9 100644
--- a/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.h
+++ b/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.h
@@ -13,6 +13,7 @@
#ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVBASEINFO_H
#define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVBASEINFO_H
+#include "RISCVRegisterInfo.h"
#include "MCTargetDesc/RISCVMCTargetDesc.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
@@ -195,6 +196,9 @@ enum ABI {
ABI computeTargetABI(const Triple &TT, FeatureBitset FeatureBits,
StringRef ABIName);
+// Returns the register used to hold the stack pointer after realignment.
+Register getBPReg();
+
} // namespace RISCVABI
namespace RISCVFeatures {
OpenPOWER on IntegriCloud