mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Fix PR4845: r77946 completely broke x86_64 Darwin (or any situation where the
desired triplet is a sub-target, e.g. thumbv7 vs. arm host). Reverting the patch isn't quite right either since the previous behavior does not allow the triplet to be overridden with -march. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80742 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d2a5cfe00d
commit
94f07d8137
@ -43,19 +43,41 @@ MAttrs("mattr",
|
||||
/// selectTarget - Pick a target either via -march or by guessing the native
|
||||
/// arch. Add any CPU features specified via -mcpu or -mattr.
|
||||
TargetMachine *JIT::selectTarget(ModuleProvider *MP, std::string *ErrorStr) {
|
||||
Triple TheTriple(sys::getHostTriple());
|
||||
Module &Mod = *MP->getModule();
|
||||
|
||||
Triple TheTriple(Mod.getTargetTriple());
|
||||
if (TheTriple.getTriple().empty())
|
||||
TheTriple.setTriple(sys::getHostTriple());
|
||||
|
||||
// Adjust the triple to match what the user requested.
|
||||
if (!MArch.empty())
|
||||
TheTriple.setArch(Triple::getArchTypeForLLVMName(MArch));
|
||||
const Target *TheTarget = 0;
|
||||
if (!MArch.empty()) {
|
||||
for (TargetRegistry::iterator it = TargetRegistry::begin(),
|
||||
ie = TargetRegistry::end(); it != ie; ++it) {
|
||||
if (MArch == it->getName()) {
|
||||
TheTarget = &*it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
std::string Error;
|
||||
const Target *TheTarget =
|
||||
TargetRegistry::lookupTarget(TheTriple.getTriple(), Error);
|
||||
if (TheTarget == 0) {
|
||||
if (ErrorStr)
|
||||
*ErrorStr = Error;
|
||||
return 0;
|
||||
if (!TheTarget) {
|
||||
errs() << "JIT: error: invalid target '" << MArch << "'.\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Adjust the triple to match (if known), otherwise stick with the
|
||||
// module/host triple.
|
||||
Triple::ArchType Type = Triple::getArchTypeForLLVMName(MArch);
|
||||
if (Type != Triple::UnknownArch)
|
||||
TheTriple.setArch(Type);
|
||||
} else {
|
||||
std::string Error;
|
||||
TheTarget = TargetRegistry::lookupTarget(TheTriple.getTriple(), Error);
|
||||
if (TheTarget == 0) {
|
||||
if (ErrorStr)
|
||||
*ErrorStr = Error;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!TheTarget->hasJIT()) {
|
||||
|
Loading…
Reference in New Issue
Block a user