diff options
| author | Bill Wendling <isanbard@gmail.com> | 2011-09-28 03:36:43 +0000 |
|---|---|---|
| committer | Bill Wendling <isanbard@gmail.com> | 2011-09-28 03:36:43 +0000 |
| commit | 66b110f57123b3deee657ad368b95460d5a414a7 (patch) | |
| tree | bf5e02c4591ac97028e2ea0b1b728856fd2f2616 /llvm/lib/CodeGen/SelectionDAG | |
| parent | 2e76ca9d9a6ae096fb93d576d10ae8c527cd4743 (diff) | |
| download | bcm5719-llvm-66b110f57123b3deee657ad368b95460d5a414a7.tar.gz bcm5719-llvm-66b110f57123b3deee657ad368b95460d5a414a7.zip | |
Create and use an llvm.eh.sjlj.functioncontext intrinsic.
This intrinsic is used to pass the index of the function context to the back-end
for further processing. The back-end is in charge of filling in the rest of the
entries.
llvm-svn: 140676
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 9d86c759b82..b2b93c9ff57 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -4754,6 +4754,14 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) { MMI.setCurrentCallSite(CI->getZExtValue()); return 0; } + case Intrinsic::eh_sjlj_functioncontext: { + // Get and store the index of the function context. + MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo(); + AllocaInst *FnCtx = cast<AllocaInst>(I.getArgOperand(0)); + int FI = FuncInfo.StaticAllocaMap[FnCtx]; + MFI->setFunctionContextIndex(FI); + return 0; + } case Intrinsic::eh_sjlj_setjmp: { setValue(&I, DAG.getNode(ISD::EH_SJLJ_SETJMP, dl, MVT::i32, getRoot(), getValue(I.getArgOperand(0)))); |

