From owner-svn-src-all@FreeBSD.ORG Wed Feb 25 18:25:37 2015 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 0BA4A689; Wed, 25 Feb 2015 18:25:37 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E8201E9; Wed, 25 Feb 2015 18:25:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t1PIPaHx050964; Wed, 25 Feb 2015 18:25:36 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t1PIPYOY050950; Wed, 25 Feb 2015 18:25:34 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201502251825.t1PIPYOY050950@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Wed, 25 Feb 2015 18:25:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r279291 - in vendor/llvm/dist: bindings/go/llvm bindings/ocaml/linker docs include/llvm-c lib/Linker test/Bindings/OCaml X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Feb 2015 18:25:37 -0000 Author: dim Date: Wed Feb 25 18:25:34 2015 New Revision: 279291 URL: https://svnweb.freebsd.org/changeset/base/279291 Log: Vendor import of llvm RELEASE_360/final tag r230434 (effectively, 3.6.0 release): https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_360/final@230434 Modified: vendor/llvm/dist/bindings/go/llvm/linker.go vendor/llvm/dist/bindings/ocaml/linker/linker_ocaml.c vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.ml vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.mli vendor/llvm/dist/docs/ReleaseNotes.rst vendor/llvm/dist/include/llvm-c/Linker.h vendor/llvm/dist/lib/Linker/LinkModules.cpp vendor/llvm/dist/test/Bindings/OCaml/linker.ml Modified: vendor/llvm/dist/bindings/go/llvm/linker.go ============================================================================== --- vendor/llvm/dist/bindings/go/llvm/linker.go Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/bindings/go/llvm/linker.go Wed Feb 25 18:25:34 2015 (r279291) @@ -20,9 +20,16 @@ package llvm import "C" import "errors" -func LinkModules(Dest, Src Module) error { +type LinkerMode C.LLVMLinkerMode + +const ( + LinkerDestroySource = C.LLVMLinkerDestroySource + LinkerPreserveSource = C.LLVMLinkerPreserveSource +) + +func LinkModules(Dest, Src Module, Mode LinkerMode) error { var cmsg *C.char - failed := C.LLVMLinkModules(Dest.C, Src.C, 0, &cmsg) + failed := C.LLVMLinkModules(Dest.C, Src.C, C.LLVMLinkerMode(Mode), &cmsg) if failed != 0 { err := errors.New(C.GoString(cmsg)) C.LLVMDisposeMessage(cmsg) Modified: vendor/llvm/dist/bindings/ocaml/linker/linker_ocaml.c ============================================================================== --- vendor/llvm/dist/bindings/ocaml/linker/linker_ocaml.c Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/bindings/ocaml/linker/linker_ocaml.c Wed Feb 25 18:25:34 2015 (r279291) @@ -23,11 +23,11 @@ void llvm_raise(value Prototype, char *Message); -/* llmodule -> llmodule -> unit */ -CAMLprim value llvm_link_modules(LLVMModuleRef Dst, LLVMModuleRef Src) { +/* llmodule -> llmodule -> Mode.t -> unit */ +CAMLprim value llvm_link_modules(LLVMModuleRef Dst, LLVMModuleRef Src, value Mode) { char* Message; - if (LLVMLinkModules(Dst, Src, 0, &Message)) + if (LLVMLinkModules(Dst, Src, Int_val(Mode), &Message)) llvm_raise(*caml_named_value("Llvm_linker.Error"), Message); return Val_unit; Modified: vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.ml ============================================================================== --- vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.ml Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.ml Wed Feb 25 18:25:34 2015 (r279291) @@ -11,5 +11,11 @@ exception Error of string let () = Callback.register_exception "Llvm_linker.Error" (Error "") -external link_modules : Llvm.llmodule -> Llvm.llmodule -> unit +module Mode = struct + type t = + | DestroySource + | PreserveSource +end + +external link_modules : Llvm.llmodule -> Llvm.llmodule -> Mode.t -> unit = "llvm_link_modules" Modified: vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.mli ============================================================================== --- vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.mli Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/bindings/ocaml/linker/llvm_linker.mli Wed Feb 25 18:25:34 2015 (r279291) @@ -14,6 +14,13 @@ exception Error of string +(** Linking mode. *) +module Mode : sig + type t = + | DestroySource + | PreserveSource +end + (** [link_modules dst src mode] links [src] into [dst], raising [Error] if the linking fails. *) -val link_modules : Llvm.llmodule -> Llvm.llmodule -> unit \ No newline at end of file +val link_modules : Llvm.llmodule -> Llvm.llmodule -> Mode.t -> unit \ No newline at end of file Modified: vendor/llvm/dist/docs/ReleaseNotes.rst ============================================================================== --- vendor/llvm/dist/docs/ReleaseNotes.rst Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/docs/ReleaseNotes.rst Wed Feb 25 18:25:34 2015 (r279291) @@ -37,7 +37,8 @@ Non-comprehensive list of changes in thi * Added support for a `native object file-based bitcode wrapper format `_. -* ... next change ... +* Added support for MSVC's ``__vectorcall`` calling convention as + ``x86_vectorcallcc``. .. NOTE If you would like to document a larger change, then you can add a @@ -293,12 +294,13 @@ The old JIT has been removed All users should transition to MCJIT. -object::Binary doesn't owns the file buffer +object::Binary doesn't own the file buffer ------------------------------------------- It is now just a wrapper, which simplifies using object::Binary with other users of the underlying file. + IR in object files is now supported ----------------------------------- @@ -318,7 +320,7 @@ The new implementation is also lazier an Change in the representation of lazy loaded funcs ------------------------------------------------- -Lazy loaded functions are now represented is a way that ``isDeclaration`` +Lazy loaded functions are now represented in a way that ``isDeclaration`` returns the correct answer even before reading the body. @@ -333,10 +335,11 @@ Python 2.7 is now required This was done to simplify compatibility with python 3. + The leak detector has been removed ---------------------------------- -In practice tools like asan and valgrind were finding way more bugs than +In practice, tools like asan and valgrind were finding way more bugs than the old leak detector, so it was removed. @@ -351,12 +354,25 @@ The syntax of comdats was changed to @g = global i32 0, comdat($c) @c = global i32 0, comdat -The version without the parentheses is a syntatic sugar for a comdat with +The version without the parentheses is a syntactic sugar for a comdat with the same name as the global. -Diagnotic infrastructure used by lib/Linker and lib/Bitcode ------------------------------------------------------------ +Added support for Win64 unwind information +------------------------------------------ + +LLVM now obeys the `Win64 prologue and epilogue conventions +`_ documented by +Microsoft. Unwind information is also emitted into the .xdata section. + +As a result of the ABI-required prologue changes, it is now no longer possible +to unwind the stack using a standard frame pointer walk on Win64. Instead, +users should call ``CaptureStackBackTrace``, or implement equivalent +functionality by consulting the unwind tables present in the binary. + + +Diagnostic infrastructure used by lib/Linker and lib/Bitcode +------------------------------------------------------------ These libraries now use the diagnostic handler to print errors and warnings. This provides better error messages and simpler error handling. @@ -367,12 +383,27 @@ The PreserveSource linker mode was remov It was fairly broken and was removed. +The mode is currently still available in the C API for source +compatibility, but it doesn't have any effect. -Changes to the ARM Backend --------------------------- +Garbage Collection +------------------ +A new experimental mechanism for describing a garbage collection safepoint was +added to LLVM. The new mechanism was not complete at the point this release +was branched so it is recommended that anyone interested in using this +mechanism track the ongoing development work on tip of tree. The hope is that +these intrinsics will be ready for general use by 3.7. Documentation can be +found `here `_. + +The existing gc.root implementation is still supported and as fully featured +as it ever was. However, two features from GCStrategy will likely be removed +in the 3.7 release (performCustomLowering and findCustomSafePoints). If you +have a use case for either, please mention it on llvm-dev so that it can be +considered for future development. - During this release ... +We are expecting to migrate away from gc.root in the 3.8 time frame, +but both mechanisms will be supported in 3.7. Changes to the MIPS Target @@ -385,6 +416,7 @@ compile the Linux kernel for 32-bit targ microMIPS for the O32 ABI on little endian targets, and code generation for microMIPS is almost completely passing the test-suite. + ABI ^^^ @@ -417,6 +449,7 @@ few notable ones: has been fixed when the fastcc calling convention is used with 64-bit FPU's and -mno-odd-spreg. + LLVMLinux ^^^^^^^^^ @@ -433,6 +466,7 @@ number of kernel patches. See the `LLVML * Added support for a number of directives used by Linux to the Integrated Assembler. + Miscellaneous ^^^^^^^^^^^^^ @@ -449,6 +483,7 @@ Miscellaneous is in use and will be removed in LLVM 3.7. These names have never been supported by the GNU Assembler for these ABI's. + Changes to the PowerPC Target ----------------------------- @@ -459,7 +494,7 @@ There are numerous improvements to the P * LLVM now has a POWER8 instruction scheduling description. -* Address Sanitizer (ASAN) support is now fully functional. +* AddressSanitizer (ASan) support is now fully functional. * Performance of simple atomic accesses has been greatly improved. @@ -470,8 +505,11 @@ There are numerous improvements to the P * PPC32 SVR4 now supports small-model PIC. +* Experimental support for the stackmap/patchpoint intrinsics has been added. + * There have been many smaller bug fixes and performance improvements. + Changes to the OCaml bindings ----------------------------- @@ -498,6 +536,14 @@ Changes to the OCaml bindings * As usual, many more functions have been exposed to OCaml. + +Go bindings +----------- + +* A set of Go bindings based on `gollvm `_ + was introduced in this release. + + External Open Source Projects Using LLVM 3.6 ============================================ @@ -505,6 +551,7 @@ An exciting aspect of LLVM is that it is a lot of other language and tools projects. This section lists some of the projects that have already been updated to work with LLVM 3.6. + Portable Computing Language (pocl) ---------------------------------- @@ -517,6 +564,7 @@ statically parallelize multiple work-ite the presence of work-group barriers. This enables static parallelization of the fine-grained static concurrency in the work groups in multiple ways. + TTA-based Co-design Environment (TCE) ------------------------------------- @@ -535,11 +583,12 @@ new LLVM-based code generators "on the f loads them in to the compiler backend as runtime libraries to avoid per-target recompilation of larger parts of the compiler chain. + Likely ------ `Likely `_ is an embeddable just-in-time Lisp for -image recognition and heterogenous computing. Algorithms are just-in-time +image recognition and heterogeneous computing. Algorithms are just-in-time compiled using LLVM's MCJIT infrastructure to execute on single or multi-threaded CPUs and potentially OpenCL SPIR or CUDA enabled GPUs. Likely seeks to explore new optimizations for statistical learning @@ -547,6 +596,7 @@ algorithms by moving them from an offlin compile-time evaluation of a function (the learning algorithm) with constant arguments (the training data). + LDC - the LLVM-based D compiler ------------------------------- @@ -562,6 +612,25 @@ x86/x86_64 systems like Linux, OS X, Fre PowerPC (32/64 bit). Ports to other architectures like ARM, AArch64 and MIPS64 are underway. + +LLVMSharp & ClangSharp +---------------------- + +`LLVMSharp `_ and +`ClangSharp `_ are type-safe C# bindings for +Microsoft.NET and Mono that Platform Invoke into the native libraries. +ClangSharp is self-hosted and is used to generated LLVMSharp using the +LLVM-C API. + +`LLVMSharp Kaleidoscope Tutorials `_ +are instructive examples of writing a compiler in C#, with certain improvements +like using the visitor pattern to generate LLVM IR. + +`ClangSharp PInvoke Generator `_ is the +self-hosting mechanism for LLVM/ClangSharp and is demonstrative of using +LibClang to generate Platform Invoke (PInvoke) signatures for C APIs. + + Additional Information ====================== Modified: vendor/llvm/dist/include/llvm-c/Linker.h ============================================================================== --- vendor/llvm/dist/include/llvm-c/Linker.h Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/include/llvm-c/Linker.h Wed Feb 25 18:25:34 2015 (r279291) @@ -20,13 +20,21 @@ extern "C" { #endif + +/* Note: LLVMLinkerPreserveSource has no effect. */ +typedef enum { + LLVMLinkerDestroySource = 0, /* Allow source module to be destroyed. */ + LLVMLinkerPreserveSource = 1 /* Preserve the source module. */ +} LLVMLinkerMode; + + /* Links the source module into the destination module, taking ownership * of the source module away from the caller. Optionally returns a * human-readable description of any errors that occurred in linking. * OutMessage must be disposed with LLVMDisposeMessage. The return value * is true if an error occurred, false otherwise. */ LLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, - unsigned Unused, char **OutMessage); + LLVMLinkerMode Mode, char **OutMessage); #ifdef __cplusplus } Modified: vendor/llvm/dist/lib/Linker/LinkModules.cpp ============================================================================== --- vendor/llvm/dist/lib/Linker/LinkModules.cpp Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/lib/Linker/LinkModules.cpp Wed Feb 25 18:25:34 2015 (r279291) @@ -1749,7 +1749,7 @@ bool Linker::LinkModules(Module *Dest, M //===----------------------------------------------------------------------===// LLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, - unsigned Unused, char **OutMessages) { + LLVMLinkerMode Mode, char **OutMessages) { Module *D = unwrap(Dest); std::string Message; raw_string_ostream Stream(Message); Modified: vendor/llvm/dist/test/Bindings/OCaml/linker.ml ============================================================================== --- vendor/llvm/dist/test/Bindings/OCaml/linker.ml Wed Feb 25 17:54:18 2015 (r279290) +++ vendor/llvm/dist/test/Bindings/OCaml/linker.ml Wed Feb 25 18:25:34 2015 (r279291) @@ -45,7 +45,7 @@ let test_linker () = let m1 = make_module "one" and m2 = make_module "two" in - link_modules m1 m2; + link_modules m1 m2 Mode.DestroySource; dispose_module m1; let m1 = make_module "one"