aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-11-12 22:42:57 +0000
committerChris Lattner <sabre@nondot.org>2004-11-12 22:42:57 +0000
commit44c94b96710a653e467dbf8d34ce9540ff66a1a0 (patch)
tree332bc9b68fa4d5c3512ada401ad8d7e1942f3ede /lib
parent5c911ab6f14de4f891f25e08a3977548917c8ec6 (diff)
downloadexternal_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.cpp49
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));