Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Nov 2014 18:43:37 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r274971 - projects/clang350-import/contrib/llvm/patches
Message-ID:  <201411241843.sAOIhbR9015482@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Mon Nov 24 18:43:37 2014
New Revision: 274971
URL: https://svnweb.freebsd.org/changeset/base/274971

Log:
  Cleanup patch set, and update README.TXT.  Add three new patches.

Added:
  projects/clang350-import/contrib/llvm/patches/patch-01-clang-version-include.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r208961-clang-version-include.diff
  projects/clang350-import/contrib/llvm/patches/patch-02-format-extensions.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r208987-format-extensions.diff
  projects/clang350-import/contrib/llvm/patches/patch-03-clang-vendor-suffix.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r209107-clang-vendor-suffix.diff
  projects/clang350-import/contrib/llvm/patches/patch-04-default-target-triple.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r221503-default-target-triple.diff
  projects/clang350-import/contrib/llvm/patches/patch-05-add-CC-aliases.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r257109-add-CC-aliases.diff
  projects/clang350-import/contrib/llvm/patches/patch-06-clang-arm-target-cpu.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r269387-clang-arm-target-cpu.diff
  projects/clang350-import/contrib/llvm/patches/patch-07-llvm-r213960-ppc32-tls.diff
  projects/clang350-import/contrib/llvm/patches/patch-08-llvm-r216989-r216990-fix-movw-armv6.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r271024-llvm-r216989-r216990-fix-movw-armv6.diff
  projects/clang350-import/contrib/llvm/patches/patch-09-clang-r217410-i386-garbage-float.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff
  projects/clang350-import/contrib/llvm/patches/patch-10-llvm-r221709-debug-oom.diff
     - copied, changed from r274969, projects/clang350-import/contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff
  projects/clang350-import/contrib/llvm/patches/patch-11-llvm-r222562-loop-rotate.diff
  projects/clang350-import/contrib/llvm/patches/patch-12-add-llvm-gvn-option.diff
  projects/clang350-import/contrib/llvm/patches/patch-13-llvm-r218241-dwarf2-warning.diff
Deleted:
  projects/clang350-import/contrib/llvm/patches/patch-r208961-clang-version-include.diff
  projects/clang350-import/contrib/llvm/patches/patch-r208987-format-extensions.diff
  projects/clang350-import/contrib/llvm/patches/patch-r209107-clang-vendor-suffix.diff
  projects/clang350-import/contrib/llvm/patches/patch-r213492-amd64-multi-os-dot.diff
  projects/clang350-import/contrib/llvm/patches/patch-r221503-default-target-triple.diff
  projects/clang350-import/contrib/llvm/patches/patch-r243830-arm-disable-clear-cache.diff
  projects/clang350-import/contrib/llvm/patches/patch-r252503-arm-transient-stack-alignment.diff
  projects/clang350-import/contrib/llvm/patches/patch-r257109-add-CC-aliases.diff
  projects/clang350-import/contrib/llvm/patches/patch-r259053-gcc-installation-detector.diff
  projects/clang350-import/contrib/llvm/patches/patch-r259498-add-fxsave.diff
  projects/clang350-import/contrib/llvm/patches/patch-r261680-clang-r200899-fix-security-quantis.diff
  projects/clang350-import/contrib/llvm/patches/patch-r261991-llvm-r195391-fix-dwarf2.diff
  projects/clang350-import/contrib/llvm/patches/patch-r261991-llvm-r198385-fix-dwarf2.diff
  projects/clang350-import/contrib/llvm/patches/patch-r261991-llvm-r198389-fix-dwarf2.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198029-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198030-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198145-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198149-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198157-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198280-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198281-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198286-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198480-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198484-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198533-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198565-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198567-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198580-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198591-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198592-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198658-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198681-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198738-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198739-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198740-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198893-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198909-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r198910-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199014-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199024-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199028-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199031-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199033-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199061-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199186-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199187-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199775-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199781-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199786-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199940-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199974-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199975-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r199977-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200103-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200104-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200112-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200130-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200131-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200141-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200282-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200368-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200373-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200376-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200509-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200617-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200960-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200961-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200962-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200963-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262261-llvm-r200965-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r198311-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r198312-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r198911-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r198912-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r198918-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r198923-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r199012-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r199037-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r199188-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r199399-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262262-clang-r200452-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262264-llvm-r200453-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262265-llvm-r201718-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262303-enable-ppc-integrated-as.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262415-llvm-r201994-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262460-llvm-r202059-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262535-clang-r202177-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262536-clang-r202179-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262582-llvm-r202422-sparc.diff
  projects/clang350-import/contrib/llvm/patches/patch-r262611-llvm-r196874-fix-invalid-pwd-crash.diff
  projects/clang350-import/contrib/llvm/patches/patch-r263048-clang-r203624-fix-CC-aliases.diff
  projects/clang350-import/contrib/llvm/patches/patch-r263312-llvm-r169939-inline-asm-with-realign.diff
  projects/clang350-import/contrib/llvm/patches/patch-r263312-llvm-r196940-update-inline-asm-test.diff
  projects/clang350-import/contrib/llvm/patches/patch-r263312-llvm-r196986-allow-realign-alloca.diff
  projects/clang350-import/contrib/llvm/patches/patch-r263312-llvm-r202930-fix-alloca-esi-clobber.diff
  projects/clang350-import/contrib/llvm/patches/patch-r263313-llvm-r203311-fix-sse1-oom.diff
  projects/clang350-import/contrib/llvm/patches/patch-r263619-clang-r201662-arm-gnueabihf.diff
  projects/clang350-import/contrib/llvm/patches/patch-r264345-dwarf2-freebsd10.diff
  projects/clang350-import/contrib/llvm/patches/patch-r264826-llvm-r202188-variadic-fn-debug-info.diff
  projects/clang350-import/contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff
  projects/clang350-import/contrib/llvm/patches/patch-r265477-clang-r198655-standalone-debug.diff
  projects/clang350-import/contrib/llvm/patches/patch-r266674-clang-r209489-fix-xmmintrin.diff
  projects/clang350-import/contrib/llvm/patches/patch-r267704-llvm-r211435-fix-avx-backend.diff
  projects/clang350-import/contrib/llvm/patches/patch-r267981-llvm-r211435-fix-ppc-fctiduz.diff
  projects/clang350-import/contrib/llvm/patches/patch-r269387-clang-arm-target-cpu.diff
  projects/clang350-import/contrib/llvm/patches/patch-r270147-llvm-r197824-r213427-r213960.diff
  projects/clang350-import/contrib/llvm/patches/patch-r271024-llvm-r216989-r216990-fix-movw-armv6.diff
  projects/clang350-import/contrib/llvm/patches/patch-r271282-clang-r200797-r200798-r200805-debug-info-crash.diff
  projects/clang350-import/contrib/llvm/patches/patch-r271432-clang-r205331-debug-info-crash.diff
  projects/clang350-import/contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff
  projects/clang350-import/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff
  projects/clang350-import/contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff
Modified:
  projects/clang350-import/contrib/llvm/patches/README.TXT

Modified: projects/clang350-import/contrib/llvm/patches/README.TXT
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/README.TXT	Mon Nov 24 18:34:11 2014	(r274970)
+++ projects/clang350-import/contrib/llvm/patches/README.TXT	Mon Nov 24 18:43:37 2014	(r274971)
@@ -1,11 +1,11 @@
 This is a set of individual patches, which contain all the customizations to
 llvm/clang currently in the FreeBSD base system.  These can be applied in
-alphabetical order to a pristine llvm/clang 3.4 release source tree, for example
-by doing:
+alphabetical order to a pristine llvm/clang 3.5.0 release source tree, for
+example by doing:
 
