diff options
author | Chris Lattner <sabre@nondot.org> | 2004-11-12 22:42:57 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-11-12 22:42:57 +0000 |
commit | 44c94b96710a653e467dbf8d34ce9540ff66a1a0 (patch) | |
tree | 332bc9b68fa4d5c3512ada401ad8d7e1942f3ede /lib | |
parent | 5c911ab6f14de4f891f25e08a3977548917c8ec6 (diff) | |
download | external_llvm-44c94b96710a653e467dbf8d34ce9540ff66a1a0.zip external_llvm-44c94b96710a653e467dbf8d34ce9540ff66a1a0.tar.gz external_llvm-44c94b96710a653e467dbf8d34ce9540ff66a1a0.tar.bz2 |
Simplify handling of constant initializers
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17696 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Utils/LowerInvoke.cpp | 49 |
1 files changed, 13 insertions, 36 deletions
diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp index 2c6cf7e..33ed896 100644 --- a/lib/Transforms/Utils/LowerInvoke.cpp +++ b/lib/Transforms/Utils/LowerInvoke.cpp @@ -55,7 +55,6 @@ namespace { // Used for both models. Function *WriteFn; Function *AbortFn; - Constant *AbortMessageInit; Value *AbortMessage; unsigned AbortMessageLength; @@ -120,24 +119,18 @@ bool LowerInvoke::doInitialization(Module &M) { LongJmpFn = M.getOrInsertFunction("llvm.longjmp", Type::VoidTy, PointerType::get(JmpBufTy), Type::IntTy, 0); - + // The abort message for expensive EH support tells the user that the // program 'unwound' without an 'invoke' instruction. Constant *Msg = ConstantArray::get("ERROR: Exception thrown, but not caught!\n"); AbortMessageLength = Msg->getNumOperands()-1; // don't include \0 - AbortMessageInit = Msg; - - GlobalVariable *MsgGV = M.getGlobalVariable("abort.msg", Msg->getType()); - if (MsgGV && (!MsgGV->hasInitializer() || MsgGV->getInitializer() != Msg)) - MsgGV = 0; - - if (MsgGV) { - std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy)); - AbortMessage = - ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); - } - + + GlobalVariable *MsgGV = new GlobalVariable(Msg->getType(), true, + GlobalValue::InternalLinkage, + Msg, "abortmsg", &M); + std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy)); + AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); } else { // The abort message for cheap EH support tells the user that EH is not // enabled. @@ -145,17 +138,12 @@ bool LowerInvoke::doInitialization(Module &M) { ConstantArray::get("Exception handler needed, but not enabled. Recompile" " program with -enable-correct-eh-support.\n"); AbortMessageLength = Msg->getNumOperands()-1; // don't include \0 - AbortMessageInit = Msg; - - GlobalVariable *MsgGV = M.getGlobalVariable("abort.msg", Msg->getType()); - if (MsgGV && (!MsgGV->hasInitializer() || MsgGV->getInitializer() != Msg)) - MsgGV = 0; - - if (MsgGV) { - std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy)); - AbortMessage = - ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); - } + + GlobalVariable *MsgGV = new GlobalVariable(Msg->getType(), true, + GlobalValue::InternalLinkage, + Msg, "abortmsg", &M); + std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy)); + AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); } // We need the 'write' and 'abort' functions for both models. @@ -183,17 +171,6 @@ bool LowerInvoke::doInitialization(Module &M) { void LowerInvoke::writeAbortMessage(Instruction *IB) { if (WriteFn) { - if (!AbortMessage) { - GlobalVariable *MsgGV = new GlobalVariable(AbortMessageInit->getType(), - true, - GlobalValue::InternalLinkage, - AbortMessageInit, "abort.msg", - WriteFn->getParent()); - std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy)); - AbortMessage = - ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); - } - // These are the arguments we WANT... std::vector<Value*> Args; Args.push_back(ConstantInt::get(Type::IntTy, 2)); |