Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 May 2013 14:40:26 +0000 (UTC)
From:      Brooks Davis <brooks@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r318874 - in head/lang/clang: . files
Message-ID:  <201305231440.r4NEeQSD039596@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: brooks
Date: Thu May 23 14:40:26 2013
New Revision: 318874
URL: http://svnweb.freebsd.org/changeset/ports/318874

Log:
  Actually commit the changes listed in r318799.  Due to a wrong path
  on the command line, only the Makefile was committed.
  
  Correct a plist bug by listing clang-cpp.

Added:
  head/lang/clang/files/patch-svn-r172354   (contents, props changed)
  head/lang/clang/files/patch-svn-r175919   (contents, props changed)
Modified:
  head/lang/clang/Makefile
  head/lang/clang/files/patch-tools_clang_lib_Headers_Makefile
  head/lang/clang/pkg-plist

Modified: head/lang/clang/Makefile
==============================================================================
--- head/lang/clang/Makefile	Thu May 23 14:29:09 2013	(r318873)
+++ head/lang/clang/Makefile	Thu May 23 14:40:26 2013	(r318874)
@@ -7,7 +7,7 @@
 
 PORTNAME=	clang
 PORTVERSION=	3.2
-PORTREVISION=	3
+PORTREVISION=	4
 CATEGORIES=	lang devel
 MASTER_SITES=	http://llvm.org/releases/${PORTVERSION}/
 DISTNAME=	${PORTNAME}-${PORTVERSION}.src
@@ -140,12 +140,12 @@ regression-test: ${BUILD_COOKIE}
 
 PLIST_FILE_LIST=	bin/ccc-analyzer \
 			bin/c++-analyzer \
+			bin/c-index-test \
 			bin/clang \
 			bin/clang++ \
 			bin/clang-check \
 			bin/clang-cpp \
 			bin/clang-tblgen \
-			bin/c-index-test \
 			bin/scan-build \
 			bin/scan-view \
 			lib/libclang*

