mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
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:
parent
5c911ab6f1
commit
44c94b9671
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user