Minor cleanups, give credit, remove code that should not be necessary, and
authorChris Lattner <sabre@nondot.org>
Mon, 15 Sep 2003 05:43:05 +0000 (05:43 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 15 Sep 2003 05:43:05 +0000 (05:43 +0000)
was a "major hack"  :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8524 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/LowerSetJmp.cpp

index e0d167a1a1e607fac53719544ccef25f850d65b2..fc9af5bc57fdc88c8d711a9f9e93cf256d99343c 100644 (file)
@@ -1,7 +1,7 @@
 //===- LowerSetJmp.cpp - Code pertaining to lowering set/long jumps -------===//
 //
 //  This file implements the lowering of setjmp and longjmp to use the
-//  LLVM invoke instruction as necessary.
+//  LLVM invoke and unwind instructions as necessary.
 //
 //  Lowering of longjmp is fairly trivial. We replace the call with a
 //  call to the LLVM library function "__llvm_sjljeh_throw_longjmp()".
@@ -17,6 +17,8 @@
 //  original except block being executed if it isn't a longjmp except
 //  that is handled by that function.
 //
+// This pass was contributed to LLVM by Bill Wendling.
+//
 //===----------------------------------------------------------------------===//
 
 //===----------------------------------------------------------------------===//
@@ -218,10 +220,8 @@ bool LowerSetJmp::IsTransformableFunction(const std::string& Name)
 {
   std::string SJLJEh("__llvm_sjljeh");
 
-  if (Name.size() > SJLJEh.size()) {
-    std::string N(Name.begin(), Name.begin() + SJLJEh.size());
-    return N != SJLJEh;
-  }
+  if (Name.size() > SJLJEh.size())
+    return std::string(Name.begin(), Name.begin() + SJLJEh.size()) != SJLJEh;
 
   return true;
 }
@@ -354,29 +354,6 @@ void LowerSetJmp::TransformSetJmpCall(CallInst* Inst)
                                                      SetJmpIDMap[Func]++), 0),
                "", Inst);
 
-  // FIXME: This is a nasty piece of code. We want the jump buffer to
-  // dominate all uses. However, we're doing unnatural things to the CFG
-  // which cause this dominance to be lost. The only way to guarantee we
-  // get it back is to place where the jump buffer is being allocated
-  // into the entry block. That's what this code does. The alloca for the
-  // jump buffer is followed by a getelementptr call.
-  if (GetElementPtrInst* GEP = dyn_cast<GetElementPtrInst>(Inst->getOperand(1)))
-    if (GEP->use_size() > 1) {
-      if (AllocaInst* AI = dyn_cast<AllocaInst>(GEP->getPointerOperand())) {
-        BasicBlock& Entry = Func->getEntryNode();
-        BasicBlock::InstListType& EntryIL = Entry.getInstList();
-
-        Instruction* NewAI = AI->clone();
-        Instruction* NewGEP = GEP->clone();
-        NewAI->setName(AI->getName());
-        NewGEP->setName(GEP->getName());
-        EntryIL.push_front(NewGEP);
-        EntryIL.push_front(NewAI);
-        GEP->replaceAllUsesWith(NewGEP);
-        AI->replaceAllUsesWith(NewAI);
-      }
-    }
-
   // Change the setjmp call into a branch statement. We'll remove the
   // setjmp call in a little bit. No worries.
   BasicBlock* SetJmpContBlock = ABlock->splitBasicBlock(Inst);