Added: head/lang/clang/files/patch-svn-r172354
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/clang/files/patch-svn-r172354	Thu May 23 14:40:26 2013	(r318874)
@@ -0,0 +1,203 @@
+$FreeBSD$
+------------------------------------------------------------------------
+r172354 | chandlerc | 2013-01-13 11:46:33 +0000 (Sun, 13 Jan 2013) | 6 lines
+
+Refactor the x86 CPU name logic in the driver and pass -march and -mcpu
+flag information down from the Clang driver into the Gold linker plugin
+for LTO. This allows specifying -march on the linker commandline and
+should hopefully have it pass all the way through to the LTO optimizer.
+
+Fixes PR14697.
+------------------------------------------------------------------------
+Index: test/Driver/gold-lto.c
+===================================================================
+--- tools/clang/test/Driver/gold-lto.c	(revision 172353)
++++ tools/clang/test/Driver/gold-lto.c	(revision 172354)
+@@ -1,6 +1,21 @@
+ // RUN: touch %t.o
+-// RUN: %clang -target x86_64-pc-linux-gnu -### %t.o -O4 -Wl,-plugin-opt=foo 2> %t.log
+-// RUN: FileCheck %s < %t.log
+-
+-// CHECK: "-plugin" "{{.*}}/LLVMgold.so"
+-// CHECK: "-plugin-opt=foo"
++//
++// RUN: %clang -target x86_64-unknown-linux -### %t.o -flto 2>&1 \
++// RUN:     -Wl,-plugin-opt=foo \
++// RUN:     | FileCheck %s --check-prefix=CHECK-X86-64-BASIC
++// CHECK-X86-64-BASIC: "-plugin" "{{.*}}/LLVMgold.so"
++// CHECK-X86-64-BASIC: "-plugin-opt=foo"
++//
++// RUN: %clang -target x86_64-unknown-linux -### %t.o -flto 2>&1 \
++// RUN:     -march=corei7 -Wl,-plugin-opt=foo \
++// RUN:     | FileCheck %s --check-prefix=CHECK-X86-64-COREI7
++// CHECK-X86-64-COREI7: "-plugin" "{{.*}}/LLVMgold.so"
++// CHECK-X86-64-COREI7: "-plugin-opt=mcpu=corei7"
++// CHECK-X86-64-COREI7: "-plugin-opt=foo"
++//
++// RUN: %clang -target arm-unknown-linux -### %t.o -flto 2>&1 \
++// RUN:     -march=armv7a -Wl,-plugin-opt=foo \
++// RUN:     | FileCheck %s --check-prefix=CHECK-ARM-V7A
++// CHECK-ARM-V7A: "-plugin" "{{.*}}/LLVMgold.so"
++// CHECK-ARM-V7A: "-plugin-opt=mcpu=cortex-a8"
++// CHECK-ARM-V7A: "-plugin-opt=foo"
+Index: lib/Driver/Tools.cpp
+===================================================================
+--- tools/clang/lib/Driver/Tools.cpp	(revision 172353)
++++ tools/clang/lib/Driver/Tools.cpp	(revision 172354)
+@@ -1126,10 +1126,59 @@
+   }
+ }
+ 
++static const char *getX86TargetCPU(const ArgList &Args,
++                                   const llvm::Triple &Triple) {
++  if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) {
++    if (StringRef(A->getValue()) != "native")
++      return A->getValue();
++
++    // FIXME: Reject attempts to use -march=native unless the target matches
++    // the host.
++    //
++    // FIXME: We should also incorporate the detected target features for use
++    // with -native.
++    std::string CPU = llvm::sys::getHostCPUName();
++    if (!CPU.empty() && CPU != "generic")
++      return Args.MakeArgString(CPU);
++  }
++
++  // Select the default CPU if none was given (or detection failed).
++
++  if (Triple.getArch() != llvm::Triple::x86_64 &&
++      Triple.getArch() != llvm::Triple::x86)
++    return 0; // This routine is only handling x86 targets.
++
++  bool Is64Bit = Triple.getArch() == llvm::Triple::x86_64;
++
++  // FIXME: Need target hooks.
++  if (Triple.isOSDarwin())
++    return Is64Bit ? "core2" : "yonah";
++
++  // Everything else goes to x86-64 in 64-bit mode.
++  if (Is64Bit)
++    return "x86-64";
++
++  if (Triple.getOSName().startswith("haiku"))
++    return "i586";
++  if (Triple.getOSName().startswith("openbsd"))
++    return "i486";
++  if (Triple.getOSName().startswith("bitrig"))
++    return "i686";
++  if (Triple.getOSName().startswith("freebsd"))
++    return "i486";
++  if (Triple.getOSName().startswith("netbsd"))
++    return "i486";
++  // All x86 devices running Android have core2 as their common
++  // denominator. This makes a better choice than pentium4.
++  if (Triple.getEnvironment() == llvm::Triple::Android)
++    return "core2";
++
++  // Fallback to p4.
++  return "pentium4";
++}
++
+ void Clang::AddX86TargetArgs(const ArgList &Args,
+                              ArgStringList &CmdArgs) const {
+-  const bool isAndroid =
+-    getToolChain().getTriple().getEnvironment() == llvm::Triple::Android;
+   if (!Args.hasFlag(options::OPT_mred_zone,
+                     options::OPT_mno_red_zone,
+                     true) ||
+@@ -1142,65 +1191,7 @@
+                    false))
+     CmdArgs.push_back("-no-implicit-float");
+ 
+-  const char *CPUName = 0;
+-  if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) {
+-    if (StringRef(A->getValue()) == "native") {
+-      // FIXME: Reject attempts to use -march=native unless the target matches
+-      // the host.
+-      //
+-      // FIXME: We should also incorporate the detected target features for use
+-      // with -native.
+-      std::string CPU = llvm::sys::getHostCPUName();
+-      if (!CPU.empty() && CPU != "generic")
+-        CPUName = Args.MakeArgString(CPU);
+-    } else
+-      CPUName = A->getValue();
+-  }
+-
+-  // Select the default CPU if none was given (or detection failed).
+-  if (!CPUName) {
+-    // FIXME: Need target hooks.
+-    if (getToolChain().getTriple().isOSDarwin()) {
+-      if (getToolChain().getArch() == llvm::Triple::x86_64)
+-        CPUName = "core2";
+-      else if (getToolChain().getArch() == llvm::Triple::x86)
+-        CPUName = "yonah";
+-    } else if (getToolChain().getOS().startswith("haiku"))  {
+-      if (getToolChain().getArch() == llvm::Triple::x86_64)
+-        CPUName = "x86-64";
+-      else if (getToolChain().getArch() == llvm::Triple::x86)
+-        CPUName = "i586";
+-    } else if (getToolChain().getOS().startswith("openbsd"))  {
+-      if (getToolChain().getArch() == llvm::Triple::x86_64)
+-        CPUName = "x86-64";
+-      else if (getToolChain().getArch() == llvm::Triple::x86)
+-        CPUName = "i486";
+-    } else if (getToolChain().getOS().startswith("bitrig"))  {
+-      if (getToolChain().getArch() == llvm::Triple::x86_64)
+-        CPUName = "x86-64";
+-      else if (getToolChain().getArch() == llvm::Triple::x86)
+-        CPUName = "i686";
+-    } else if (getToolChain().getOS().startswith("freebsd"))  {
+-      if (getToolChain().getArch() == llvm::Triple::x86_64)
+-        CPUName = "x86-64";
+-      else if (getToolChain().getArch() == llvm::Triple::x86)
+-        CPUName = "i486";
+-    } else if (getToolChain().getOS().startswith("netbsd"))  {
+-      if (getToolChain().getArch() == llvm::Triple::x86_64)
+-        CPUName = "x86-64";
+-      else if (getToolChain().getArch() == llvm::Triple::x86)
+-        CPUName = "i486";
+-    } else {
+-      if (getToolChain().getArch() == llvm::Triple::x86_64)
+-        CPUName = "x86-64";
+-      else if (getToolChain().getArch() == llvm::Triple::x86)
+-        // All x86 devices running Android have core2 as their common
+-        // denominator. This makes a better choice than pentium4.
+-        CPUName = isAndroid ? "core2" : "pentium4";
+-    }
+-  }
+-
+-  if (CPUName) {
++  if (const char *CPUName = getX86TargetCPU(Args, getToolChain().getTriple())) {
+     CmdArgs.push_back("-target-cpu");
+     CmdArgs.push_back(CPUName);
+   }
+@@ -5646,8 +5637,27 @@
+     CmdArgs.push_back("-plugin");
+     std::string Plugin = ToolChain.getDriver().Dir + "/../lib/LLVMgold.so";
+     CmdArgs.push_back(Args.MakeArgString(Plugin));
++
++    // Try to pass driver level flags relevant to LTO code generation down to
++    // the plugin.
++
++    // Handle architecture-specific flags for selecting CPU variants.
++    if (ToolChain.getArch() == llvm::Triple::x86 ||
++        ToolChain.getArch() == llvm::Triple::x86_64)
++      CmdArgs.push_back(
++          Args.MakeArgString(Twine("-plugin-opt=mcpu=") +
++                             getX86TargetCPU(Args, ToolChain.getTriple())));
++    else if (ToolChain.getArch() == llvm::Triple::arm ||
++             ToolChain.getArch() == llvm::Triple::thumb)
++      CmdArgs.push_back(
++          Args.MakeArgString(Twine("-plugin-opt=mcpu=") +
++                             getARMTargetCPU(Args, ToolChain.getTriple())));
++
++    // FIXME: Factor out logic for MIPS, PPC, and other targets to support this
++    // as well.
+   }
+ 
++
+   if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle))
+     CmdArgs.push_back("--no-demangle");
+ 