-svn co https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_34/final llvm-3.4-final 
-svn co https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_34/final llvm-3.4-final/tools/clang
-cd llvm-3.4-final
+svn co https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_350/final llvm-3.5.0-final 
+svn co https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_350/final llvm-3.5.0-final/tools/clang
+cd llvm-3.5.0-final
 for p in /usr/src/contrib/llvm/patches/patch-*.diff; do
 	patch -p0 -f -F0 -E -i $p -s || break
 done

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-01-clang-version-include.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r208961-clang-version-include.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r208961-clang-version-include.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-01-clang-version-include.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -1,5 +1,5 @@
-This patch adjusts clang's default include paths to add FreeBSD-specific
-directories.
+This patch adjusts clang's default include path add a FreeBSD base system
+specific directory.
 
 Introduced here: http://svnweb.freebsd.org/changeset/base/208961
 
@@ -15,25 +15,13 @@ Index: tools/clang/lib/Frontend/InitHead
  #include "clang/Config/config.h" // C_INCLUDE_DIRS
  #include "clang/Lex/HeaderSearch.h"
  #include "clang/Lex/HeaderSearchOptions.h"
-@@ -333,6 +334,9 @@ void InitHeaderSearch::AddDefaultCIncludePaths(con
- #endif
+@@ -336,6 +337,9 @@ void InitHeaderSearch::AddDefaultCIncludePaths(con
+       break;
      }
      break;
 +  case llvm::Triple::FreeBSD:
 +    AddPath("/usr/include/clang/" CLANG_VERSION_STRING, System, false);
 +    break;
-       
    default:
      break;
-@@ -423,11 +427,6 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple
-     else
-       AddPath("/usr/include/c++/4.4", CXXSystem, false);
-     break;
--  case llvm::Triple::FreeBSD:
--    // FreeBSD 8.0
--    // FreeBSD 7.3
--    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2", "", "", "", triple);
--    break;
-   case llvm::Triple::OpenBSD: {
-     std::string t = triple.getTriple();
-     if (t.substr(0, 6) == "x86_64")
+   }

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-02-format-extensions.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r208987-format-extensions.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r208987-format-extensions.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-02-format-extensions.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -3,12 +3,110 @@ which enables additional printf modifier
 
 Introduced here: http://svnweb.freebsd.org/changeset/base/208987
 
+Index: tools/clang/include/clang/Driver/Options.td
+===================================================================
+--- tools/clang/include/clang/Driver/Options.td
++++ tools/clang/include/clang/Driver/Options.td
+@@ -563,6 +563,8 @@ def fno_rewrite_includes : Flag<["-"], "fno-rewrit
+ 
+ def ffreestanding : Flag<["-"], "ffreestanding">, Group<f_Group>, Flags<[CC1Option]>,
+   HelpText<"Assert that the compilation takes place in a freestanding environment">;
++def fformat_extensions: Flag<["-"], "fformat-extensions">, Group<f_Group>, Flags<[CC1Option]>,
++  HelpText<"Enable FreeBSD kernel specific format string extensions">;
+ def fgnu_keywords : Flag<["-"], "fgnu-keywords">, Group<f_Group>, Flags<[CC1Option]>,
+   HelpText<"Allow GNU-extension keywords regardless of language standard">;
+ def fgnu89_inline : Flag<["-"], "fgnu89-inline">, Group<f_Group>, Flags<[CC1Option]>,
+Index: tools/clang/include/clang/Basic/LangOptions.def
+===================================================================
+--- tools/clang/include/clang/Basic/LangOptions.def
++++ tools/clang/include/clang/Basic/LangOptions.def
+@@ -87,6 +87,7 @@ LANGOPT(RTTI              , 1, 1, "run-time type i
+ LANGOPT(RTTIData          , 1, 1, "emit run-time type information data")
+ LANGOPT(MSBitfields       , 1, 0, "Microsoft-compatible structure layout")
+ LANGOPT(Freestanding, 1, 0, "freestanding implementation")
++LANGOPT(FormatExtensions  , 1, 0, "FreeBSD format extensions")
+ LANGOPT(NoBuiltin         , 1, 0, "disable builtin functions")
+ LANGOPT(NoMathBuiltin     , 1, 0, "disable math builtin functions")
+ 
+Index: tools/clang/include/clang/Analysis/Analyses/FormatString.h
+===================================================================
+--- tools/clang/include/clang/Analysis/Analyses/FormatString.h
++++ tools/clang/include/clang/Analysis/Analyses/FormatString.h
+@@ -158,6 +158,11 @@ class ConversionSpecifier {
+     ObjCObjArg,  // '@'
+     ObjCBeg = ObjCObjArg, ObjCEnd = ObjCObjArg,
+ 
++    // FreeBSD specific specifiers
++    FreeBSDbArg,
++    FreeBSDDArg,
++    FreeBSDrArg,
++
+     // GlibC specific specifiers.
+     PrintErrno,   // 'm'
+ 
+Index: tools/clang/lib/Sema/SemaChecking.cpp
+===================================================================
+--- tools/clang/lib/Sema/SemaChecking.cpp
++++ tools/clang/lib/Sema/SemaChecking.cpp
+@@ -3074,6 +3074,40 @@ CheckPrintfHandler::HandlePrintfSpecifier(const an
+     CoveredArgs.set(argIndex);
+   }
+ 
++  // FreeBSD extensions
++  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg ||
++      CS.getKind() == ConversionSpecifier::FreeBSDDArg) { 
++    // claim the second argument
++    CoveredArgs.set(argIndex + 1);
++
++    // Now type check the data expression that matches the
++    // format specifier.
++    const Expr *Ex = getDataArg(argIndex);
++    const analyze_printf::ArgType &AT = 
++      (CS.getKind() == ConversionSpecifier::FreeBSDbArg) ?
++        ArgType(S.Context.IntTy) : ArgType::CStrTy;
++    if (AT.isValid() && !AT.matchesType(S.Context, Ex->getType()))
++      S.Diag(getLocationOfByte(CS.getStart()),
++             diag::warn_format_conversion_argument_type_mismatch)
++        << AT.getRepresentativeType(S.Context) << Ex->getType()
++        << getSpecifierRange(startSpecifier, specifierLen)
++        << Ex->getSourceRange();
++
++    // Now type check the data expression that matches the
++    // format specifier.
++    Ex = getDataArg(argIndex + 1);
++    const analyze_printf::ArgType &AT2 = ArgType::CStrTy;
++    if (AT2.isValid() && !AT2.matchesType(S.Context, Ex->getType()))
++      S.Diag(getLocationOfByte(CS.getStart()),
++             diag::warn_format_conversion_argument_type_mismatch)
++        << AT2.getRepresentativeType(S.Context) << Ex->getType()
++        << getSpecifierRange(startSpecifier, specifierLen)
++        << Ex->getSourceRange();
++
++     return true;
++  }
++  // END OF FREEBSD EXTENSIONS
++
+   // Check for using an Objective-C specific conversion specifier
+   // in a non-ObjC literal.
+   if (!ObjCContext && CS.isObjCArg()) {
+Index: tools/clang/lib/Driver/Tools.cpp
+===================================================================
+--- tools/clang/lib/Driver/Tools.cpp
++++ tools/clang/lib/Driver/Tools.cpp
+@@ -3517,6 +3517,7 @@ void Clang::ConstructJob(Compilation &C, const Job
+ 
+   // Forward -f (flag) options which we can pass directly.
+   Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
++  Args.AddLastArg(CmdArgs, options::OPT_fformat_extensions);
+   Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
+   Args.AddLastArg(CmdArgs, options::OPT_fstandalone_debug);
+   Args.AddLastArg(CmdArgs, options::OPT_fno_standalone_debug);
 Index: tools/clang/lib/Frontend/CompilerInvocation.cpp
 ===================================================================
 --- tools/clang/lib/Frontend/CompilerInvocation.cpp
 +++ tools/clang/lib/Frontend/CompilerInvocation.cpp
-@@ -1319,6 +1319,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgLi
-   Opts.ShortWChar = Args.hasArg(OPT_fshort_wchar);
+@@ -1443,6 +1443,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgLi
+   Opts.ShortWChar = Args.hasFlag(OPT_fshort_wchar, OPT_fno_short_wchar, false);
    Opts.ShortEnums = Args.hasArg(OPT_fshort_enums);
    Opts.Freestanding = Args.hasArg(OPT_ffreestanding);
 +  Opts.FormatExtensions = Args.hasArg(OPT_fformat_extensions);
@@ -114,101 +212,3 @@ Index: tools/clang/lib/Analysis/PrintfFo
      return true;
  
    default:
-Index: tools/clang/lib/Sema/SemaChecking.cpp
-===================================================================
---- tools/clang/lib/Sema/SemaChecking.cpp
-+++ tools/clang/lib/Sema/SemaChecking.cpp
-@@ -2980,6 +2980,40 @@ CheckPrintfHandler::HandlePrintfSpecifier(const an
-     CoveredArgs.set(argIndex);
-   }
- 
-+  // FreeBSD extensions
-+  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg ||
-+      CS.getKind() == ConversionSpecifier::FreeBSDDArg) { 
-+    // claim the second argument
-+    CoveredArgs.set(argIndex + 1);
-+
-+    // Now type check the data expression that matches the
-+    // format specifier.
-+    const Expr *Ex = getDataArg(argIndex);
-+    const analyze_printf::ArgType &AT = 
-+      (CS.getKind() == ConversionSpecifier::FreeBSDbArg) ?
-+        ArgType(S.Context.IntTy) : ArgType::CStrTy;
-+    if (AT.isValid() && !AT.matchesType(S.Context, Ex->getType()))
-+      S.Diag(getLocationOfByte(CS.getStart()),
-+             diag::warn_printf_conversion_argument_type_mismatch)
-+        << AT.getRepresentativeType(S.Context) << Ex->getType()
-+        << getSpecifierRange(startSpecifier, specifierLen)
-+        << Ex->getSourceRange();
-+
-+    // Now type check the data expression that matches the
-+    // format specifier.
-+    Ex = getDataArg(argIndex + 1);
-+    const analyze_printf::ArgType &AT2 = ArgType::CStrTy;
-+    if (AT2.isValid() && !AT2.matchesType(S.Context, Ex->getType()))
-+      S.Diag(getLocationOfByte(CS.getStart()),
-+             diag::warn_printf_conversion_argument_type_mismatch)
-+        << AT2.getRepresentativeType(S.Context) << Ex->getType()
-+        << getSpecifierRange(startSpecifier, specifierLen)
-+        << Ex->getSourceRange();
-+
-+     return true;
-+  }
-+  // END OF FREEBSD EXTENSIONS
-+
-   // Check for using an Objective-C specific conversion specifier
-   // in a non-ObjC literal.
-   if (!ObjCContext && CS.isObjCArg()) {
-Index: tools/clang/lib/Driver/Tools.cpp
-===================================================================
---- tools/clang/lib/Driver/Tools.cpp
-+++ tools/clang/lib/Driver/Tools.cpp
-@@ -2991,6 +2991,7 @@ void Clang::ConstructJob(Compilation &C, const Job
- 
-   // Forward -f (flag) options which we can pass directly.
-   Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
-+  Args.AddLastArg(CmdArgs, options::OPT_fformat_extensions);
-   Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
-   Args.AddLastArg(CmdArgs, options::OPT_flimit_debug_info);
-   Args.AddLastArg(CmdArgs, options::OPT_fno_limit_debug_info);
-Index: tools/clang/include/clang/Basic/LangOptions.def
-===================================================================
---- tools/clang/include/clang/Basic/LangOptions.def
-+++ tools/clang/include/clang/Basic/LangOptions.def
-@@ -84,6 +84,7 @@ LANGOPT(TraditionalCPP    , 1, 0, "traditional CPP
- LANGOPT(RTTI              , 1, 1, "run-time type information")
- LANGOPT(MSBitfields       , 1, 0, "Microsoft-compatible structure layout")
- LANGOPT(Freestanding, 1, 0, "freestanding implementation")
-+LANGOPT(FormatExtensions  , 1, 0, "FreeBSD format extensions")
- LANGOPT(NoBuiltin         , 1, 0, "disable builtin functions")
- LANGOPT(NoMathBuiltin     , 1, 0, "disable math builtin functions")
- 
-Index: tools/clang/include/clang/Analysis/Analyses/FormatString.h
-===================================================================
---- tools/clang/include/clang/Analysis/Analyses/FormatString.h
-+++ tools/clang/include/clang/Analysis/Analyses/FormatString.h
-@@ -158,6 +158,11 @@ class ConversionSpecifier {
-     ObjCObjArg,  // '@'
-     ObjCBeg = ObjCObjArg, ObjCEnd = ObjCObjArg,
- 
-+    // FreeBSD specific specifiers
-+    FreeBSDbArg,
-+    FreeBSDDArg,
-+    FreeBSDrArg,
-+
-     // GlibC specific specifiers.
-     PrintErrno,   // 'm'
- 
-Index: tools/clang/include/clang/Driver/Options.td
-===================================================================
---- tools/clang/include/clang/Driver/Options.td
-+++ tools/clang/include/clang/Driver/Options.td
-@@ -530,6 +530,8 @@ def fno_rewrite_includes : Flag<["-"], "fno-rewrit
- 
- def ffreestanding : Flag<["-"], "ffreestanding">, Group<f_Group>, Flags<[CC1Option]>,
-   HelpText<"Assert that the compilation takes place in a freestanding environment">;
-+def fformat_extensions: Flag<["-"], "fformat-extensions">, Group<f_Group>, Flags<[CC1Option]>,
-+  HelpText<"Enable FreeBSD kernel specific format string extensions">;
- def fgnu_keywords : Flag<["-"], "fgnu-keywords">, Group<f_Group>, Flags<[CC1Option]>,
-   HelpText<"Allow GNU-extension keywords regardless of language standard">;
- def fgnu89_inline : Flag<["-"], "fgnu89-inline">, Group<f_Group>, Flags<[CC1Option]>,

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-03-clang-vendor-suffix.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r209107-clang-vendor-suffix.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r209107-clang-vendor-suffix.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-03-clang-vendor-suffix.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -8,8 +8,8 @@ Index: tools/clang/lib/Basic/Version.cpp
 ===================================================================
 --- tools/clang/lib/Basic/Version.cpp
 +++ tools/clang/lib/Basic/Version.cpp
-@@ -124,8 +124,10 @@ std::string getClangFullVersion() {
-   OS << "clang version " CLANG_VERSION_STRING " "
+@@ -128,8 +128,10 @@ std::string getClangToolFullVersion(StringRef Tool
+   OS << ToolName << " version " CLANG_VERSION_STRING " "
       << getClangFullRepositoryVersion();
  
 +#ifdef CLANG_VENDOR_SUFFIX
@@ -17,6 +17,6 @@ Index: tools/clang/lib/Basic/Version.cpp
 +#elif defined(CLANG_VENDOR)
    // If vendor supplied, include the base LLVM version as well.
 -#ifdef CLANG_VENDOR
-   OS << " (based on LLVM " << PACKAGE_VERSION << ")";
+   OS << " (based on " << BACKEND_PACKAGE_STRING << ")";
  #endif
  

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-04-default-target-triple.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r221503-default-target-triple.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r221503-default-target-triple.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-04-default-target-triple.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -21,6 +21,6 @@ Index: lib/Support/Unix/Host.inc
  
 @@ -61,3 +66,4 @@ std::string sys::getDefaultTargetTriple() {
  
-   return Triple;
+   return Triple::normalize(Triple);
  }
 +#endif // __FreeBSD__

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-05-add-CC-aliases.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r257109-add-CC-aliases.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r257109-add-CC-aliases.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-05-add-CC-aliases.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -7,19 +7,17 @@ Index: tools/clang/tools/driver/driver.c
 ===================================================================
 --- tools/clang/tools/driver/driver.cpp
 +++ tools/clang/tools/driver/driver.cpp
-@@ -215,6 +215,7 @@ static void ParseProgName(SmallVectorImpl<const ch
-   } suffixes [] = {
-     { "clang",     0 },
+@@ -217,11 +217,13 @@ static void ParseProgName(SmallVectorImpl<const ch
+     { "clang",     nullptr },
      { "clang++",   "--driver-mode=g++" },
-+    { "clang-CC",  "--driver-mode=g++" },
      { "clang-c++", "--driver-mode=g++" },
-     { "clang-cc",  0 },
++    { "clang-CC",  "--driver-mode=g++" },
+     { "clang-cc",  nullptr },
      { "clang-cpp", "--driver-mode=cpp" },
-@@ -221,6 +222,7 @@ static void ParseProgName(SmallVectorImpl<const ch
      { "clang-g++", "--driver-mode=g++" },
-     { "clang-gcc", 0 },
+     { "clang-gcc", nullptr },
      { "clang-cl",  "--driver-mode=cl"  },
 +    { "CC",        "--driver-mode=g++" },
-     { "cc",        0 },
+     { "cc",        nullptr },
      { "cpp",       "--driver-mode=cpp" },
      { "cl" ,       "--driver-mode=cl"  },

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-06-clang-arm-target-cpu.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r269387-clang-arm-target-cpu.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r269387-clang-arm-target-cpu.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-06-clang-arm-target-cpu.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -1,34 +1,20 @@
-Update the ARMv6 core clang targets to be an arm1176jzf-s. This brings us
-in line with gcc in base as this makes llvm generate code for the armv6k
-variant of the instruction set.
+Pull in r217454 from upstream llvm trunk (by Ed Maste):
+
+  Use armv6k default for FreeBSD/ARM
+
+  Patch by Andrew Turner.
 
 Introduced here: http://svnweb.freebsd.org/changeset/base/269387
 
-Index: tools/clang/lib/Driver/ToolChain.cpp
-===================================================================
---- tools/clang/lib/Driver/ToolChain.cpp	(revision 269386)
-+++ tools/clang/lib/Driver/ToolChain.cpp	(revision 269387)
-@@ -183,7 +183,8 @@ static const char *getARMTargetCPU(const ArgList &
-     MArch = Triple.getArchName();
-   }
- 
--  if (Triple.getOS() == llvm::Triple::NetBSD) {
-+  if (Triple.getOS() == llvm::Triple::NetBSD ||
-+      Triple.getOS() == llvm::Triple::FreeBSD) {
-     if (MArch == "armv6")
-       return "arm1176jzf-s";
-   }
-Index: tools/clang/lib/Driver/Tools.cpp
+Index: lib/Support/Triple.cpp
 ===================================================================
---- tools/clang/lib/Driver/Tools.cpp	(revision 269386)
-+++ tools/clang/lib/Driver/Tools.cpp	(revision 269387)
-@@ -499,7 +499,8 @@ static std::string getARMTargetCPU(const ArgList &
-     MArch = Triple.getArchName();
-   }
+--- lib/Support/Triple.cpp
++++ lib/Support/Triple.cpp
+@@ -963,6 +963,7 @@ const char *Triple::getARMCPUForArch(StringRef MAr
+     MArch = getArchName();
  
--  if (Triple.getOS() == llvm::Triple::NetBSD) {
-+  if (Triple.getOS() == llvm::Triple::NetBSD ||
-+      Triple.getOS() == llvm::Triple::FreeBSD) {
+   switch (getOS()) {
++  case llvm::Triple::FreeBSD:
+   case llvm::Triple::NetBSD:
      if (MArch == "armv6")
        return "arm1176jzf-s";
-   }

Added: projects/clang350-import/contrib/llvm/patches/patch-07-llvm-r213960-ppc32-tls.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/clang350-import/contrib/llvm/patches/patch-07-llvm-r213960-ppc32-tls.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -0,0 +1,547 @@
+Pull in r213960 from upstream llvm trunk (by Hal Finkel):
+
+  [PowerPC] Support TLS on PPC32/ELF
+
+  Patch by Justin Hibbits!
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/270147
+
+Index: lib/Target/PowerPC/PPCISelLowering.h
+===================================================================
+--- lib/Target/PowerPC/PPCISelLowering.h
++++ lib/Target/PowerPC/PPCISelLowering.h
+@@ -181,6 +181,10 @@ namespace llvm {
+       /// on PPC32.
+       PPC32_GOT,
+ 
++      /// GPRC = address of _GLOBAL_OFFSET_TABLE_. Used by general dynamic and
++      /// local dynamic TLS  on PPC32.
++      PPC32_PICGOT,
++
+       /// G8RC = ADDIS_GOT_TPREL_HA %X2, Symbol - Used by the initial-exec
+       /// TLS model, produces an ADDIS8 instruction that adds the GOT
+       /// base to sym\@got\@tprel\@ha.
+Index: lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
+===================================================================
+--- lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
++++ lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
+@@ -17,6 +17,7 @@
+ #include "llvm/MC/MCExpr.h"
+ #include "llvm/MC/MCInst.h"
+ #include "llvm/MC/MCInstrInfo.h"
++#include "llvm/MC/MCSymbol.h"
+ #include "llvm/Support/CommandLine.h"
+ #include "llvm/Support/raw_ostream.h"
+ #include "llvm/Target/TargetOpcodes.h"
+@@ -308,10 +309,16 @@ void PPCInstPrinter::printMemRegReg(const MCInst *
+ 
+ void PPCInstPrinter::printTLSCall(const MCInst *MI, unsigned OpNo,
+                                   raw_ostream &O) {
+-  printBranchOperand(MI, OpNo, O);
++  // On PPC64, VariantKind is VK_None, but on PPC32, it's VK_PLT, and it must
++  // come at the _end_ of the expression.
++  const MCOperand &Op = MI->getOperand(OpNo);
++  const MCSymbolRefExpr &refExp = cast<MCSymbolRefExpr>(*Op.getExpr());
++  O << refExp.getSymbol().getName();
+   O << '(';
+   printOperand(MI, OpNo+1, O);
+   O << ')';
++  if (refExp.getKind() != MCSymbolRefExpr::VK_None)
++    O << '@' << MCSymbolRefExpr::getVariantKindName(refExp.getKind());
+ }
+ 
+ 
+Index: lib/Target/PowerPC/PPCInstrInfo.td
+===================================================================
+--- lib/Target/PowerPC/PPCInstrInfo.td
++++ lib/Target/PowerPC/PPCInstrInfo.td
+@@ -588,6 +588,12 @@ def tlsreg32 : Operand<i32> {
+   let EncoderMethod = "getTLSRegEncoding";
+   let ParserMatchClass = PPCTLSRegOperand;
+ }
++def tlsgd32 : Operand<i32> {}
++def tlscall32 : Operand<i32> {
++  let PrintMethod = "printTLSCall";
++  let MIOperandInfo = (ops calltarget:$func, tlsgd32:$sym);
++  let EncoderMethod = "getTLSCallEncoding";
++}
+ 
+ // PowerPC Predicate operand.
+ def pred : Operand<OtherVT> {
+@@ -1071,6 +1077,8 @@ let isCall = 1, PPC970_Unit = 7, Defs = [LR] in {
+                     "bla $func", IIC_BrB, [(PPCcall (i32 imm:$func))]>;
+ 
+     let isCodeGenOnly = 1 in {
++      def BL_TLS  : IForm<18, 0, 1, (outs), (ins tlscall32:$func),
++                          "bl $func", IIC_BrB, []>;
+       def BCCL : BForm<16, 0, 1, (outs), (ins pred:$cond, condbrtarget:$dst),
+                        "b${cond:cc}l${cond:pm} ${cond:reg}, $dst">;
+       def BCCLA : BForm<16, 1, 1, (outs), (ins pred:$cond, abscondbrtarget:$dst),
+@@ -2396,13 +2404,45 @@ def : Pat<(add i32:$in, (PPChi tblockaddress:$g, 0
+ def PPC32GOT: Pseudo<(outs gprc:$rD), (ins), "#PPC32GOT", 
+                 [(set i32:$rD, (PPCppc32GOT))]>;
+ 
++// Get the _GLOBAL_OFFSET_TABLE_ in PIC mode.
++// This uses two output registers, the first as the real output, the second as a
++// temporary register, used internally in code generation.
++def PPC32PICGOT: Pseudo<(outs gprc:$rD, gprc:$rT), (ins), "#PPC32PICGOT", 
++                []>, NoEncode<"$rT">;
++
+ def LDgotTprelL32: Pseudo<(outs gprc:$rD), (ins s16imm:$disp, gprc_nor0:$reg),
+-                        "#LDgotTprelL32",
+-                        [(set i32:$rD,
+-                          (PPCldGotTprelL tglobaltlsaddr:$disp, i32:$reg))]>;
++                           "#LDgotTprelL32",
++                           [(set i32:$rD,
++                             (PPCldGotTprelL tglobaltlsaddr:$disp, i32:$reg))]>;
+ def : Pat<(PPCaddTls i32:$in, tglobaltlsaddr:$g),
+           (ADD4TLS $in, tglobaltlsaddr:$g)>;
+ 
++def ADDItlsgdL32 : Pseudo<(outs gprc:$rD), (ins gprc_nor0:$reg, s16imm:$disp),
++                         "#ADDItlsgdL32",
++                         [(set i32:$rD,
++                           (PPCaddiTlsgdL i32:$reg, tglobaltlsaddr:$disp))]>;
++def GETtlsADDR32 : Pseudo<(outs gprc:$rD), (ins gprc:$reg, tlsgd32:$sym),
++                          "#GETtlsADDR32",
++                          [(set i32:$rD,
++                            (PPCgetTlsAddr i32:$reg, tglobaltlsaddr:$sym))]>;
++def ADDItlsldL32 : Pseudo<(outs gprc:$rD), (ins gprc_nor0:$reg, s16imm:$disp),
++                          "#ADDItlsldL32",
++                          [(set i32:$rD,
++                            (PPCaddiTlsldL i32:$reg, tglobaltlsaddr:$disp))]>;
++def GETtlsldADDR32 : Pseudo<(outs gprc:$rD), (ins gprc:$reg, tlsgd32:$sym),
++                            "#GETtlsldADDR32",
++                            [(set i32:$rD,
++                              (PPCgetTlsldAddr i32:$reg, tglobaltlsaddr:$sym))]>;
++def ADDIdtprelL32 : Pseudo<(outs gprc:$rD), (ins gprc_nor0:$reg, s16imm:$disp),
++                           "#ADDIdtprelL32",
++                           [(set i32:$rD,
++                             (PPCaddiDtprelL i32:$reg, tglobaltlsaddr:$disp))]>;
++def ADDISdtprelHA32 : Pseudo<(outs gprc:$rD), (ins gprc_nor0:$reg, s16imm:$disp),
++                            "#ADDISdtprelHA32",
++                            [(set i32:$rD,
++                              (PPCaddisDtprelHA i32:$reg,
++                                                tglobaltlsaddr:$disp))]>;
++
+ // Support for Position-independent code
+ def LWZtoc: Pseudo<(outs gprc:$rD), (ins tocentry32:$disp, gprc:$reg),
+                   "#LWZtoc",
+Index: lib/Target/PowerPC/PPCISelLowering.cpp
+===================================================================
+--- lib/Target/PowerPC/PPCISelLowering.cpp
++++ lib/Target/PowerPC/PPCISelLowering.cpp
+@@ -1685,47 +1685,61 @@ SDValue PPCTargetLowering::LowerGlobalTLSAddress(S
+ 
+   if (Model == TLSModel::GeneralDynamic) {
+     SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0);
+-    SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64);
+-    SDValue GOTEntryHi = DAG.getNode(PPCISD::ADDIS_TLSGD_HA, dl, PtrVT,
+-                                     GOTReg, TGA);
++    SDValue GOTPtr;
++    if (is64bit) {
++      SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64);
++      GOTPtr = DAG.getNode(PPCISD::ADDIS_TLSGD_HA, dl, PtrVT,
++                                   GOTReg, TGA);
++    } else {
++      GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT);
++    }
+     SDValue GOTEntry = DAG.getNode(PPCISD::ADDI_TLSGD_L, dl, PtrVT,
+-                                   GOTEntryHi, TGA);
++                                   GOTPtr, TGA);
+ 
+     // We need a chain node, and don't have one handy.  The underlying
+     // call has no side effects, so using the function entry node
+     // suffices.
+     SDValue Chain = DAG.getEntryNode();
+-    Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, GOTEntry);
+-    SDValue ParmReg = DAG.getRegister(PPC::X3, MVT::i64);
++    Chain = DAG.getCopyToReg(Chain, dl,
++                             is64bit ? PPC::X3 : PPC::R3, GOTEntry);
++    SDValue ParmReg = DAG.getRegister(is64bit ? PPC::X3 : PPC::R3,
++                                      is64bit ? MVT::i64 : MVT::i32);
+     SDValue TLSAddr = DAG.getNode(PPCISD::GET_TLS_ADDR, dl,
+                                   PtrVT, ParmReg, TGA);
+     // The return value from GET_TLS_ADDR really is in X3 already, but
+     // some hacks are needed here to tie everything together.  The extra
+     // copies dissolve during subsequent transforms.
+-    Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, TLSAddr);
+-    return DAG.getCopyFromReg(Chain, dl, PPC::X3, PtrVT);
++    Chain = DAG.getCopyToReg(Chain, dl, is64bit ? PPC::X3 : PPC::R3, TLSAddr);
++    return DAG.getCopyFromReg(Chain, dl, is64bit ? PPC::X3 : PPC::R3, PtrVT);
+   }
+ 
+   if (Model == TLSModel::LocalDynamic) {
+     SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0);
+-    SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64);
+-    SDValue GOTEntryHi = DAG.getNode(PPCISD::ADDIS_TLSLD_HA, dl, PtrVT,
+-                                     GOTReg, TGA);
++    SDValue GOTPtr;
++    if (is64bit) {
++      SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64);
++      GOTPtr = DAG.getNode(PPCISD::ADDIS_TLSLD_HA, dl, PtrVT,
++                           GOTReg, TGA);
++    } else {
++      GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT);
++    }
+     SDValue GOTEntry = DAG.getNode(PPCISD::ADDI_TLSLD_L, dl, PtrVT,
+-                                   GOTEntryHi, TGA);
++                                   GOTPtr, TGA);
+ 
+     // We need a chain node, and don't have one handy.  The underlying
+     // call has no side effects, so using the function entry node
+     // suffices.
+     SDValue Chain = DAG.getEntryNode();
+-    Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, GOTEntry);
+-    SDValue ParmReg = DAG.getRegister(PPC::X3, MVT::i64);
++    Chain = DAG.getCopyToReg(Chain, dl,
++                             is64bit ? PPC::X3 : PPC::R3, GOTEntry);
++    SDValue ParmReg = DAG.getRegister(is64bit ? PPC::X3 : PPC::R3,
++                                      is64bit ? MVT::i64 : MVT::i32);
+     SDValue TLSAddr = DAG.getNode(PPCISD::GET_TLSLD_ADDR, dl,
+                                   PtrVT, ParmReg, TGA);
+     // The return value from GET_TLSLD_ADDR really is in X3 already, but
+     // some hacks are needed here to tie everything together.  The extra
+     // copies dissolve during subsequent transforms.
+-    Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, TLSAddr);
++    Chain = DAG.getCopyToReg(Chain, dl, is64bit ? PPC::X3 : PPC::R3, TLSAddr);
+     SDValue DtvOffsetHi = DAG.getNode(PPCISD::ADDIS_DTPREL_HA, dl, PtrVT,
+                                       Chain, ParmReg, TGA);
+     return DAG.getNode(PPCISD::ADDI_DTPREL_L, dl, PtrVT, DtvOffsetHi, TGA);
+Index: lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
+===================================================================
+--- lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
++++ lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
+@@ -236,7 +236,10 @@ unsigned PPCELFObjectWriter::getRelocTypeInner(con
+         Type = ELF::R_PPC64_DTPREL16_HIGHESTA;
+         break;
+       case MCSymbolRefExpr::VK_PPC_GOT_TLSGD:
+-        Type = ELF::R_PPC64_GOT_TLSGD16;
++        if (is64Bit())
++          Type = ELF::R_PPC64_GOT_TLSGD16;
++        else
++          Type = ELF::R_PPC_GOT_TLSGD16;
+         break;
+       case MCSymbolRefExpr::VK_PPC_GOT_TLSGD_LO:
+         Type = ELF::R_PPC64_GOT_TLSGD16_LO;
+@@ -248,7 +251,10 @@ unsigned PPCELFObjectWriter::getRelocTypeInner(con
+         Type = ELF::R_PPC64_GOT_TLSGD16_HA;
+         break;
+       case MCSymbolRefExpr::VK_PPC_GOT_TLSLD:
+-        Type = ELF::R_PPC64_GOT_TLSLD16;
++        if (is64Bit())
++          Type = ELF::R_PPC64_GOT_TLSLD16;
++        else
++          Type = ELF::R_PPC_GOT_TLSLD16;
+         break;
+       case MCSymbolRefExpr::VK_PPC_GOT_TLSLD_LO:
+         Type = ELF::R_PPC64_GOT_TLSLD16_LO;
+@@ -344,13 +350,22 @@ unsigned PPCELFObjectWriter::getRelocTypeInner(con
+       switch (Modifier) {
+       default: llvm_unreachable("Unsupported Modifier");
+       case MCSymbolRefExpr::VK_PPC_TLSGD:
+-        Type = ELF::R_PPC64_TLSGD;
++        if (is64Bit())
++          Type = ELF::R_PPC64_TLSGD;
++        else
++          Type = ELF::R_PPC_TLSGD;
+         break;
+       case MCSymbolRefExpr::VK_PPC_TLSLD:
+-        Type = ELF::R_PPC64_TLSLD;
++        if (is64Bit())
++          Type = ELF::R_PPC64_TLSLD;
++        else
++          Type = ELF::R_PPC_TLSLD;
+         break;
+       case MCSymbolRefExpr::VK_PPC_TLS:
+-        Type = ELF::R_PPC64_TLS;
++        if (is64Bit())
++          Type = ELF::R_PPC64_TLS;
++        else
++          Type = ELF::R_PPC_TLS;
+         break;
+       }
+       break;
+Index: lib/Target/PowerPC/PPCAsmPrinter.cpp
+===================================================================
+--- lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -573,6 +573,34 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
+     return;
+   }
+ 
++  case PPC::PPC32PICGOT: {
++    MCSymbol *GOTSymbol = OutContext.GetOrCreateSymbol(StringRef("_GLOBAL_OFFSET_TABLE_"));
++    MCSymbol *GOTRef = OutContext.CreateTempSymbol();
++    MCSymbol *NextInstr = OutContext.CreateTempSymbol();
++
++    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::BL)
++      // FIXME: We would like an efficient form for this, so we don't have to do
++      // a lot of extra uniquing.
++      .addExpr(MCSymbolRefExpr::Create(NextInstr, OutContext)));
++    const MCExpr *OffsExpr =
++      MCBinaryExpr::CreateSub(MCSymbolRefExpr::Create(GOTSymbol, OutContext),
++                                MCSymbolRefExpr::Create(GOTRef, OutContext),
++        OutContext);
++    OutStreamer.EmitLabel(GOTRef);
++    OutStreamer.EmitValue(OffsExpr, 4);
++    OutStreamer.EmitLabel(NextInstr);
++    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::MFLR)
++                                .addReg(MI->getOperand(0).getReg()));
++    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::LWZ)
++                                .addReg(MI->getOperand(1).getReg())
++                                .addImm(0)
++                                .addReg(MI->getOperand(0).getReg()));
++    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::ADD4)
++                                .addReg(MI->getOperand(0).getReg())
++                                .addReg(MI->getOperand(1).getReg())
++                                .addReg(MI->getOperand(0).getReg()));
++    return;
++  }
+   case PPC::PPC32GOT: {
+     MCSymbol *GOTSymbol = OutContext.GetOrCreateSymbol(StringRef("_GLOBAL_OFFSET_TABLE_"));
+     const MCExpr *SymGotTlsL =
+@@ -606,31 +634,43 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
+                                 .addExpr(SymGotTlsGD));
+     return;
+   }
+-  case PPC::ADDItlsgdL: {
++  case PPC::ADDItlsgdL:
+     // Transform: %Xd = ADDItlsgdL %Xs, <ga:@sym>
+     // Into:      %Xd = ADDI8 %Xs, sym@got@tlsgd@l
+-    assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++  case PPC::ADDItlsgdL32: {
++    // Transform: %Rd = ADDItlsgdL32 %Rs, <ga:@sym>
++    // Into:      %Rd = ADDI %Rs, sym@got@tlsgd
+     const MachineOperand &MO = MI->getOperand(2);
+     const GlobalValue *GValue = MO.getGlobal();
+     MCSymbol *MOSymbol = getSymbol(GValue);
+     const MCExpr *SymGotTlsGD =
+-      MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_GOT_TLSGD_LO,
++      MCSymbolRefExpr::Create(MOSymbol, Subtarget.isPPC64() ?
++                                         MCSymbolRefExpr::VK_PPC_GOT_TLSGD_LO :
++                                         MCSymbolRefExpr::VK_PPC_GOT_TLSGD,
+                               OutContext);
+-    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::ADDI8)
+-                                .addReg(MI->getOperand(0).getReg())
+-                                .addReg(MI->getOperand(1).getReg())
+-                                .addExpr(SymGotTlsGD));
++    EmitToStreamer(OutStreamer,
++                   MCInstBuilder(Subtarget.isPPC64() ? PPC::ADDI8 : PPC::ADDI)
++                   .addReg(MI->getOperand(0).getReg())
++                   .addReg(MI->getOperand(1).getReg())
++                   .addExpr(SymGotTlsGD));
+     return;
+   }
+-  case PPC::GETtlsADDR: {
++  case PPC::GETtlsADDR:
+     // Transform: %X3 = GETtlsADDR %X3, <ga:@sym>
+     // Into:      BL8_NOP_TLS __tls_get_addr(sym@tlsgd)
+-    assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++  case PPC::GETtlsADDR32: {
++    // Transform: %R3 = GETtlsADDR32 %R3, <ga:@sym>
++    // Into:      BL_TLS __tls_get_addr(sym@tlsgd)@PLT
+ 
+     StringRef Name = "__tls_get_addr";
+     MCSymbol *TlsGetAddr = OutContext.GetOrCreateSymbol(Name);
++    MCSymbolRefExpr::VariantKind Kind = MCSymbolRefExpr::VK_None;
++
++    if (!Subtarget.isPPC64() && !Subtarget.isDarwin() &&
++        TM.getRelocationModel() == Reloc::PIC_)
++      Kind = MCSymbolRefExpr::VK_PLT;
+     const MCSymbolRefExpr *TlsRef = 
+-      MCSymbolRefExpr::Create(TlsGetAddr, MCSymbolRefExpr::VK_None, OutContext);
++      MCSymbolRefExpr::Create(TlsGetAddr, Kind, OutContext);
+     const MachineOperand &MO = MI->getOperand(2);
+     const GlobalValue *GValue = MO.getGlobal();
+     MCSymbol *MOSymbol = getSymbol(GValue);
+@@ -637,9 +677,11 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
+     const MCExpr *SymVar =
+       MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_TLSGD,
+                               OutContext);
+-    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::BL8_NOP_TLS)
+-                                .addExpr(TlsRef)
+-                                .addExpr(SymVar));
++    EmitToStreamer(OutStreamer,
++                   MCInstBuilder(Subtarget.isPPC64() ?
++                                  PPC::BL8_NOP_TLS : PPC::BL_TLS)
++                   .addExpr(TlsRef)
++                   .addExpr(SymVar));
+     return;
+   }
+   case PPC::ADDIStlsldHA: {
+@@ -658,31 +700,44 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
+                                 .addExpr(SymGotTlsLD));
+     return;
+   }
+-  case PPC::ADDItlsldL: {
++  case PPC::ADDItlsldL:
+     // Transform: %Xd = ADDItlsldL %Xs, <ga:@sym>
+     // Into:      %Xd = ADDI8 %Xs, sym@got@tlsld@l
+-    assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++  case PPC::ADDItlsldL32: {
++    // Transform: %Rd = ADDItlsldL32 %Rs, <ga:@sym>
++    // Into:      %Rd = ADDI %Rs, sym@got@tlsld
+     const MachineOperand &MO = MI->getOperand(2);
+     const GlobalValue *GValue = MO.getGlobal();
+     MCSymbol *MOSymbol = getSymbol(GValue);
+     const MCExpr *SymGotTlsLD =
+-      MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_GOT_TLSLD_LO,
++      MCSymbolRefExpr::Create(MOSymbol, Subtarget.isPPC64() ?
++                                         MCSymbolRefExpr::VK_PPC_GOT_TLSLD_LO :
++                                         MCSymbolRefExpr::VK_PPC_GOT_TLSLD,
+                               OutContext);
+-    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::ADDI8)
+-                                .addReg(MI->getOperand(0).getReg())
+-                                .addReg(MI->getOperand(1).getReg())
+-                                .addExpr(SymGotTlsLD));
++    EmitToStreamer(OutStreamer,
++                   MCInstBuilder(Subtarget.isPPC64() ? PPC::ADDI8 : PPC::ADDI)
++                   .addReg(MI->getOperand(0).getReg())
++                   .addReg(MI->getOperand(1).getReg())
++                   .addExpr(SymGotTlsLD));
+     return;
+   }
+-  case PPC::GETtlsldADDR: {
++  case PPC::GETtlsldADDR:
+     // Transform: %X3 = GETtlsldADDR %X3, <ga:@sym>
+     // Into:      BL8_NOP_TLS __tls_get_addr(sym@tlsld)
+-    assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++  case PPC::GETtlsldADDR32: {
++    // Transform: %R3 = GETtlsldADDR32 %R3, <ga:@sym>
++    // Into:      BL_TLS __tls_get_addr(sym@tlsld)@PLT
+ 
+     StringRef Name = "__tls_get_addr";
+     MCSymbol *TlsGetAddr = OutContext.GetOrCreateSymbol(Name);
++    MCSymbolRefExpr::VariantKind Kind = MCSymbolRefExpr::VK_None;
++
++    if (!Subtarget.isPPC64() && !Subtarget.isDarwin() &&
++        TM.getRelocationModel() == Reloc::PIC_)
++      Kind = MCSymbolRefExpr::VK_PLT;
++
+     const MCSymbolRefExpr *TlsRef = 
+-      MCSymbolRefExpr::Create(TlsGetAddr, MCSymbolRefExpr::VK_None, OutContext);
++      MCSymbolRefExpr::Create(TlsGetAddr, Kind, OutContext);
+     const MachineOperand &MO = MI->getOperand(2);
+     const GlobalValue *GValue = MO.getGlobal();
+     MCSymbol *MOSymbol = getSymbol(GValue);
+@@ -689,15 +744,19 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
+     const MCExpr *SymVar =
+       MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_TLSLD,
+                               OutContext);
+-    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::BL8_NOP_TLS)
+-                                .addExpr(TlsRef)
+-                                .addExpr(SymVar));
++    EmitToStreamer(OutStreamer,
++                   MCInstBuilder(Subtarget.isPPC64() ?
++                                  PPC::BL8_NOP_TLS : PPC::BL_TLS)
++                   .addExpr(TlsRef)
++                   .addExpr(SymVar));
+     return;
+   }
+-  case PPC::ADDISdtprelHA: {
++  case PPC::ADDISdtprelHA:
+     // Transform: %Xd = ADDISdtprelHA %X3, <ga:@sym>
+     // Into:      %Xd = ADDIS8 %X3, sym@dtprel@ha
+-    assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++  case PPC::ADDISdtprelHA32: {
++    // Transform: %Rd = ADDISdtprelHA32 %R3, <ga:@sym>
++    // Into:      %Rd = ADDIS %R3, sym@dtprel@ha
+     const MachineOperand &MO = MI->getOperand(2);
+     const GlobalValue *GValue = MO.getGlobal();
+     MCSymbol *MOSymbol = getSymbol(GValue);
+@@ -704,16 +763,19 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
+     const MCExpr *SymDtprel =
+       MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_DTPREL_HA,
+                               OutContext);
+-    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::ADDIS8)
+-                                .addReg(MI->getOperand(0).getReg())
+-                                .addReg(PPC::X3)
+-                                .addExpr(SymDtprel));
++    EmitToStreamer(OutStreamer,
++                   MCInstBuilder(Subtarget.isPPC64() ? PPC::ADDIS8 : PPC::ADDIS)
++                   .addReg(MI->getOperand(0).getReg())
++                   .addReg(Subtarget.isPPC64() ? PPC::X3 : PPC::R3)
++                   .addExpr(SymDtprel));
+     return;
+   }
+-  case PPC::ADDIdtprelL: {
++  case PPC::ADDIdtprelL:
+     // Transform: %Xd = ADDIdtprelL %Xs, <ga:@sym>
+     // Into:      %Xd = ADDI8 %Xs, sym@dtprel@l
+-    assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++  case PPC::ADDIdtprelL32: {
++    // Transform: %Rd = ADDIdtprelL32 %Rs, <ga:@sym>
++    // Into:      %Rd = ADDI %Rs, sym@dtprel@l
+     const MachineOperand &MO = MI->getOperand(2);
+     const GlobalValue *GValue = MO.getGlobal();
+     MCSymbol *MOSymbol = getSymbol(GValue);
+@@ -720,10 +782,11 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
+     const MCExpr *SymDtprel =
+       MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_DTPREL_LO,
+                               OutContext);
+-    EmitToStreamer(OutStreamer, MCInstBuilder(PPC::ADDI8)
+-                                .addReg(MI->getOperand(0).getReg())
+-                                .addReg(MI->getOperand(1).getReg())
+-                                .addExpr(SymDtprel));
++    EmitToStreamer(OutStreamer,
++                   MCInstBuilder(Subtarget.isPPC64() ? PPC::ADDI8 : PPC::ADDI)
++                   .addReg(MI->getOperand(0).getReg())
++                   .addReg(MI->getOperand(1).getReg())
++                   .addExpr(SymDtprel));
+     return;
+   }
+   case PPC::MFOCRF:
+Index: lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+===================================================================
+--- lib/Target/PowerPC/PPCISelDAGToDAG.cpp
++++ lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+@@ -1473,6 +1473,12 @@ SDNode *PPCDAGToDAGISel::Select(SDNode *N) {
+     return CurDAG->getMachineNode(PPC::ADDItocL, dl, MVT::i64,
+                                   SDValue(Tmp, 0), GA);
+   }
++  case PPCISD::PPC32_PICGOT: {
++    // Generate a PIC-safe GOT reference.
++    assert(!PPCSubTarget->isPPC64() && PPCSubTarget->isSVR4ABI() &&
++      "PPCISD::PPC32_PICGOT is only supported for 32-bit SVR4");
++    return CurDAG->SelectNodeTo(N, PPC::PPC32PICGOT, PPCLowering->getPointerTy(),  MVT::i32);
++  }
+   case PPCISD::VADD_SPLAT: {
+     // This expands into one of three sequences, depending on whether
+     // the first operand is odd or even, positive or negative.
+Index: test/CodeGen/PowerPC/tls-pic.ll
+===================================================================
+--- test/CodeGen/PowerPC/tls-pic.ll
++++ test/CodeGen/PowerPC/tls-pic.ll
+@@ -1,5 +1,7 @@
+ ; RUN: llc -march=ppc64 -mcpu=pwr7 -O0 -relocation-model=pic < %s | FileCheck -check-prefix=OPT0 %s
+ ; RUN: llc -march=ppc64 -mcpu=pwr7 -O1 -relocation-model=pic < %s | FileCheck -check-prefix=OPT1 %s
++; RUN: llc -march=ppc32 -O0 -relocation-model=pic < %s | FileCheck -check-prefix=OPT0-32 %s
++; RUN: llc -march=ppc32 -O1 -relocation-model=pic < %s | FileCheck -check-prefix=OPT1-32 %s
+ 
+ target triple = "powerpc64-unknown-linux-gnu"
+ ; Test correct assembly code generation for thread-local storage using
+@@ -22,6 +24,16 @@ entry:
+ ; OPT0-NEXT: nop
+ ; OPT0:      addis [[REG2:[0-9]+]], 3, a@dtprel@ha
+ ; OPT0-NEXT: addi {{[0-9]+}}, [[REG2]], a@dtprel@l
++; OPT0-32-LABEL: main
++; OPT0-32:        addi {{[0-9]+}}, {{[0-9]+}}, a@got@tlsld
++; OPT0-32:        bl __tls_get_addr(a@tlsld)@PLT
++; OPT0-32:        addis [[REG:[0-9]+]], 3, a@dtprel@ha
++; OPT0-32-NEXT:   addi  {{[0-9]+}}, [[REG]], a@dtprel@l
++; OPT1-32-LABEL: main
++; OPT1-32:        addi 3, {{[0-9]+}}, a@got@tlsld
++; OPT1-32:        bl __tls_get_addr(a@tlsld)@PLT
++; OPT1-32:        addis [[REG:[0-9]+]], 3, a@dtprel@ha
++; OPT1-32-NEXT:   addi  {{[0-9]+}}, [[REG]], a@dtprel@l
+ 
+ ; Test peephole optimization for thread-local storage using the
+ ; local dynamic model.
+@@ -52,4 +64,6 @@ entry:
+ ; OPT1-NEXT: addi 3, [[REG]], a2@got@tlsgd@l
+ ; OPT1:      bl __tls_get_addr(a2@tlsgd)
+ ; OPT1-NEXT: nop
+-
++; OPT1-32-LABEL: main2
++; OPT1-32:        addi 3, {{[0-9]+}}, a2@got@tlsgd
++; OPT1-32:        bl __tls_get_addr(a2@tlsgd)@PLT

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-08-llvm-r216989-r216990-fix-movw-armv6.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r271024-llvm-r216989-r216990-fix-movw-armv6.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r271024-llvm-r216989-r216990-fix-movw-armv6.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-08-llvm-r216989-r216990-fix-movw-armv6.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -17,7 +17,7 @@ Index: lib/Target/ARM/ARMInstrInfo.td
 ===================================================================
 --- lib/Target/ARM/ARMInstrInfo.td
 +++ lib/Target/ARM/ARMInstrInfo.td
-@@ -3248,7 +3248,8 @@
+@@ -3419,7 +3419,8 @@ def : ARMPat<(ARMaddc GPR:$src, imm0_65535_neg:$im
  def : ARMPat<(ARMadde GPR:$src, so_imm_not:$imm, CPSR),
               (SBCri   GPR:$src, so_imm_not:$imm)>;
  def : ARMPat<(ARMadde GPR:$src, imm0_65535_neg:$imm, CPSR),
@@ -32,7 +32,7 @@ Index: test/CodeGen/ARM/carry.ll
 --- test/CodeGen/ARM/carry.ll
 +++ test/CodeGen/ARM/carry.ll
 @@ -1,4 +1,4 @@
--; RUN: llc < %s -march=arm | FileCheck %s
+-; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s
 +; RUN: llc < %s -mtriple=armv6t2-eabi | FileCheck %s
  
  define i64 @f1(i64 %a, i64 %b) {

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-09-clang-r217410-i386-garbage-float.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r271597-clang-r217410-i386-garbage-float.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-09-clang-r217410-i386-garbage-float.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -17,9 +17,9 @@ Introduced here: http://svnweb.freebsd.o
 
 Index: lib/Target/X86/X86ISelLowering.cpp
 ===================================================================
---- lib/Target/X86/X86ISelLowering.cpp	(revision 208032)
-+++ lib/Target/X86/X86ISelLowering.cpp	(working copy)
-@@ -300,6 +300,8 @@ void X86TargetLowering::resetOperationActions() {
+--- lib/Target/X86/X86ISelLowering.cpp
++++ lib/Target/X86/X86ISelLowering.cpp
+@@ -316,6 +316,8 @@ void X86TargetLowering::resetOperationActions() {
    setTruncStoreAction(MVT::i32, MVT::i8 , Expand);
    setTruncStoreAction(MVT::i16, MVT::i8,  Expand);
  
@@ -28,7 +28,7 @@ Index: lib/Target/X86/X86ISelLowering.cp
    // SETOEQ and SETUNE require checking two conditions.
    setCondCodeAction(ISD::SETOEQ, MVT::f32, Expand);
    setCondCodeAction(ISD::SETOEQ, MVT::f64, Expand);
-@@ -1011,8 +1013,6 @@ void X86TargetLowering::resetOperationActions() {
+@@ -1043,8 +1045,6 @@ void X86TargetLowering::resetOperationActions() {
        AddPromotedToType (ISD::SELECT, VT, MVT::v2i64);
      }
  
@@ -39,8 +39,8 @@ Index: lib/Target/X86/X86ISelLowering.cp
      setOperationAction(ISD::LOAD,               MVT::v2i64, Legal);
 Index: test/CodeGen/X86/dont-trunc-store-double-to-float.ll
 ===================================================================
---- test/CodeGen/X86/dont-trunc-store-double-to-float.ll	(revision 0)
-+++ test/CodeGen/X86/dont-trunc-store-double-to-float.ll	(working copy)
+--- test/CodeGen/X86/dont-trunc-store-double-to-float.ll
++++ test/CodeGen/X86/dont-trunc-store-double-to-float.ll
 @@ -0,0 +1,20 @@
 +; RUN: llc -march=x86 < %s | FileCheck %s
 +

Copied and modified: projects/clang350-import/contrib/llvm/patches/patch-10-llvm-r221709-debug-oom.diff (from r274969, projects/clang350-import/contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff)
==============================================================================
--- projects/clang350-import/contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff	Mon Nov 24 18:11:16 2014	(r274969, copy source)
+++ projects/clang350-import/contrib/llvm/patches/patch-10-llvm-r221709-debug-oom.diff	Mon Nov 24 18:43:37 2014	(r274971)
@@ -1,4 +1,4 @@
-Pull in r221709 from upstream llvm trunk (by Frédéric Riss):
+Pull in r221709 from upstream llvm trunk (by Frédéric Riss):
 
   Totally forget deallocated SDNodes in SDDbgInfo.
 
@@ -24,9 +24,9 @@ Introduced here: http://svnweb.freebsd.o
 
 Index: include/llvm/CodeGen/SelectionDAG.h

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



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