svn commit: r274971 - projects/clang350-import/contrib/llvm/patches
Dimitry Andric
dim at FreeBSD.org
Mon Nov 24 18:43:40 UTC 2014
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 at got@tlsgd at l
+- assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++ case PPC::ADDItlsgdL32: {
++ // Transform: %Rd = ADDItlsgdL32 %Rs, <ga:@sym>
++ // Into: %Rd = ADDI %Rs, sym at 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 at 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 at 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 at got@tlsld at l
+- assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
++ case PPC::ADDItlsldL32: {
++ // Transform: %Rd = ADDItlsldL32 %Rs, <ga:@sym>
++ // Into: %Rd = ADDI %Rs, sym at 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 at 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 at 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 at 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 at 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 at 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 at 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 at dtprel@ha
+ ; OPT0-NEXT: addi {{[0-9]+}}, [[REG2]], a at dtprel@l
++; OPT0-32-LABEL: main
++; OPT0-32: addi {{[0-9]+}}, {{[0-9]+}}, a at got@tlsld
++; OPT0-32: bl __tls_get_addr(a at tlsld)@PLT
++; OPT0-32: addis [[REG:[0-9]+]], 3, a at dtprel@ha
++; OPT0-32-NEXT: addi {{[0-9]+}}, [[REG]], a at dtprel@l
++; OPT1-32-LABEL: main
++; OPT1-32: addi 3, {{[0-9]+}}, a at got@tlsld
++; OPT1-32: bl __tls_get_addr(a at tlsld)@PLT
++; OPT1-32: addis [[REG:[0-9]+]], 3, a at dtprel@ha
++; OPT1-32-NEXT: addi {{[0-9]+}}, [[REG]], a at 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 at got@tlsgd at l
+ ; OPT1: bl __tls_get_addr(a2 at tlsgd)
+ ; OPT1-NEXT: nop
+-
++; OPT1-32-LABEL: main2
++; OPT1-32: addi 3, {{[0-9]+}}, a2 at got@tlsgd
++; OPT1-32: bl __tls_get_addr(a2 at 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 ***
More information about the svn-src-projects
mailing list