diff options
| author | Duraid Madina <duraid@octopus.com.au> | 2006-09-04 06:21:35 +0000 |
|---|---|---|
| committer | Duraid Madina <duraid@octopus.com.au> | 2006-09-04 06:21:35 +0000 |
| commit | cf6749e4c0912f0631824914b4d97e57849b33ad (patch) | |
| tree | 71ed66f8af02966a36f37d9d137e36a919228a31 /llvm/lib/Transforms/Utils | |
| parent | a59bee75a725bb66a5aec2b114040a938683720a (diff) | |
| download | bcm5719-llvm-cf6749e4c0912f0631824914b4d97e57849b33ad.tar.gz bcm5719-llvm-cf6749e4c0912f0631824914b4d97e57849b33ad.zip | |
add setJumpBufSize() and setJumpBufAlignment() to target-lowering.
Call these from your backend to enjoy setjmp/longjmp goodness, see
lib/Target/IA64/IA64ISelLowering.cpp for an example
llvm-svn: 30095
Diffstat (limited to 'llvm/lib/Transforms/Utils')
| -rw-r--r-- | llvm/lib/Transforms/Utils/LowerInvoke.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Utils/LowerInvoke.cpp b/llvm/lib/Transforms/Utils/LowerInvoke.cpp index 8702810837c..73d703b7388 100644 --- a/llvm/lib/Transforms/Utils/LowerInvoke.cpp +++ b/llvm/lib/Transforms/Utils/LowerInvoke.cpp @@ -45,6 +45,7 @@ #include "llvm/ADT/Statistic.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Compiler.h" +#include "llvm/Target/TargetLowering.h" #include <csetjmp> using namespace llvm; @@ -67,9 +68,12 @@ namespace { const Type *JBLinkTy; GlobalVariable *JBListHead; Function *SetJmpFn, *LongJmpFn; + + // We peek in TLI to grab the target's jmp_buf size and alignment + const TargetLowering *TLI; + public: - LowerInvoke(unsigned Size = 200, unsigned Align = 0) : JumpBufSize(Size), - JumpBufAlign(Align) {} + LowerInvoke(const TargetLowering *tli = NULL) : TLI(tli) { } bool doInitialization(Module &M); bool runOnFunction(Function &F); @@ -89,9 +93,6 @@ namespace { void rewriteExpensiveInvoke(InvokeInst *II, unsigned InvokeNo, AllocaInst *InvokeNum, SwitchInst *CatchSwitch); bool insertExpensiveEHSupport(Function &F); - - unsigned JumpBufSize; - unsigned JumpBufAlign; }; RegisterPass<LowerInvoke> @@ -101,9 +102,8 @@ namespace { const PassInfo *llvm::LowerInvokePassID = X.getPassInfo(); // Public Interface To the LowerInvoke pass. -FunctionPass *llvm::createLowerInvokePass(unsigned JumpBufSize, - unsigned JumpBufAlign) { - return new LowerInvoke(JumpBufSize, JumpBufAlign); +FunctionPass *llvm::createLowerInvokePass(const TargetLowering *TLI) { + return new LowerInvoke(TLI); } // doInitialization - Make sure that there is a prototype for abort in the @@ -113,7 +113,7 @@ bool LowerInvoke::doInitialization(Module &M) { AbortMessage = 0; if (ExpensiveEHSupport) { // Insert a type for the linked list of jump buffers. - const Type *JmpBufTy = ArrayType::get(VoidPtrTy, JumpBufSize); + const Type *JmpBufTy = ArrayType::get(VoidPtrTy, TLI->getJumpBufSize()); { // The type is recursive, so use a type holder. std::vector<const Type*> Elements; @@ -453,7 +453,7 @@ bool LowerInvoke::insertExpensiveEHSupport(Function &F) { // that needs to be restored on all exits from the function. This is an // alloca because the value needs to be live across invokes. AllocaInst *JmpBuf = - new AllocaInst(JBLinkTy, 0, JumpBufAlign, "jblink", F.begin()->begin()); + new AllocaInst(JBLinkTy, 0, TLI->getJumpBufAlignment(), "jblink", F.begin()->begin()); std::vector<Value*> Idx; Idx.push_back(Constant::getNullValue(Type::IntTy)); |

