diff options
author | Jessica Paquette <jpaquette@apple.com> | 2019-04-02 22:46:31 +0000 |
---|---|---|
committer | Jessica Paquette <jpaquette@apple.com> | 2019-04-02 22:46:31 +0000 |
commit | ed23352379c83f0d30fbaa1770af4dd8d06a50c6 (patch) | |
tree | 0e47ffe0cd359613694d4a1beaf2e350e6159b42 /llvm/lib | |
parent | ea2e2279269319ca47d4767e8dc5984aa8a5ee35 (diff) | |
download | bcm5719-llvm-ed23352379c83f0d30fbaa1770af4dd8d06a50c6.tar.gz bcm5719-llvm-ed23352379c83f0d30fbaa1770af4dd8d06a50c6.zip |
[GlobalISel] Add IRTranslator support for llvm.stacksave and llvm.stackrestore
Also update arm64-irtranslator.ll.
Differential Revision: https://reviews.llvm.org/D60140
llvm-svn: 357538
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 8528636a67d..f60f7845655 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1046,6 +1046,34 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID, PtrTy.getSizeInBits() / 8, 8)); return true; } + case Intrinsic::stacksave: { + // Save the stack pointer to the location provided by the intrinsic. + unsigned Reg = getOrCreateVReg(CI); + unsigned StackPtr = MF->getSubtarget() + .getTargetLowering() + ->getStackPointerRegisterToSaveRestore(); + + // If the target doesn't specify a stack pointer, then fall back. + if (!StackPtr) + return false; + + MIRBuilder.buildCopy(Reg, StackPtr); + return true; + } + case Intrinsic::stackrestore: { + // Restore the stack pointer from the location provided by the intrinsic. + unsigned Reg = getOrCreateVReg(*CI.getArgOperand(0)); + unsigned StackPtr = MF->getSubtarget() + .getTargetLowering() + ->getStackPointerRegisterToSaveRestore(); + + // If the target doesn't specify a stack pointer, then fall back. + if (!StackPtr) + return false; + + MIRBuilder.buildCopy(StackPtr, Reg); + return true; + } case Intrinsic::cttz: case Intrinsic::ctlz: { ConstantInt *Cst = cast<ConstantInt>(CI.getArgOperand(1)); |