Added: head/lang/clang/files/patch-svn-r175919
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/clang/files/patch-svn-r175919	Thu May 23 14:40:26 2013	(r318874)
@@ -0,0 +1,66 @@
+$FreeBSD$
+------------------------------------------------------------------------
+r175919 | d0k | 2013-02-22 20:55:17 +0000 (Fri, 22 Feb 2013) | 4 lines
+
+Driver: Pass down the -march setting down to -cc1as on x86 too.
+
+The assembler historically didn't make use of any target features, but this has
+changed when support for old CPUs that don't support long nops was added.
+------------------------------------------------------------------------
+Index: test/Driver/target-as.s
+===================================================================
+--- tools/clang/test/Driver/target-as.s	(revision 0)
++++ tools/clang/test/Driver/target-as.s	(revision 175919)
+@@ -0,0 +1,8 @@
++// REQUIRES: clang-driver
++
++// Make sure the -march is passed down to cc1as.
++// RUN: %clang -target i386-unknown-freebsd -### -c -integrated-as %s \
++// RUN: -march=geode 2>&1 | FileCheck -check-prefix=TARGET %s
++//
++// TARGET: "-cc1as"
++// TARGET: "-target-cpu" "geode"
+Index: lib/Driver/Tools.cpp
+===================================================================
+--- tools/clang/lib/Driver/Tools.cpp	(revision 175918)
++++ tools/clang/lib/Driver/Tools.cpp	(revision 175919)
+@@ -3325,6 +3325,15 @@
+     addFPMathArgs(D, A, Args, CmdArgs, getARMTargetCPU(Args, Triple));
+ }
+ 
++void ClangAs::AddX86TargetArgs(const ArgList &Args,
++                               ArgStringList &CmdArgs) const {
++  // Set the CPU based on -march=.
++  if (const char *CPUName = getX86TargetCPU(Args, getToolChain().getTriple())) {
++    CmdArgs.push_back("-target-cpu");
++    CmdArgs.push_back(CPUName);
++  }
++}
++
+ /// Add options related to the Objective-C runtime/ABI.
+ ///
+ /// Returns true if the runtime is non-fragile.
+@@ -3500,6 +3509,11 @@
+   case llvm::Triple::thumb:
+     AddARMTargetArgs(Args, CmdArgs);
+     break;
++
++  case llvm::Triple::x86:
++  case llvm::Triple::x86_64:
++    AddX86TargetArgs(Args, CmdArgs);
++    break;
+   }
+ 
+   // Ignore explicit -force_cpusubtype_ALL option.
+Index: lib/Driver/Tools.h
+===================================================================
+--- tools/clang/lib/Driver/Tools.h	(revision 175918)
++++ tools/clang/lib/Driver/Tools.h	(revision 175919)
+@@ -77,6 +77,7 @@
+   /// \brief Clang integrated assembler tool.
+   class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
+     void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
++    void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
+   public:
+     ClangAs(const ToolChain &TC) : Tool("clang::as",
+                                         "clang integrated assembler", TC) {}

