[llvm-commits] [llvm] r80742 - /llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp
Daniel Dunbar
daniel at zuster.org
Thu Sep 3 20:22:40 PDT 2009
Tanya,
Please take this for 2.6, thanks!
- Daniel
On Tue, Sep 1, 2009 at 5:19 PM, Evan Cheng<evan.cheng at apple.com> wrote:
> Author: evancheng
> Date: Tue Sep 1 19:19:03 2009
> New Revision: 80742
>
> URL: http://llvm.org/viewvc/llvm-project?rev=80742&view=rev
> Log:
> 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.
>
> Modified:
> llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp
>
> Modified: llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp?rev=80742&r1=80741&r2=80742&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp Tue Sep 1 19:19:03 2009
> @@ -43,19 +43,41 @@
> /// 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;
> + }
> + }
> +
> + if (!TheTarget) {
> + errs() << "JIT: error: invalid target '" << MArch << "'.\n";
> + return 0;
> + }
>
> - std::string Error;
> - const Target *TheTarget =
> - TargetRegistry::lookupTarget(TheTriple.getTriple(), Error);
> - if (TheTarget == 0) {
> - if (ErrorStr)
> - *ErrorStr = Error;
> - 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()) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list