aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target
diff options
context:
space:
mode:
Diffstat (limited to 'backend/lib/Target')
-rw-r--r--backend/lib/Target/RISCV/RISCVFrameLowering.cpp6
-rw-r--r--backend/lib/Target/RISCV/RISCVPipeline.cpp6
2 files changed, 11 insertions, 1 deletions
diff --git a/backend/lib/Target/RISCV/RISCVFrameLowering.cpp b/backend/lib/Target/RISCV/RISCVFrameLowering.cpp
index eefab63..7ffaccb 100644
--- a/backend/lib/Target/RISCV/RISCVFrameLowering.cpp
+++ b/backend/lib/Target/RISCV/RISCVFrameLowering.cpp
@@ -1276,6 +1276,12 @@ class RISCVFrameLowering final : public TargetFrameLowering {
public:
explicit RISCVFrameLowering(const RISCVSubtarget &Subtarget) noexcept : Subtarget(Subtarget) {}
+ [[nodiscard]] PhysicalRegister
+ initialCFARegister(const MachineFunction &,
+ const TargetDescription &Target) const noexcept override {
+ return Target.stackPointerRegisterToSaveRestore();
+ }
+
[[nodiscard]] bool
isCalleeSavedRegister(PhysicalRegister Reg, const MachineFunction &,
const TargetDescription &Target) const noexcept override {
diff --git a/backend/lib/Target/RISCV/RISCVPipeline.cpp b/backend/lib/Target/RISCV/RISCVPipeline.cpp
index 8ba86ce..e094591 100644
--- a/backend/lib/Target/RISCV/RISCVPipeline.cpp
+++ b/backend/lib/Target/RISCV/RISCVPipeline.cpp
@@ -6,6 +6,7 @@
#include "GISel/RISCVRegisterBankInfo.h"
#include "RISCV.h"
#include "RISCVInstrInfo.h"
+#include "rcc/CodeGen/CFIInstrInserter.h"
#include "rcc/CodeGen/GlobalISel/Combiner.h"
#include "rcc/CodeGen/GlobalISel/InstructionSelect.h"
#include "rcc/CodeGen/GlobalISel/Legalizer.h"
@@ -97,12 +98,15 @@ template <typename PassT, typename... ArgumentT>
Added = addRegisterAllocationPipeline(Pipeline, Subtarget, Options);
if (!Added)
return std::unexpected(Added.error());
- return addPostRegisterAllocationPipeline(
+ Added = addPostRegisterAllocationPipeline(
Pipeline,
optimizationPipelineInfo(Subtarget, Options.DebugMachineScheduler,
Options.DebugPrologueEpilogue),
MachineOptimizationPipelineOptions{.UseTargetCopyInstructions =
Options.UseTargetCopyInstructions});
+ if (!Added)
+ return std::unexpected(Added.error());
+ return addPass<CFIInstrInserterPass>(Pipeline, Subtarget.frameLowering());
}
} // namespace