mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
Fix setting and default setting of code model for jit. Do this
by allowing backends to override routines that will default the JIT and Static code generation to an appropriate code model for the architecture. Should fix PR 5773. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91824 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -50,11 +50,6 @@ MipsTargetMachine(const Target &T, const std::string &TT, const std::string &FS,
|
||||
else
|
||||
setRelocationModel(Reloc::Static);
|
||||
}
|
||||
|
||||
// TODO: create an option to enable long calls, like -mlong-calls,
|
||||
// that would be our CodeModel::Large. It must not work with Abicall.
|
||||
if (getCodeModel() == CodeModel::Default)
|
||||
setCodeModel(CodeModel::Small);
|
||||
}
|
||||
|
||||
MipselTargetMachine::
|
||||
|
||||
@@ -95,10 +95,6 @@ X86TargetMachine::X86TargetMachine(const Target &T, const std::string &TT,
|
||||
assert(getRelocationModel() != Reloc::Default &&
|
||||
"Relocation mode not picked");
|
||||
|
||||
// If no code model is picked, default to small.
|
||||
if (getCodeModel() == CodeModel::Default)
|
||||
setCodeModel(CodeModel::Small);
|
||||
|
||||
// ELF and X86-64 don't have a distinct DynamicNoPIC model. DynamicNoPIC
|
||||
// is defined as a model for code which may be used in static or dynamic
|
||||
// executables but not necessarily a shared library. On X86-32 we just
|
||||
@@ -188,10 +184,6 @@ bool X86TargetMachine::addCodeEmitter(PassManagerBase &PM,
|
||||
Subtarget.setPICStyle(PICStyles::None);
|
||||
}
|
||||
|
||||
// 64-bit JIT places everything in the same buffer except external functions.
|
||||
if (Subtarget.is64Bit())
|
||||
setCodeModel(CodeModel::Large);
|
||||
|
||||
PM.add(createX86CodeEmitterPass(*this, MCE));
|
||||
|
||||
return false;
|
||||
@@ -208,9 +200,6 @@ bool X86TargetMachine::addCodeEmitter(PassManagerBase &PM,
|
||||
Subtarget.setPICStyle(PICStyles::None);
|
||||
}
|
||||
|
||||
// 64-bit JIT places everything in the same buffer except external functions.
|
||||
if (Subtarget.is64Bit())
|
||||
setCodeModel(CodeModel::Large);
|
||||
|
||||
PM.add(createX86JITCodeEmitterPass(*this, JCE));
|
||||
|
||||
@@ -244,3 +233,23 @@ bool X86TargetMachine::addSimpleCodeEmitter(PassManagerBase &PM,
|
||||
PM.add(createX86ObjectCodeEmitterPass(*this, OCE));
|
||||
return false;
|
||||
}
|
||||
|
||||
void X86TargetMachine::setCodeModelForStatic() {
|
||||
|
||||
if (getCodeModel() != CodeModel::Default) return;
|
||||
|
||||
// For static codegen, if we're not already set, use Small codegen.
|
||||
setCodeModel(CodeModel::Small);
|
||||
}
|
||||
|
||||
|
||||
void X86TargetMachine::setCodeModelForJIT() {
|
||||
|
||||
if (getCodeModel() != CodeModel::Default) return;
|
||||
|
||||
// 64-bit JIT places everything in the same buffer except external functions.
|
||||
if (Subtarget.is64Bit())
|
||||
setCodeModel(CodeModel::Large);
|
||||
else
|
||||
setCodeModel(CodeModel::Small);
|
||||
}
|
||||
|
||||
@@ -38,6 +38,11 @@ class X86TargetMachine : public LLVMTargetMachine {
|
||||
X86ELFWriterInfo ELFWriterInfo;
|
||||
Reloc::Model DefRelocModel; // Reloc model before it's overridden.
|
||||
|
||||
private:
|
||||
// We have specific defaults for X86.
|
||||
virtual void setCodeModelForJIT();
|
||||
virtual void setCodeModelForStatic();
|
||||
|
||||
public:
|
||||
X86TargetMachine(const Target &T, const std::string &TT,
|
||||
const std::string &FS, bool is64Bit);
|
||||
|
||||
Reference in New Issue
Block a user