Modified: head/lang/clang/files/patch-tools_clang_lib_Headers_Makefile
==============================================================================
--- head/lang/clang/files/patch-tools_clang_lib_Headers_Makefile	Thu May 23 14:29:09 2013	(r318873)
+++ head/lang/clang/files/patch-tools_clang_lib_Headers_Makefile	Thu May 23 14:40:26 2013	(r318874)
@@ -3,12 +3,12 @@ $FreeBSD$
 
 --- tools/clang/lib/Headers/Makefile.orig
 +++ tools/clang/lib/Headers/Makefile
-@@ -13,7 +13,7 @@
- # FIXME: Get version from a common place.
- HeaderDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib/clang/1.0/include
+@@ -19,7 +19,7 @@
+ 
+ HeaderDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib/clang/$(CLANG_VERSION)/include
  
 -HEADERS := $(notdir $(wildcard $(PROJ_SRC_DIR)/*.h))
-+HEADERS := $(notdir $(wildcard $(PROJ_SRC_DIR)/*mm*.h))
++HEADERS := $(notdir $(wildcard $(PROJ_SRC_DIR)/*intrin*.h) mm3dnow.h mm_malloc.h)
  
  OBJHEADERS := $(addprefix $(HeaderDir)/, $(HEADERS))
  

Modified: head/lang/clang/pkg-plist
==============================================================================
--- head/lang/clang/pkg-plist	Thu May 23 14:29:09 2013	(r318873)
+++ head/lang/clang/pkg-plist	Thu May 23 14:40:26 2013	(r318874)
@@ -4,6 +4,7 @@ bin/ccc-analyzer
 bin/clang
 bin/clang++
 bin/clang-check
+bin/clang-cpp
 bin/clang-tblgen
 bin/scan-build
 bin/scan-view
@@ -391,18 +392,30 @@ lib/clang/%%PORTVERSION%%/include/__wmmi
 lib/clang/%%PORTVERSION%%/include/__wmmintrin_pclmul.h
 lib/clang/%%PORTVERSION%%/include/ammintrin.h
 lib/clang/%%PORTVERSION%%/include/arm_neon.h
+lib/clang/%%PORTVERSION%%/include/avx2intrin.h
+lib/clang/%%PORTVERSION%%/include/avxintrin.h
+lib/clang/%%PORTVERSION%%/include/bmi2intrin.h
+lib/clang/%%PORTVERSION%%/include/bmiintrin.h
 lib/clang/%%PORTVERSION%%/include/emmintrin.h
+lib/clang/%%PORTVERSION%%/include/f16cintrin.h
+lib/clang/%%PORTVERSION%%/include/fma4intrin.h
+lib/clang/%%PORTVERSION%%/include/fmaintrin.h
 lib/clang/%%PORTVERSION%%/include/immintrin.h
+lib/clang/%%PORTVERSION%%/include/lzcntintrin.h
 lib/clang/%%PORTVERSION%%/include/mm3dnow.h
 lib/clang/%%PORTVERSION%%/include/mm_malloc.h
 lib/clang/%%PORTVERSION%%/include/mmintrin.h
 lib/clang/%%PORTVERSION%%/include/module.map
 lib/clang/%%PORTVERSION%%/include/nmmintrin.h
 lib/clang/%%PORTVERSION%%/include/pmmintrin.h
+lib/clang/%%PORTVERSION%%/include/popcntintrin.h
+lib/clang/%%PORTVERSION%%/include/rtmintrin.h
 lib/clang/%%PORTVERSION%%/include/smmintrin.h
 lib/clang/%%PORTVERSION%%/include/tmmintrin.h
 lib/clang/%%PORTVERSION%%/include/wmmintrin.h
+lib/clang/%%PORTVERSION%%/include/x86intrin.h
 lib/clang/%%PORTVERSION%%/include/xmmintrin.h
+lib/clang/%%PORTVERSION%%/include/xopintrin.h
 lib/libclang.a
 lib/libclang.so
 lib/libclangARCMigrate.a



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201305231440.r4NEeQSD039596>