Simplify handling of constant initializers

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17696 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2004-11-12 22:42:57 +00:00
parent 5c911ab6f1
commit 44c94b9671

View File

@ -55,7 +55,6 @@ namespace {
// Used for both models. // Used for both models.
Function *WriteFn; Function *WriteFn;
Function *AbortFn; Function *AbortFn;
Constant *AbortMessageInit;
Value *AbortMessage; Value *AbortMessage;
unsigned AbortMessageLength; unsigned AbortMessageLength;
@ -120,24 +119,18 @@ bool LowerInvoke::doInitialization(Module &M) {
LongJmpFn = M.getOrInsertFunction("llvm.longjmp", Type::VoidTy, LongJmpFn = M.getOrInsertFunction("llvm.longjmp", Type::VoidTy,
PointerType::get(JmpBufTy), PointerType::get(JmpBufTy),
Type::IntTy, 0); Type::IntTy, 0);
// The abort message for expensive EH support tells the user that the // The abort message for expensive EH support tells the user that the
// program 'unwound' without an 'invoke' instruction. // program 'unwound' without an 'invoke' instruction.
Constant *Msg = Constant *Msg =
ConstantArray::get("ERROR: Exception thrown, but not caught!\n"); ConstantArray::get("ERROR: Exception thrown, but not caught!\n");
AbortMessageLength = Msg->getNumOperands()-1; // don't include \0 AbortMessageLength = Msg->getNumOperands()-1; // don't include \0
AbortMessageInit = Msg;
GlobalVariable *MsgGV = new GlobalVariable(Msg->getType(), true,
GlobalVariable *MsgGV = M.getGlobalVariable("abort.msg", Msg->getType()); GlobalValue::InternalLinkage,
if (MsgGV && (!MsgGV->hasInitializer() || MsgGV->getInitializer() != Msg)) Msg, "abortmsg", &M);
MsgGV = 0; std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy));
AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, GEPIdx);
if (MsgGV) {
std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy));
AbortMessage =
ConstantExpr::getGetElementPtr(MsgGV, GEPIdx);
}
} else { } else {
// The abort message for cheap EH support tells the user that EH is not // The abort message for cheap EH support tells the user that EH is not
// enabled. // enabled.
@ -145,17 +138,12 @@ bool LowerInvoke::doInitialization(Module &M) {
ConstantArray::get("Exception handler needed, but not enabled. Recompile" ConstantArray::get("Exception handler needed, but not enabled. Recompile"
" program with -enable-correct-eh-support.\n"); " program with -enable-correct-eh-support.\n");
AbortMessageLength = Msg->getNumOperands()-1; // don't include \0 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) { GlobalVariable *MsgGV = new GlobalVariable(Msg->getType(), true,
std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy)); GlobalValue::InternalLinkage,
AbortMessage = Msg, "abortmsg", &M);
ConstantExpr::getGetElementPtr(MsgGV, GEPIdx); std::vector<Constant*> GEPIdx(2, Constant::getNullValue(Type::LongTy));
} AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, GEPIdx);
} }
// We need the 'write' and 'abort' functions for both models. // We need the 'write' and 'abort' functions for both models.
@ -183,17 +171,6 @@ bool LowerInvoke::doInitialization(Module &M) {
void LowerInvoke::writeAbortMessage(Instruction *IB) { void LowerInvoke::writeAbortMessage(Instruction *IB) {
if (WriteFn) { 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... // These are the arguments we WANT...
std::vector<Value*> Args; std::vector<Value*> Args;
Args.push_back(ConstantInt::get(Type::IntTy, 2)); Args.push_back(ConstantInt::get(Type::IntTy, 2));