[llvm-commits] [llvm] r80863 - /llvm/trunk/lib/System/Unix/Host.inc

Daniel Dunbar daniel at zuster.org
Thu Sep 3 20:22:11 PDT 2009


Tanya, please take this for 2.6, thanks!

 - Daniel

On Wed, Sep 2, 2009 at 6:10 PM, Daniel Dunbar<daniel at zuster.org> wrote:
> Author: ddunbar
> Date: Wed Sep  2 20:10:13 2009
> New Revision: 80863
>
> URL: http://llvm.org/viewvc/llvm-project?rev=80863&view=rev
> Log:
> Improve llvm::getHostTriple for some cases where the LLVM_HOSTTRIPLE is not
> reliable.
>
> Modified:
>    llvm/trunk/lib/System/Unix/Host.inc
>
> Modified: llvm/trunk/lib/System/Unix/Host.inc
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Host.inc?rev=80863&r1=80862&r2=80863&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/System/Unix/Host.inc (original)
> +++ llvm/trunk/lib/System/Unix/Host.inc Wed Sep  2 20:10:13 2009
> @@ -16,7 +16,8 @@
>  //===          is guaranteed to work on *all* UNIX variants.
>  //===----------------------------------------------------------------------===//
>
> -#include <llvm/Config/config.h>
> +#include "llvm/Config/config.h"
> +#include "llvm/ADT/StringRef.h"
>  #include "Unix.h"
>  #include <sys/utsname.h>
>  #include <string>
> @@ -33,10 +34,47 @@
>  }
>
>  std::string sys::getHostTriple() {
> -  // FIXME: Derive more directly instead of relying on the autoconf
> -  // generated variable.
> +  // FIXME: Derive directly instead of relying on the autoconf generated
> +  // variable.
>
> -  std::string Triple = LLVM_HOSTTRIPLE;
> +  StringRef HostTripleString(LLVM_HOSTTRIPLE);
> +  std::pair<StringRef, StringRef> ArchSplit = HostTripleString.split('-');
> +
> +  // Normalize the arch, since the host triple may not actually match the host.
> +  std::string Arch = ArchSplit.first;
> +
> +  // It would be nice to do this in terms of llvm::Triple, but that is in
> +  // Support which is layered above us.
> +#if defined(__x86_64__)
> +  Arch = "x86_64";
> +#elif defined(__i386__)
> +  Arch = "i386";
> +#elif defined(__ppc64__)
> +  Arch = "powerpc64";
> +#elif defined(__ppc__)
> +  Arch = "powerpc";
> +#elif defined(__arm__)
> +
> +  // FIXME: We need to pick the right ARM triple (which involves querying the
> +  // chip). However, for now this is most important for LLVM arch selection, so
> +  // we only need to make sure to distinguish ARM and Thumb.
> +#  if defined(__thumb__)
> +  Arch = "thumb";
> +#  else
> +  Arch = "arm";
> +#  endif
> +
> +#else
> +
> +  // FIXME: When enough auto-detection is in place, this should just
> +  // #error. Then at least the arch selection is done, and we only need the OS
> +  // etc selection to kill off the use of LLVM_HOSTTRIPLE.
> +
> +#endif
> +
> +  std::string Triple(Arch);
> +  Triple += '-';
> +  Triple += ArchSplit.second;
>
>   // Force i<N>86 to i386.
>   if (Triple[0] == 'i' && isdigit(Triple[1]) &&
>
>
> _______________________________________________
> 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