[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