Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: lib/Transforms/NaCl/PNaClSjLjEH.cpp

Issue 1151093004: Changes from 3.7 merge to files not in upstream (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- PNaClSjLjEH.cpp - Lower C++ exception handling to use setjmp()------===// 1 //===- PNaClSjLjEH.cpp - Lower C++ exception handling to use setjmp()------===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // The LLVM Compiler Infrastructure
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // The PNaClSjLjEH pass is part of an implementation of C++ exception 10 // The PNaClSjLjEH pass is part of an implementation of C++ exception
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 // invoke instructions in the function. 185 // invoke instructions in the function.
186 Type *I32 = Type::getInt32Ty(M->getContext()); 186 Type *I32 = Type::getInt32Ty(M->getContext());
187 Frame = new AllocaInst(ExceptionFrameTy, ConstantInt::get(I32, 1), 187 Frame = new AllocaInst(ExceptionFrameTy, ConstantInt::get(I32, 1),
188 kPNaClJmpBufAlign, "invoke_frame"); 188 kPNaClJmpBufAlign, "invoke_frame");
189 Func->getEntryBlock().getInstList().push_front(Frame); 189 Func->getEntryBlock().getInstList().push_front(Frame);
190 190
191 // Calculate addresses of fields in the exception frame. 191 // Calculate addresses of fields in the exception frame.
192 Value *JmpBufIndexes[] = { ConstantInt::get(I32, 0), 192 Value *JmpBufIndexes[] = { ConstantInt::get(I32, 0),
193 ConstantInt::get(I32, 0), 193 ConstantInt::get(I32, 0),
194 ConstantInt::get(I32, 0) }; 194 ConstantInt::get(I32, 0) };
195 FrameJmpBuf = GetElementPtrInst::Create(Frame, JmpBufIndexes, 195 FrameJmpBuf = GetElementPtrInst::Create(
196 "invoke_jmp_buf"); 196 ExceptionFrameTy, Frame, JmpBufIndexes, "invoke_jmp_buf");
197 FrameJmpBuf->insertAfter(Frame); 197 FrameJmpBuf->insertAfter(Frame);
198 198
199 Value *NextPtrIndexes[] = { ConstantInt::get(I32, 0), 199 Value *NextPtrIndexes[] = { ConstantInt::get(I32, 0),
200 ConstantInt::get(I32, 1) }; 200 ConstantInt::get(I32, 1) };
201 FrameNextPtr = GetElementPtrInst::Create(Frame, NextPtrIndexes, 201 FrameNextPtr = GetElementPtrInst::Create(
202 "invoke_next"); 202 ExceptionFrameTy, Frame, NextPtrIndexes, "invoke_next");
203 FrameNextPtr->insertAfter(Frame); 203 FrameNextPtr->insertAfter(Frame);
204 204
205 Value *ExcInfoIndexes[] = { ConstantInt::get(I32, 0), 205 Value *ExcInfoIndexes[] = { ConstantInt::get(I32, 0),
206 ConstantInt::get(I32, 2) }; 206 ConstantInt::get(I32, 2) };
207 FrameExcInfo = GetElementPtrInst::Create(Frame, ExcInfoIndexes, 207 FrameExcInfo = GetElementPtrInst::Create(
208 "exc_info_ptr"); 208 ExceptionFrameTy, Frame, ExcInfoIndexes, "exc_info_ptr");
209 FrameExcInfo->insertAfter(Frame); 209 FrameExcInfo->insertAfter(Frame);
210 } 210 }
211 211
212 // Creates the helper function that will do the setjmp() call and 212 // Creates the helper function that will do the setjmp() call and
213 // function call for implementing Invoke. Creates the call to the 213 // function call for implementing Invoke. Creates the call to the
214 // helper function. Returns a Value which is zero on the normal 214 // helper function. Returns a Value which is zero on the normal
215 // execution path and non-zero if the landingpad block should be 215 // execution path and non-zero if the landingpad block should be
216 // entered. 216 // entered.
217 Value *FuncRewriter::createSetjmpWrappedCall(InvokeInst *Invoke) { 217 Value *FuncRewriter::createSetjmpWrappedCall(InvokeInst *Invoke) {
218 Type *I32 = Type::getInt32Ty(Func->getContext()); 218 Type *I32 = Type::getInt32Ty(Func->getContext());
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 FuncRewriter Rewriter(ExceptionFrameTy, &ExcInfoWriter, Func); 456 FuncRewriter Rewriter(ExceptionFrameTy, &ExcInfoWriter, Func);
457 Rewriter.expandFunc(); 457 Rewriter.expandFunc();
458 } 458 }
459 ExcInfoWriter.defineGlobalVariables(&M); 459 ExcInfoWriter.defineGlobalVariables(&M);
460 return true; 460 return true;
461 } 461 }
462 462
463 ModulePass *llvm::createPNaClSjLjEHPass() { 463 ModulePass *llvm::createPNaClSjLjEHPass() {
464 return new PNaClSjLjEH(); 464 return new PNaClSjLjEH();
465 } 465 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698