24326140 upgrade LLVM to 3.8.1
authorStefan Teleman <stefan.teleman@oracle.com>
Thu, 28 Jul 2016 16:25:34 -0700
changeset 6512 92717ce71105
parent 6511 d283aa33e131
child 6513 ea2097ba7d67
24326140 upgrade LLVM to 3.8.1 24326159 upgrade clang to 3.8.1 22902339 memory corruption caused by undefined behavior in LLVM IR Module 22777179 implement [ -mtune= -march= -mcpu= ] in clang SPARC 22778085 LLVM is using %icc when it should be using %xcc 22778089 the SPARCV9 IS implementation is incomplete 22778098 LLVM should emit proc identifiers in SPARC assembler (capabilities) 22778650 clang should support OpenMP because it can 22859423 llvm CodeGen on Intel emits a bogus .ctors section 22902355 clang CodeGen is affected by 22902339 23701635 clang produces amd64 opcodes, but calls 32-bit assembler by default 23593143 lli JIT bitcode parsing creates a main function with wrong argc/argv 21759660 clang packages should include the scan-view and scan-build utilities 23854357 clang should check for GNU ld 17867434 clang crashed in LEXER 24306550 clang crashes in llvm::Twine::toStringRef 24311726 clang's Perl and Python utilities should not use #!/usr/bin/env 24312028 llvm::Twine needs copy constructors and assignment operators 24312221 classes must be CopyConstructible, CopyAssignable, MoveConstructible ... 24314621 LLVM should build using the new CMake based build system 24314638 LLVM CommandLine subsystem is busted 24314687 static initialization of optimization passes doesn't work as intended 21870069 clang makes incorrect assumptions about anonymous namespace instantiation order 22643565 llvm's Google test harness needs some attention 24314745 clang should support PIE executables in Solaris
components/llvm/Makefile
components/llvm/Solaris/man1/FileCheck.1
components/llvm/Solaris/man1/bugpoint.1
components/llvm/Solaris/man1/clang.1
components/llvm/Solaris/man1/lit.1
components/llvm/Solaris/man1/llc.1
components/llvm/Solaris/man1/lli.1
components/llvm/Solaris/man1/llvm-ar.1
components/llvm/Solaris/man1/llvm-as.1
components/llvm/Solaris/man1/llvm-bcanalyzer.1
components/llvm/Solaris/man1/llvm-build.1
components/llvm/Solaris/man1/llvm-config.1
components/llvm/Solaris/man1/llvm-cov.1
components/llvm/Solaris/man1/llvm-diff.1
components/llvm/Solaris/man1/llvm-dis.1
components/llvm/Solaris/man1/llvm-dwarfdump.1
components/llvm/Solaris/man1/llvm-extract.1
components/llvm/Solaris/man1/llvm-lib.1
components/llvm/Solaris/man1/llvm-link.1
components/llvm/Solaris/man1/llvm-nm.1
components/llvm/Solaris/man1/llvm-profdata.1
components/llvm/Solaris/man1/llvm-readobj.1
components/llvm/Solaris/man1/llvm-stress.1
components/llvm/Solaris/man1/llvm-symbolizer.1
components/llvm/Solaris/man1/opt.1
components/llvm/Solaris/man1/tblgen.1
components/llvm/clang-build.p5m
components/llvm/clang.p5m
components/llvm/cxa_finalize/Makefile
components/llvm/llvm-build.p5m
components/llvm/llvm.p5m
components/llvm/patches/000-AutoRegen.sh.patch
components/llvm/patches/000-solaris-LLVM-libLLVMTransforms.patch
components/llvm/patches/001-Makefile.config.in.patch
components/llvm/patches/001-solaris-LLVM-libLLVMCodegen.patch
components/llvm/patches/002-Makefile.patch
components/llvm/patches/002-solaris-LLVM-libLLVMSupport.patch
components/llvm/patches/003-Makefile.rules.patch
components/llvm/patches/003-solaris-LLVM-ADT.patch
components/llvm/patches/004-configure.ac.patch
components/llvm/patches/004-solaris-LLVM-libIR.patch
components/llvm/patches/005-Makefile.patch
components/llvm/patches/005-solaris-LLVM-libLLVMMC.patch
components/llvm/patches/006-clang-D10272.patch
components/llvm/patches/006-solaris-LLVM-libLLVMAnalysis.patch
components/llvm/patches/007-TemplateBase.patch
components/llvm/patches/007-solaris-LLVM-libLLVMLibDriver.patch
components/llvm/patches/008-DeclTemplate.patch
components/llvm/patches/008-solaris-clang-libclangAST.patch
components/llvm/patches/009-InitPreprocessor.patch
components/llvm/patches/009-solaris-clang-libclangSema.patch
components/llvm/patches/010-linker-mapfiles.patch
components/llvm/patches/010-solaris-clang-libclangBasic.patch
components/llvm/patches/011-gxx-abi-version.patch
components/llvm/patches/011-solaris-clang-libclangCodeGen.patch
components/llvm/patches/012-TypeLocBuilder.cpp.patch
components/llvm/patches/012-solaris-clang-libclangDriver.patch
components/llvm/patches/013-llvm-alignments.patch
components/llvm/patches/013-solaris-clang-libclangFrontend.patch
components/llvm/patches/014-clang-gcc-toolchain.patch
components/llvm/patches/014-solaris-clang-libclangLex.patch
components/llvm/patches/015-llvm-clang-memory-corruption.patch
components/llvm/patches/015-solaris-clang-tools-driver.patch
components/llvm/patches/016-llvm-21851513-memory-corruption.patch
components/llvm/patches/016-solaris-clang-tools-libclang.patch
components/llvm/patches/017-lli-21870067.patch
components/llvm/patches/017-solaris-clang-tools-tablegen.patch
components/llvm/patches/018-21870283-llvm-GetArgumentVector.patch
components/llvm/patches/018-solaris-LLVM-utils-tablegen.patch
components/llvm/patches/019-21870099-clang.patch
components/llvm/patches/019-solaris-LLVM-utils-filecheck.patch
components/llvm/patches/020-21874221-clang-llvm-sparc-assembler.patch
components/llvm/patches/020-solaris-utils-googletest.patch
components/llvm/patches/021-llvm-ilist-iterator-22031298.patch
components/llvm/patches/021-solaris-LLVM-tools-llc.patch
components/llvm/patches/022-google-test-harness-22643565.patch
components/llvm/patches/022-solaris-LLVM-tools-llvm-as.patch
components/llvm/patches/023-Makefile.config.in.patch
components/llvm/patches/023-solaris-LLVM-tools-llvm-config.patch
components/llvm/patches/024-solaris-LLVM-tools-llvm-dis.patch
components/llvm/patches/025-solaris-LLVM-tools-opt.patch
components/llvm/patches/026-solaris-LLVM-tools-bugpoint.patch
components/llvm/patches/027-solaris-LLVM-libsupport-unittests.patch
components/llvm/patches/028-solaris-LLVM-libTableGen.patch
components/llvm/patches/029-solaris-LLVM-libTarget-X86.patch
components/llvm/patches/030-solaris-exception-demo.patch
components/llvm/patches/031-solaris-build-system.patch
components/llvm/patches/032-solaris-LLVM-libTarget-SPARC.patch
components/llvm/patches/033-solaris-LLVM-JIT.patch
components/llvm/patches/034-solaris-clang-LLVM-python-perl-utils.patch
--- a/components/llvm/Makefile	Thu Jul 28 16:15:45 2016 -0700
+++ b/components/llvm/Makefile	Thu Jul 28 16:25:34 2016 -0700
@@ -23,27 +23,31 @@
 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 export PARFAIT_BUILD=no
-BUILD_BITS= 64
-COMPILER= gcc
+BUILD_BITS=64
+COMPILER=gcc
+
 include ../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		llvm
-COMPONENT_VERSION=	3.6.2
+COMPONENT_VERSION=	3.8.1
 COMPONENT_PROJECT_URL=	http://llvm.org/
+COMPONENT_SRC=		$(COMPONENT_NAME)
+COMPONENT_BUGDB=	utility/llvm
+
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
-COMPONENT_SRC_NAME =	$(COMPONENT_SRC).src
+COMPONENT_SRC_NAME=	$(COMPONENT_SRC).src
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC_NAME).tar.xz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:f60dc158bfda6822de167e87275848969f0558b3134892ff54fced87e4667b94
+    sha256:6e82ce4adb54ff3afc18053d6981b6aed1406751b8742582ed50f04b5ab475f9
 COMPONENT_ARCHIVE_URL=	$(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
 
-TPNO=			24358
+TPNO=			28049
 
 COMPONENT_NAME_1 =	clang
 COMPONENT_SRC_1 =	cfe-$(COMPONENT_VERSION).src
 COMPONENT_ARCHIVE_1 =	$(COMPONENT_SRC_1).tar.xz
 COMPONENT_ARCHIVE_HASH_1 = \
-	sha256:ae9180466a23acb426d12444d866b266ff2289b266064d362462e44f8d4699f3
+	sha256:4cd3836dfb4b88b597e075341cae86d61c63ce3963e45c7fe6a8bf59bb382cdf
 COMPONENT_ARCHIVE_URL_1 = $(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE_1)
 
 COMPONENT_POST_UNPACK_ACTION = \
@@ -54,48 +58,74 @@
 	 $(CP) -rp $(COMPONENT_SRC_1) \
 	    $(COMPONENT_SRC)/tools/$(COMPONENT_NAME_1) )
 
-COMPONENT_PRE_CONFIGURE_ACTION = \
-	 ( cd $(SOURCE_DIR) ; \
-	 $(CHMOD) 0755 ./autoconf/AutoRegen.sh ; \
-	 ./autoconf/AutoRegen.sh )
-
-COMPONENT_POST_BUILD_ACTION = \
-      if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
-      $(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize build ; \
-      fi
-
-COMPONENT_POST_INSTALL_ACTION = \
-	if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
-	$(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize install ; \
-	fi;
-
 # Depends on S12-only changes in gcc; might be able to deal with later,
 # but avoid publishing while this is under investigation.
 ifeq ($(BUILD_TYPE), evaluation)
-BUILD_64=
-INSTALL_64=
-PUBLISH_STAMP=
+  BUILD_64=
+  INSTALL_64=
+  PUBLISH_STAMP=
 endif
 
-TEST_TARGET=
+BUILD_STYLE = cmake
+CLONEY = echo
+GNUCP = /usr/gnu/bin/cp
+
 include $(WS_MAKE_RULES)/common.mk
 
 PATCH_LEVEL := 0
 DEBUG_BUILD := 0
 GCC_VERSION := 4.9
+HAVE_SPHINX := 0
 
-# We need GCC version 4.9, and not another version.
+export PATH=/usr/gnu/bin:/usr/bin:/usr/perl5/$(PERL_VERSION)/bin
+
+# We use GCC version 4.9.3, and not another version for now.
 CC=$(USRDIR)/gcc/$(GCC_VERSION)/bin/gcc
 CXX=$(USRDIR)/gcc/$(GCC_VERSION)/bin/g++
 
+# We're building with CMake
+CMAKE=/usr/bin/cmake
+CMAKE_VERSION := $(shell $(CMAKE) --version 2>&1 | head -n1 \
+  | $(GSED) 's/cmake version \{1,\}//g')
+CMAKE_MAJOR_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f1 -d'.')
+CMAKE_MINOR_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f2 -d'.')
+CMAKE_MICRO_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f3 -d'.')
+
+# CMake prior to 3.6.0 does not define CMAKE_HOST_SOLARIS.
+# In that case, we pass it in CMAKE_OPTIONS.
+CMAKE_NEEDS_SOLARIS_HOST := 0
+ifeq ($(shell expr $(CMAKE_MAJOR_VERSION) \<= 3 \& \
+		    $(CMAKE_MINOR_VERSION) \<= 5),1)
+  CMAKE_NEEDS_SOLARIS_HOST = 1
+endif
+
+# All of these shoujld probably be in shared-macros.mk
+CMAKE_INSTALL_BINDIR.32 = bin
+CMAKE_INSTALL_BINDIR.64 = bin/$(MACH64)
+CMAKE_INSTALL_BINDIR = $(CMAKE_INSTALL_BINDIR.$(BITS))
+
+CMAKE_INSTALL_LIBDIR.32 = lib
+CMAKE_INSTALL_LIBDIR.64 = lib/$(MACH64)
+CMAKE_INSTALL_LIBDIR = $(CMAKE_INSTALL_LIBDIR.$(BITS))
+
+CMAKE_INSTALL_LIBEXECDIR.32 = libexec
+CMAKE_INSTALL_LIBEXECDIR.64 = libexec/$(MACH64)
+CMAKE_INSTALL_LIBEXECDIR = $(CMAKE_INSTALL_LIBEXECDIR.$(BITS))
+
+CMAKE_INSTALL_INCLUDEDIR = include
+CMAKE_INSTALL_DATADIR = share
+CMAKE_INSTALL_DATAROOTDIR = share
+
 # We need the specific C++ runtime that clang/llvm was built and
 # linked with, and not some random and incompatible stuff from
 # /usr/lib.
-LLVM_RUNPATH_32 = $(USRDIR)/gcc/$(GCC_VERSION)/lib
-LLVM_RUNPATH_64 = $(USRDIR)/gcc/$(GCC_VERSION)/lib/$(MACH64)
+LLVM_RUNPATH_32 = /usr/gcc/$(GCC_VERSION)/lib
+LLVM_RUNPATH_64 = /usr/gcc/$(GCC_VERSION)/lib/$(MACH64)
 LLVM_RUNPATH = $(LLVM_RUNPATH_$(BITS))
 
-# -O0 for now. Ideally we want -O2.
+# -O0. GCC on SPARC dies with an out-memory error in cc1plus when
+# building with either -O1 or -O2 (32-bit). If it manages to get
+# through with -O1 or -O2 (64-bit), the resulting bits are unusable.
 OFLAG="-O0"
 GFLAG=""
 
@@ -104,24 +134,110 @@
   GFLAG="-g3"
 endif
 
-export PATH=$(GNUBIN):$(USRDIR)/xpg4/bin:$(USRBINDIR):$(USRDIR)/perl5/5.16/bin
-
 # Because LLVM's install target doesn't install everything that
 # needs to be installed.
 EXTRA_INSTALL_BITS=llvm-lto arcmt-test c-arcmt-test c-index-test diagtool
-LLVM_BINDIR=$(BUILD_DIR_64)/Release/bin
+LLVM_INSTALL_BINDIR.32=$(PROTOUSRBINDIR)
+LLVM_INSTALL_BINDIR.64=$(PROTOUSRBINDIR64)
+LLVM_INSTALL_BINDIR=$(LLVM_INSTALL_BINDIR.$(BITS))
+LLVM_BINDIR=$(BUILD_DIR_$(BITS))/bin
+
+INSTALL_CXA_FINALIZE := 0
+ifeq ($(SOLARIS_11_ONLY),)
+  INSTALL_CXA_FINALIZE = 1
+endif
 
-ifeq ($(DEBUG_BUILD), 1)
-  LLVM_BINDIR=$(BUILD_DIR_64)/Debug+Asserts+Checks/bin
-endif
+SCAN_VIEW_FILES=Reporter.py ScanView.py
+CLANG_FORMAT_FILES=clang-format-diff.py clang-format-sublime.py \
+		   clang-format.py
+LLVM_MAN_FILES=FileCheck.1 bugpoint.1 clang.1 lit.1 llc.1 lli.1 \
+	       llvm-ar.1 llvm-as.1 llvm-bcanalyzer.1 llvm-build.1 \
+	       llvm-config.1 llvm-cov.1 llvm-diff.1 llvm-dis.1 \
+	       llvm-dwarfdump.1 llvm-extract.1 llvm-lib.1 llvm-link.1 \
+	       llvm-nm.1 llvm-profdata.1 llvm-readobj.1 llvm-stress.1 \
+	       llvm-symbolizer.1 opt.1 tblgen.1
+
+COMPONENT_POST_BUILD_ACTION = \
+      if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
+      /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.patched ; \
+      /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.prep ; \
+      $(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize build ; \
+      /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.built ; \
+      fi
+
+COMPONENT_POST_INSTALL_ACTION = \
+	if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
+	$(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize install ; \
+	/usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.installed ; \
+	fi;
 
 COMPONENT_POST_INSTALL_ACTION += \
 	list1='$(EXTRA_INSTALL_BITS)' ; for f in $$list1 ; do \
-	    $(INSTALL) --mode=755 $(LLVM_BINDIR)/$$f $(PROTOUSRBINDIR)/$$f ; \
-	done;
+	    $(INSTALL) --mode=755 $(LLVM_BINDIR)/$$f \
+			$(LLVM_INSTALL_BINDIR)/$$f ; \
+	done ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	$(MKDIR) \
+	  $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages ; \
+	list2='$(SCAN_VIEW_FILES)' ; for f in $$list2 ; do \
+	$(INSTALL) --mode=644 $(PROTOUSRSHAREDIR)/scan-view/$$f \
+	  $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages/$$f ; \
+	done ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	list3='$(CLANG_FORMAT_FILES)' ; for f in $$list3 ; do \
+	  $(INSTALL) --mode=644 $(PROTOUSRSHAREDIR)/clang/$$f \
+	    $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages/$$f ; \
+	done ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	cd $(COMPONENT_DIR) ; \
+	$(GNUCP) -rpd $(PROTOUSRLIBDIR64)/clang $(PROTOUSRLIBDIR)/ ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	cd $(PROTOUSRLIBDIR) ; \
+	$(PYTHON) -m compileall . ;
 
-# No ASLR for compilers.
-ASLR_MODE = $(ASLR_DISABLE)
+COMPONENT_POST_INSTALL_ACTION += \
+	cd $(COMPONENT_DIR) ; \
+	$(MKDIR) $(PROTOUSRSHAREMAN1DIR) ; \
+	list4='$(LLVM_MAN_FILES)' ; for f in $$list4 ; do \
+	  $(INSTALL) --mode=644 $(COMPONENT_DIR)/Solaris/man1/$$f \
+	    $(PROTOUSRSHAREMAN1DIR)/$$f ; \
+	done ;
+
+ifeq ($(INSTALL_CXA_FINALIZE),1)
+COMPONENT_POST_INSTALL_ACTION += \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize-32.o \
+	  $(PROTOUSRLIBDIR)/clang/cxa_finalize.o ; \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize_pic-32.o \
+	  $(PROTOUSRLIBDIR)/clang/cxa_finalize_pic.o ; \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize-64.o \
+	  $(PROTOUSRLIBDIR)/clang/$(MACH64)/cxa_finalize.o ; \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize_pic-64.o \
+	  $(PROTOUSRLIBDIR)/clang/$(MACH64)/cxa_finalize_pic.o ;
+endif
+
+# Results output is slightly different on Intel vs. SPARC.
+# Not enabled just yet because of problems with the way opt
+# and FileCheck emit and parse the test case results.
+COMPONENT_TEST_MASTER = \
+	$(COMPONENT_TEST_RESULTS_DIR)/results-$(MACH).master
+
+# Do not change the order of these regexp transforms.
+COMPONENT_TEST_TRANSFORMS += \
+    '-e "/gmake -f/d"' \
+    '-e "/gmake/d"' \
+    '-e "/--color=/d"' \
+    '-e "/Entering/d"' \
+    '-e "/Leaving/d"' \
+    '-e "/Built target/d"' \
+    '-e "/Nothing to be done/d"'
 
 # GCC options used:
 # -ftree-vectorize | -fno-tree-vectorize:
@@ -196,8 +312,9 @@
 #
 # -mno-sse3 -mno-ssse3:
 # Do not use SSE3/SSSE3 instructions on Intel. These might not be
-# available. Building for Opteron - which implies SSE2 - is adequate
-# for performance purposes.
+# available and they always come with side-effects.
+# Building for Opteron - which implies SSE2 - is adequate for
+# performance purposes.
 
 CFLAGS = -m$(BITS) $(GFLAG) $(OFLAG) -pthread -std=c99 -fno-strict-aliasing
 CFLAGS += -fno-tree-slp-vectorize -fno-tree-vectorize
@@ -205,9 +322,15 @@
 CFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
 CFLAGS += -Wstack-protector -fdata-sections -fstack-protector-all
 CFLAGS += -fkeep-static-consts -ffunction-sections
-CFLAGS += -Wl,-z -Wl,relax=common -Wl,-z -Wl,relax=secadj
-CFLAGS += -Wl,-z -Wl,relax=transtls -Wl,-R -Wl,$(LLVM_RUNPATH)
+CFLAGS += -Wl,-z -Wl,relax=common
+CFLAGS += -Wl,-z -Wl,relax=secadj
+CFLAGS += -Wl,-z -Wl,relax=transtls
+CFLAGS += -Wl,-z -Wl,relax=symbound
+CFLAGS += -Wl,-R -Wl,$(LLVM_RUNPATH)
 CFLAGS.i386 += -mtune=opteron -mno-sse3 -mno-ssse3 -fno-common
+ifeq ($(DEBUG_BUILD),1)
+  CFLAGS.i386 += -fno-omit-frame-pointer
+endif
 CFLAGS.sparc += -mtune=ultrasparc -mcpu=ultrasparc -mvis -mhard-float
 CFLAGS.sparc += -mptr$(BITS) -fdata-sections -falign-functions=8
 CFLAGS.sparc += -mno-unaligned-doubles -mimpure-text
@@ -220,18 +343,22 @@
 CXXFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
 CXXFLAGS += -Wstack-protector -fkeep-static-consts
 CXXFLAGS += -std=c++11 -fdata-sections -ffunction-sections
-CXXFLAGS += -Wl,-z -Wl,relax=common -Wl,-z -Wl,relax=secadj
-CXXFLAGS += -Wl,-z -Wl,relax=transtls -Wl,-R -Wl,$(LLVM_RUNPATH)
+CXXFLAGS += -Wl,-z -Wl,relax=common
+CXXFLAGS += -Wl,-z -Wl,relax=secadj
+CXXFLAGS += -Wl,-z -Wl,relax=transtls
+CXXFLAGS += -Wl,-z -Wl,relax=symbound
+CXXFLAGS += -Wl,-z -Wl,relax=comdat
+CXXFLAGS += -Wl,-R -Wl,$(LLVM_RUNPATH)
 CXXFLAGS.sparc += -mptr$(BITS)
 CXXFLAGS += $(CFLAGS.$(MACH))
 
-CPPFLAGS = -D_GNU_SOURCE -DLLVM_SOLARIS -I$(USRGNUDIR)/include
+CPPFLAGS = -D_GNU_SOURCE -DLLVM_SOLARIS -I/usr/gnu/include
 
-ifeq ($(DEBUG_BUILD), 1)
+ifeq ($(DEBUG_BUILD),1)
   CPPFLAGS += -D_DEBUG
 endif
 
-CPPFLAGS += -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+CPPFLAGS += -D_REENTRANT -D_LARGEFILE64_SOURCE
 CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D__EXTENSIONS__=1
 CPPFLAGS += -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
 CPPFLAGS += -D__STDC_LIMIT_MACROS -DHAVE_POSIX_MEMALIGN
@@ -240,68 +367,146 @@
 CPPFLAGS.sparc = -DLLVM_SPARC
 CPPFLAGS += $(CPPFLAGS.$(MACH))
 
-LLVM_LIBEXECDIR_32 = $(USRDIR)/libexec
-LLVM_LIBEXECDIR_64 = $(USRDIR)/libexec/$(MACH64)
+LLVM_LIBEXECDIR_32 = /usr/libexec
+LLVM_LIBEXECDIR_64 = /usr/libexec/$(MACH64)
 LLVM_LIBEXECDIR = $(LLVM_LIBEXECDIR_$(BITS))
 
-CONFIGURE_OPTIONS += --libexecdir=$(LLVM_LIBEXECDIR)
-CONFIGURE_OPTIONS += --sharedstatedir=/tmp
-CONFIGURE_OPTIONS += --localstatedir=$(VARDIR)
-CONFIGURE_OPTIONS += --enable-compiler-version-checks
-CONFIGURE_OPTIONS += --enable-clang-static-analyzer
+LIBFFI_INCDIR_32 = /usr/lib/libffi-3.0.9/include
+LIBFFI_INCDIR_64 = /usr/lib/$(MACH64)/libffi-3.0.9/include
+LIBFFI_INCDIR = $(LIBFFI_INCDIR_$(BITS))
+
+LIBFFI_LIBDIR_32 = /usr/lib
+LIBFFI_LIBDIR_64 = /usr/lib/$(MACH64)
+LIBFFI_LIBDIR = $(LIBFFI_LIBDIR_$(BITS))
+
+# -Bdirect and -M /usr/lib/ld/map.noexbss break SPARC builds.
+LD_B_DIRECT =
+LD_OPTIONS = -M /usr/lib/ld/map.noexstk
+LD_OPTIONS += -M /usr/lib/ld/map.pagealign
+LD_OPTIONS_SO = $(LD_Z_DEFS) $(LD_DEF_LIBS)
 
-ifeq ($(DEBUG_BUILD), 1)
-  CONFIGURE_OPTIONS += --enable-assertions
-  CONFIGURE_OPTIONS += --disable-optimized
-  CONFIGURE_OPTIONS += --enable-expensive-checks
-  CONFIGURE_OPTIONS += --enable-debug-runtime
-  CONFIGURE_OPTIONS += --enable-debug-symbols
-else
-  CONFIGURE_OPTIONS += --disable-assertions
-  CONFIGURE_OPTIONS += --enable-optimized
-  CONFIGURE_OPTIONS += --disable-expensive-checks
-  CONFIGURE_OPTIONS += --disable-debug-runtime
-  CONFIGURE_OPTIONS += --disable-debug-symbols
+CMAKE_OPTIONS = -DCMAKE_C_COMPILER:FILEPATH=$(CC)
+CMAKE_OPTIONS += -DCMAKE_CXX_COMPILER:FILEPATH=$(CXX)
+CMAKE_OPTIONS += -DCMAKE_C_CFLAGS:STRING="$(CPPFLAGS) $(CFLAGS)"
+CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS:STRING="$(CPPFLAGS) $(CXXFLAGS)"
+CMAKE_OPTIONS += -DCMAKE_EXE_LINKER_FLAGS:STRING="$(LDFLAGS)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_PREFIX:FILEPATH=$(CMAKE_PREFIX)
+CMAKE_OPTIONS += -DCMAKE_AR:FILEPATH=/usr/bin/ar
+
+CMAKE_OPTIONS += -DCMAKE_INSTALL_BINDIR:STRING="$(CMAKE_INSTALL_BINDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_LIBDIR:STRING="$(CMAKE_INSTALL_LIBDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_LIBEXECDIR:STRING="$(CMAKE_INSTALL_LIBEXECDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_INCLUDEDIR:STRING="$(CMAKE_INSTALL_INCLUDEDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_DATADIR:STRING="$(CMAKE_INSTALL_DATADIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_DATAROOTDIR:STRING="$(CMAKE_INSTALL_DATAROOTDIR)"
+
+ifeq ($(MACH),sparc)
+  CMAKE_OPTIONS += -DLLVM_TARGETS_TO_BUILD:STRING="Sparc"
+endif
+ifeq ($(MACH),i386)
+  CMAKE_OPTIONS += -DLLVM_TARGETS_TO_BUILD:STRING="X86"
 endif
 
-CONFIGURE_OPTIONS += --enable-keep-symbols
-CONFIGURE_OPTIONS += --enable-jit
-CONFIGURE_OPTIONS += --disable-docs
-CONFIGURE_OPTIONS += --disable-doxygen
-CONFIGURE_OPTIONS += --enable-threads
-CONFIGURE_OPTIONS += --enable-pthreads
-CONFIGURE_OPTIONS += --enable-shared
-CONFIGURE_OPTIONS += --enable-zlib
-CONFIGURE_OPTIONS += --enable-pic
-CONFIGURE_OPTIONS += --enable-timestamps
-CONFIGURE_OPTIONS += --enable-backtraces
-CONFIGURE_OPTIONS += --enable-bindings=auto
-CONFIGURE_OPTIONS += --enable-libffi
-CONFIGURE_OPTIONS += --enable-terminfo
-CONFIGURE_OPTIONS += --disable-ltdl-install
-CONFIGURE_OPTIONS += --with-python=$(PYTHON)
+CMAKE_OPTIONS += -DCMAKE_MAKE_PROGRAM:STRING="/usr/bin/gmake"
+CMAKE_OPTIONS += -DCMAKE_ASM_COMPILER:STRING="/usr/gnu/bin/as"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_RPATH:STRING="$(LLVM_RUNPATH)"
+CMAKE_OPTIONS += -DLLVM_BUILD_TOOLS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_INCLUDE_TOOLS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_BUILD_TESTS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_INCLUDE_TESTS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_THREADS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_BUILD_32_BITS:BOOL=OFF
+
+# CMake tries really hard to be too smart for its own good.
+ifeq ($(DEBUG_BUILD),1)
+  CMAKE_OPTIONS += -DCMAKE_BUILD_TYPE:STRING=Debug
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DLLVM_BUILD_EXAMPLES:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_INCLUDE_EXAMPLES:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_ENABLE_ASSERTIONS:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_ENABLE_EXPENSIVE_CHECKS:BOOL=ON
+else
+  CMAKE_OPTIONS += -DCMAKE_BUILD_TYPE:STRING=Release
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_DEBUG:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_DEBUG:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_DEBUG:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DLLVM_BUILD_EXAMPLES:BOOL=OFF
+  CMAKE_OPTIONS += -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF
+  CMAKE_OPTIONS += -DLLVM_ENABLE_ASSERTIONS:BOOL=OFF
+  CMAKE_OPTIONS += -DLLVM_ENABLE_EXPENSIVE_CHECKS:BOOL=OFF
+endif
 
-ifeq ($(MACH),sparc)
-  CONFIGURE_OPTIONS += --with-extra-ld-options='-lkstat'
+CMAKE_OPTIONS += -DLLVM_ENABLE_EH:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_PIC:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_RTTI:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_WARNINGS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_PEDANTIC:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ABI_BREAKING_CHECKS:STRING="FORCE_OFF"
+CMAKE_OPTIONS += -DLLVM_ENABLE_ZLIB:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_FFI:BOOL=ON
+CMAKE_OPTIONS += -DFFI_INCLUDE_DIR:STRING=$(LIBFFI_INCDIR)
+CMAKE_OPTIONS += -DFFI_LIBRARY_DIR:STRING=$(LIBFFI_LIBDIR)
+
+ifeq ($(HAVE_SPHINX),1)
+  CMAKE_OPTIONS += -DSPHINX_EXECUTABLE:STRING="/usr/bin/sphinx-build"
+  CMAKE_OPTIONS += -DLLVM_ENABLE_SPHINX:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_BUILD_DOCS:BOOL=ON
+  CMAKE_OPTIONS += -DSPHINX_OUTPUT_HTML:BOOL=ON
+  CMAKE_OPTIONS += -DSPHINX_OUTPUT_MAN:BOOL=ON
 endif
-CONFIGURE_OPTIONS += --with-gcc-toolchain=$(USRDIR)/gcc/$(GCC_VERSION)
-CONFIGURE_OPTIONS += --with-optimize-option="$(OFLAG) $(GFLAG)"
+
+# Always build the libLLVM and libclang shared libraries
+CMAKE_OPTIONS += -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_LINK_LLVM_DYLIB:BOOL=ON
+
+CMAKE_OPTIONS += -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
+
+CMAKE_OPTIONS += -DLLVM_COMPILER_IS_GCC_COMPATIBLE:BOOL=ON
 
-# Enable the cross-compiler in 3.8.X.
-CONFIGURE_OPTIONS.i386 += --enable-targets="x86"
-CONFIGURE_OPTIONS.sparc += --enable-targets="sparc"
+ifeq ($(CMAKE_NEEDS_SOLARIS_HOST),1)
+  CMAKE_OPTIONS += -DCMAKE_HOST_SOLARIS:BOOL=TRUE
+endif
+
+COMPONENT_BUILD_ENV = CC="$(CC)"
+COMPONENT_BUILD_ENV += CXX="$(CXX)"
+COMPONENT_BUILD_ENV += CFLAGS="$(CFLAGS)"
+COMPONENT_BUILD_ENV += CXXFLAGS="$(CXXFLAGS)"
+COMPONENT_BUILD_ENV += LDFLAGS="$(LDFLAGS)"
+COMPONENT_BUILD_ENV += LD_OPTIONS="$(LD_OPTIONS)"
+COMPONENT_BUILD_ENV += PATH="$(PATH)"
+COMPONENT_BUILD_ENV += LANG="C"
+COMPONENT_BUILD_ENV += LC_ALL="C"
+COMPONENT_BUILD_ENV += LD_EXEC_OPTIONS="-zaslr=disable"
 
 # Put this here for now until the gpatch problems are resolved.
-COMPONENT_BUILD_ARGS += -j8
+COMPONENT_BUILD_ARGS += -j4
 
 # use bash(1) to run the install recipes otherwise clang header installation
 # fails
 COMPONENT_INSTALL_ARGS += SHELL=/bin/bash
 
-# common targets
-# There are no master test results yet. TBDL in 3.8.X.
+COMPONENT_PRE_BUILD_ACTION += cd $(@D) ;
+COMPONENT_PRE_BUILD_ACTION += echo BITS: $(BITS) ;
+COMPONENT_PRE_BUILD_ACTION += echo Running cmake with $(CMAKE_OPTIONS) ;
+COMPONENT_PRE_BUILD_ACTION += /usr/bin/env - $(COMPONENT_BUILD_ENV) \
+			      $(CMAKE) $(CMAKE_OPTIONS) \
+			      $(COMPONENT_DIR)/$(COMPONENT_SRC) ;
+
+
+# There are no master test results just yet. But there will be
+# very soon.
 test:
-	@echo "Tests not yet implemented (wait for 3.8.X)."
+	@echo "Tests not yet implemented - coming soon in LLVM 3.8.1."
+
+system-test:    $(SYSTEM_TESTS_NOT_IMPLEMENTED)
 
 REQUIRED_PACKAGES += developer/gcc-4/gcc-common-49
 REQUIRED_PACKAGES += developer/gnu-binutils
@@ -309,6 +514,13 @@
 REQUIRED_PACKAGES += library/libffi
 REQUIRED_PACKAGES += library/libxml2
 REQUIRED_PACKAGES += library/zlib
+REQUIRED_PACKAGES += runtime/perl-522
+REQUIRED_PACKAGES += library/perl-5/xml-libxml
+REQUIRED_PACKAGES += library/perl-5/xml-namespacesupport
+REQUIRED_PACKAGES += library/perl-5/xml-parser
+REQUIRED_PACKAGES += library/perl-5/xml-sax
+REQUIRED_PACKAGES += library/perl-5/xml-sax-base
+REQUIRED_PACKAGES += library/perl-5/xml-simple
 REQUIRED_PACKAGES += runtime/python-27
 REQUIRED_PACKAGES += system/core-os
 REQUIRED_PACKAGES += system/header
@@ -318,3 +530,4 @@
 REQUIRED_PACKAGES += system/library/gcc/gcc-gobjc-runtime-49
 REQUIRED_PACKAGES += system/library/math
 REQUIRED_PACKAGES += system/linker
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/FileCheck.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,555 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "FILECHECK" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+FileCheck \- Flexible pattern matching file verifier
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBFileCheck\fP \fImatch\-filename\fP [\fI\-\-check\-prefix=XXX\fP] [\fI\-\-strict\-whitespace\fP]
+.SH DESCRIPTION
+.sp
+\fBFileCheck\fP reads two files (one from standard input, and one
+specified on the command line) and uses one to verify the other.  This
+behavior is particularly useful for the testsuite, which wants to verify that
+the output of some tool (e.g. \fBllc\fP) contains the expected information
+(for example, a movsd from esp or whatever is interesting).  This is similar to
+using \fBgrep\fP, but it is optimized for matching multiple different
+inputs in one file in a specific order.
+.sp
+The \fBmatch\-filename\fP file specifies the file that contains the patterns to
+match.  The file to verify is read from standard input unless the
+\fI\%\-\-input\-file\fP option is used.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-check\-prefix prefix
+FileCheck searches the contents of \fBmatch\-filename\fP for patterns to
+match.  By default, these patterns are prefixed with "\fBCHECK:\fP".
+If you\(aqd like to use a different prefix (e.g. because the same input
+file is checking multiple different tool or options), the
+\fI\%\-\-check\-prefix\fP argument allows you to specify one or more
+prefixes to match. Multiple prefixes are useful for tests which might
+change for different run options, but most lines remain the same.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-input\-file filename
+File to check (defaults to stdin).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-strict\-whitespace
+By default, FileCheck canonicalizes input horizontal whitespace (spaces and
+tabs) which causes it to ignore these differences (a space will match a tab).
+The \fI\%\-\-strict\-whitespace\fP argument disables this behavior. End\-of\-line
+sequences are canonicalized to UNIX\-style \fB\en\fP in all modes.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-implicit\-check\-not check\-pattern
+Adds implicit negative checks for the specified patterns between positive
+checks. The option allows writing stricter tests without stuffing them with
+\fBCHECK\-NOT\fPs.
+.sp
+For example, "\fB\-\-implicit\-check\-not warning:\fP" can be useful when testing
+diagnostic messages from tools that don\(aqt have an option similar to \fBclang
+\-verify\fP\&. With this option FileCheck will verify that input does not contain
+warnings not covered by any \fBCHECK:\fP patterns.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-version
+Show the version number of this program.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBFileCheck\fP verifies that the file matches the expected contents,
+it exits with 0.  Otherwise, if not, or if an error occurs, it will exit with a
+non\-zero value.
+.SH TUTORIAL
+.sp
+FileCheck is typically used from LLVM regression tests, being invoked on the RUN
+line of the test.  A simple example of using FileCheck from a RUN line looks
+like this:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; RUN: llvm\-as < %s | llc \-march=x86\-64 | FileCheck %s
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+This syntax says to pipe the current file ("\fB%s\fP") into \fBllvm\-as\fP, pipe
+that into \fBllc\fP, then pipe the output of \fBllc\fP into \fBFileCheck\fP\&.  This
+means that FileCheck will be verifying its standard input (the llc output)
+against the filename argument specified (the original \fB\&.ll\fP file specified by
+"\fB%s\fP").  To see how this works, let\(aqs look at the rest of the \fB\&.ll\fP file
+(after the RUN line):
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+define void @sub1(i32* %p, i32 %v) {
+entry:
+; CHECK: sub1:
+; CHECK: subl
+        %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
+        ret void
+}
+
+define void @inc4(i64* %p) {
+entry:
+; CHECK: inc4:
+; CHECK: incq
+        %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
+        ret void
+}
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+Here you can see some "\fBCHECK:\fP" lines specified in comments.  Now you can
+see how the file is piped into \fBllvm\-as\fP, then \fBllc\fP, and the machine code
+output is what we are verifying.  FileCheck checks the machine code output to
+verify that it matches what the "\fBCHECK:\fP" lines specify.
+.sp
+The syntax of the "\fBCHECK:\fP" lines is very simple: they are fixed strings that
+must occur in order.  FileCheck defaults to ignoring horizontal whitespace
+differences (e.g. a space is allowed to match a tab) but otherwise, the contents
+of the "\fBCHECK:\fP" line is required to match some thing in the test file exactly.
+.sp
+One nice thing about FileCheck (compared to grep) is that it allows merging
+test cases together into logical groups.  For example, because the test above
+is checking for the "\fBsub1:\fP" and "\fBinc4:\fP" labels, it will not match
+unless there is a "\fBsubl\fP" in between those labels.  If it existed somewhere
+else in the file, that would not count: "\fBgrep subl\fP" matches if "\fBsubl\fP"
+exists anywhere in the file.
+.SS The FileCheck \-check\-prefix option
+.sp
+The FileCheck \fB\-check\-prefix\fP option allows multiple test
+configurations to be driven from one \fI\&.ll\fP file.  This is useful in many
+circumstances, for example, testing different architectural variants with
+\fBllc\fP\&.  Here\(aqs a simple example:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; RUN: llvm\-as < %s | llc \-mtriple=i686\-apple\-darwin9 \-mattr=sse41 \e
+; RUN:              | FileCheck %s \-check\-prefix=X32
+; RUN: llvm\-as < %s | llc \-mtriple=x86_64\-apple\-darwin9 \-mattr=sse41 \e
+; RUN:              | FileCheck %s \-check\-prefix=X64
+
+define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
+        %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1
+        ret <4 x i32> %tmp1
+; X32: pinsrd_1:
+; X32:    pinsrd $1, 4(%esp), %xmm0
+
+; X64: pinsrd_1:
+; X64:    pinsrd $1, %edi, %xmm0
+}
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+In this case, we\(aqre testing that we get the expected code generation with
+both 32\-bit and 64\-bit code generation.
+.SS The "CHECK\-NEXT:" directive
+.sp
+Sometimes you want to match lines and would like to verify that matches
+happen on exactly consecutive lines with no other lines in between them.  In
+this case, you can use "\fBCHECK:\fP" and "\fBCHECK\-NEXT:\fP" directives to specify
+this.  If you specified a custom check prefix, just use "\fB<PREFIX>\-NEXT:\fP".
+For example, something like this works as you\(aqd expect:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
+     %tmp3 = load <2 x double>* %A, align 16
+     %tmp7 = insertelement <2 x double> undef, double %B, i32 0
+     %tmp9 = shufflevector <2 x double> %tmp3,
+                            <2 x double> %tmp7,
+                            <2 x i32> < i32 0, i32 2 >
+     store <2 x double> %tmp9, <2 x double>* %r, align 16
+     ret void
+
+; CHECK:          t2:
+; CHECK:             movl    8(%esp), %eax
+; CHECK\-NEXT:        movapd  (%eax), %xmm0
+; CHECK\-NEXT:        movhpd  12(%esp), %xmm0
+; CHECK\-NEXT:        movl    4(%esp), %eax
+; CHECK\-NEXT:        movapd  %xmm0, (%eax)
+; CHECK\-NEXT:        ret
+}
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+"\fBCHECK\-NEXT:\fP" directives reject the input unless there is exactly one
+newline between it and the previous directive.  A "\fBCHECK\-NEXT:\fP" cannot be
+the first directive in a file.
+.SS The "CHECK\-SAME:" directive
+.sp
+Sometimes you want to match lines and would like to verify that matches happen
+on the same line as the previous match.  In this case, you can use "\fBCHECK:\fP"
+and "\fBCHECK\-SAME:\fP" directives to specify this.  If you specified a custom
+check prefix, just use "\fB<PREFIX>\-SAME:\fP".
+.sp
+"\fBCHECK\-SAME:\fP" is particularly powerful in conjunction with "\fBCHECK\-NOT:\fP"
+(described below).
+.sp
+For example, the following works like you\(aqd expect:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+!0 = !DILocation(line: 5, scope: !1, inlinedAt: !2)
+
+; CHECK:       !DILocation(line: 5,
+; CHECK\-NOT:               column:
+; CHECK\-SAME:              scope: ![[SCOPE:[0\-9]+]]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+"\fBCHECK\-SAME:\fP" directives reject the input if there are any newlines between
+it and the previous directive.  A "\fBCHECK\-SAME:\fP" cannot be the first
+directive in a file.
+.SS The "CHECK\-NOT:" directive
+.sp
+The "\fBCHECK\-NOT:\fP" directive is used to verify that a string doesn\(aqt occur
+between two matches (or before the first match, or after the last match).  For
+example, to verify that a load is removed by a transformation, a test like this
+can be used:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+define i8 @coerce_offset0(i32 %V, i32* %P) {
+  store i32 %V, i32* %P
+
+  %P2 = bitcast i32* %P to i8*
+  %P3 = getelementptr i8* %P2, i32 2
+
+  %A = load i8* %P3
+  ret i8 %A
+; CHECK: @coerce_offset0
+; CHECK\-NOT: load
+; CHECK: ret i8
+}
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SS The "CHECK\-DAG:" directive
+.sp
+If it\(aqs necessary to match strings that don\(aqt occur in a strictly sequential
+order, "\fBCHECK\-DAG:\fP" could be used to verify them between two matches (or
+before the first match, or after the last match). For example, clang emits
+vtable globals in reverse order. Using \fBCHECK\-DAG:\fP, we can keep the checks
+in the natural order:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+// RUN: %clang_cc1 %s \-emit\-llvm \-o \- | FileCheck %s
+
+struct Foo { virtual void method(); };
+Foo f;  // emit vtable
+// CHECK\-DAG: @_ZTV3Foo =
+
+struct Bar { virtual void method(); };
+Bar b;
+// CHECK\-DAG: @_ZTV3Bar =
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+\fBCHECK\-NOT:\fP directives could be mixed with \fBCHECK\-DAG:\fP directives to
+exclude strings between the surrounding \fBCHECK\-DAG:\fP directives. As a result,
+the surrounding \fBCHECK\-DAG:\fP directives cannot be reordered, i.e. all
+occurrences matching \fBCHECK\-DAG:\fP before \fBCHECK\-NOT:\fP must not fall behind
+occurrences matching \fBCHECK\-DAG:\fP after \fBCHECK\-NOT:\fP\&. For example,
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; CHECK\-DAG: BEFORE
+; CHECK\-NOT: NOT
+; CHECK\-DAG: AFTER
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+This case will reject input strings where \fBBEFORE\fP occurs after \fBAFTER\fP\&.
+.sp
+With captured variables, \fBCHECK\-DAG:\fP is able to match valid topological
+orderings of a DAG with edges from the definition of a variable to its use.
+It\(aqs useful, e.g., when your test cases need to match different output
+sequences from the instruction scheduler. For example,
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; CHECK\-DAG: add [[REG1:r[0\-9]+]], r1, r2
+; CHECK\-DAG: add [[REG2:r[0\-9]+]], r3, r4
+; CHECK:     mul r5, [[REG1]], [[REG2]]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+In this case, any order of that two \fBadd\fP instructions will be allowed.
+.sp
+If you are defining \fIand\fP using variables in the same \fBCHECK\-DAG:\fP block,
+be aware that the definition rule can match \fIafter\fP its use.
+.sp
+So, for instance, the code below will pass:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; CHECK\-DAG: vmov.32 [[REG2:d[0\-9]+]][0]
+; CHECK\-DAG: vmov.32 [[REG2]][1]
+vmov.32 d0[1]
+vmov.32 d0[0]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+While this other code, will not:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; CHECK\-DAG: vmov.32 [[REG2:d[0\-9]+]][0]
+; CHECK\-DAG: vmov.32 [[REG2]][1]
+vmov.32 d1[1]
+vmov.32 d0[0]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+While this can be very useful, it\(aqs also dangerous, because in the case of
+register sequence, you must have a strong order (read before write, copy before
+use, etc). If the definition your test is looking for doesn\(aqt match (because
+of a bug in the compiler), it may match further away from the use, and mask
+real bugs away.
+.sp
+In those cases, to enforce the order, use a non\-DAG directive between DAG\-blocks.
+.SS The "CHECK\-LABEL:" directive
+.sp
+Sometimes in a file containing multiple tests divided into logical blocks, one
+or more \fBCHECK:\fP directives may inadvertently succeed by matching lines in a
+later block. While an error will usually eventually be generated, the check
+flagged as causing the error may not actually bear any relationship to the
+actual source of the problem.
+.sp
+In order to produce better error messages in these cases, the "\fBCHECK\-LABEL:\fP"
+directive can be used. It is treated identically to a normal \fBCHECK\fP
+directive except that FileCheck makes an additional assumption that a line
+matched by the directive cannot also be matched by any other check present in
+\fBmatch\-filename\fP; this is intended to be used for lines containing labels or
+other unique identifiers. Conceptually, the presence of \fBCHECK\-LABEL\fP divides
+the input stream into separate blocks, each of which is processed independently,
+preventing a \fBCHECK:\fP directive in one block matching a line in another block.
+For example,
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
+entry:
+; CHECK\-LABEL: C_ctor_base:
+; CHECK: mov [[SAVETHIS:r[0\-9]+]], r0
+; CHECK: bl A_ctor_base
+; CHECK: mov r0, [[SAVETHIS]]
+  %0 = bitcast %struct.C* %this to %struct.A*
+  %call = tail call %struct.A* @A_ctor_base(%struct.A* %0)
+  %1 = bitcast %struct.C* %this to %struct.B*
+  %call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
+  ret %struct.C* %this
+}
+
+define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
+entry:
+; CHECK\-LABEL: D_ctor_base:
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+The use of \fBCHECK\-LABEL:\fP directives in this case ensures that the three
+\fBCHECK:\fP directives only accept lines corresponding to the body of the
+\[email protected]_ctor_base\fP function, even if the patterns match lines found later in
+the file. Furthermore, if one of these three \fBCHECK:\fP directives fail,
+FileCheck will recover by continuing to the next block, allowing multiple test
+failures to be detected in a single invocation.
+.sp
+There is no requirement that \fBCHECK\-LABEL:\fP directives contain strings that
+correspond to actual syntactic labels in a source or output language: they must
+simply uniquely match a single line in the file being verified.
+.sp
+\fBCHECK\-LABEL:\fP directives cannot contain variable definitions or uses.
+.SS FileCheck Pattern Matching Syntax
+.sp
+All FileCheck directives take a pattern to match.
+For most uses of FileCheck, fixed string matching is perfectly sufficient.  For
+some things, a more flexible form of matching is desired.  To support this,
+FileCheck allows you to specify regular expressions in matching strings,
+surrounded by double braces: \fB{{yourregex}}\fP\&.  Because we want to use fixed
+string matching for a majority of what we do, FileCheck has been designed to
+support mixing and matching fixed string matching with regular expressions.
+This allows you to write things like this:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; CHECK: movhpd      {{[0\-9]+}}(%esp), {{%xmm[0\-7]}}
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+In this case, any offset from the ESP register will be allowed, and any xmm
+register will be allowed.
+.sp
+Because regular expressions are enclosed with double braces, they are
+visually distinct, and you don\(aqt need to use escape characters within the double
+braces like you would in C.  In the rare case that you want to match double
+braces explicitly from the input, you can use something ugly like
+\fB{{[{][{]}}\fP as your pattern.
+.SS FileCheck Variables
+.sp
+It is often useful to match a pattern and then verify that it occurs again
+later in the file.  For codegen tests, this can be useful to allow any register,
+but verify that that register is used consistently later.  To do this,
+\fBFileCheck\fP allows named variables to be defined and substituted into
+patterns.  Here is a simple example:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; CHECK: test5:
+; CHECK:    notw     [[REGISTER:%[a\-z]+]]
+; CHECK:    andw     {{.*}}[[REGISTER]]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+The first check line matches a regex \fB%[a\-z]+\fP and captures it into the
+variable \fBREGISTER\fP\&.  The second line verifies that whatever is in
+\fBREGISTER\fP occurs later in the file after an "\fBandw\fP".  \fBFileCheck\fP
+variable references are always contained in \fB[[ ]]\fP pairs, and their names can
+be formed with the regex \fB[a\-zA\-Z][a\-zA\-Z0\-9]*\fP\&.  If a colon follows the name,
+then it is a definition of the variable; otherwise, it is a use.
+.sp
+\fBFileCheck\fP variables can be defined multiple times, and uses always
+get the latest value.  Variables can also be used later on the same line they
+were defined on. For example:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+; CHECK: op [[REG:r[0\-9]+]], [[REG]]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+Can be useful if you want the operands of \fBop\fP to be the same register,
+and don\(aqt care exactly which register it is.
+.SS FileCheck Expressions
+.sp
+Sometimes there\(aqs a need to verify output which refers line numbers of the
+match file, e.g. when testing compiler diagnostics.  This introduces a certain
+fragility of the match file structure, as "\fBCHECK:\fP" lines contain absolute
+line numbers in the same file, which have to be updated whenever line numbers
+change due to text addition or deletion.
+.sp
+To support this case, FileCheck allows using \fB[[@LINE]]\fP,
+\fB[[@LINE+<offset>]]\fP, \fB[[@LINE\-<offset>]]\fP expressions in patterns. These
+expressions expand to a number of the line where a pattern is located (with an
+optional integer offset).
+.sp
+This way match patterns can be put near the relevant test lines and include
+relative line number references, for example:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+// CHECK: test.cpp:[[@LINE+4]]:6: error: expected \(aq;\(aq after top level declarator
+// CHECK\-NEXT: {{^int a}}
+// CHECK\-NEXT: {{^     \e^}}
+// CHECK\-NEXT: {{^     ;}}
+int a
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/bugpoint.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,292 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "BUGPOINT" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+bugpoint \- automatic test case reduction tool
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBbugpoint\fP [\fIoptions\fP] [\fIinput LLVM ll/bc files\fP] [\fILLVM passes\fP] \fB\-\-args\fP
+\fIprogram arguments\fP
+.SH DESCRIPTION
+.sp
+\fBbugpoint\fP narrows down the source of problems in LLVM tools and passes.  It
+can be used to debug three types of failures: optimizer crashes, miscompilations
+by optimizers, or bad native code generation (including problems in the static
+and JIT compilers).  It aims to reduce large test cases to small, useful ones.
+For more information on the design and inner workings of \fBbugpoint\fP, as well as
+advice for using bugpoint, see \fIllvm/docs/Bugpoint.html\fP in the LLVM
+distribution.
+.SH OPTIONS
+.sp
+\fB\-\-additional\-so\fP \fIlibrary\fP
+.INDENT 0.0
+.INDENT 3.5
+Load the dynamic shared object \fIlibrary\fP into the test program whenever it is
+run.  This is useful if you are debugging programs which depend on non\-LLVM
+libraries (such as the X or curses libraries) to run.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-append\-exit\-code\fP=\fI{true,false}\fP
+.INDENT 0.0
+.INDENT 3.5
+Append the test programs exit code to the output file so that a change in exit
+code is considered a test failure. Defaults to false.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-args\fP \fIprogram args\fP
+.INDENT 0.0
+.INDENT 3.5
+Pass all arguments specified after \fB\-\-args\fP to the test program whenever it runs.
+Note that if any of the \fIprogram args\fP start with a "\fB\-\fP", you should use:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+bugpoint [bugpoint args] \-\-args \-\- [program args]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+The "\fB\-\-\fP" right after the \fB\-\-args\fP option tells \fBbugpoint\fP to consider
+any options starting with "\fB\-\fP" to be part of the \fB\-\-args\fP option, not as
+options to \fBbugpoint\fP itself.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-tool\-args\fP \fItool args\fP
+.INDENT 0.0
+.INDENT 3.5
+Pass all arguments specified after \fB\-\-tool\-args\fP to the LLVM tool under test
+(\fBllc\fP, \fBlli\fP, etc.) whenever it runs.  You should use this option in the
+following way:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+bugpoint [bugpoint args] \-\-tool\-args \-\- [tool args]
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+The "\fB\-\-\fP" right after the \fB\-\-tool\-args\fP option tells \fBbugpoint\fP to
+consider any options starting with "\fB\-\fP" to be part of the \fB\-\-tool\-args\fP
+option, not as options to \fBbugpoint\fP itself. (See \fB\-\-args\fP, above.)
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-safe\-tool\-args\fP \fItool args\fP
+.INDENT 0.0
+.INDENT 3.5
+Pass all arguments specified after \fB\-\-safe\-tool\-args\fP to the "safe" execution
+tool.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-gcc\-tool\-args\fP \fIgcc tool args\fP
+.INDENT 0.0
+.INDENT 3.5
+Pass all arguments specified after \fB\-\-gcc\-tool\-args\fP to the invocation of
+\fBgcc\fP\&.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-opt\-args\fP \fIopt args\fP
+.INDENT 0.0
+.INDENT 3.5
+Pass all arguments specified after \fB\-\-opt\-args\fP to the invocation of \fBopt\fP\&.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-disable\-{dce,simplifycfg}\fP
+.INDENT 0.0
+.INDENT 3.5
+Do not run the specified passes to clean up and reduce the size of the test
+program. By default, \fBbugpoint\fP uses these passes internally when attempting to
+reduce test programs.  If you\(aqre trying to find a bug in one of these passes,
+\fBbugpoint\fP may crash.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-enable\-valgrind\fP
+.INDENT 0.0
+.INDENT 3.5
+Use valgrind to find faults in the optimization phase. This will allow
+bugpoint to find otherwise asymptomatic problems caused by memory
+mis\-management.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-find\-bugs\fP
+.INDENT 0.0
+.INDENT 3.5
+Continually randomize the specified passes and run them on the test program
+until a bug is found or the user kills \fBbugpoint\fP\&.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-help\fP
+.INDENT 0.0
+.INDENT 3.5
+Print a summary of command line options.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-input\fP \fIfilename\fP
+.INDENT 0.0
+.INDENT 3.5
+Open \fIfilename\fP and redirect the standard input of the test program, whenever
+it runs, to come from that file.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-load\fP \fIplugin\fP
+.INDENT 0.0
+.INDENT 3.5
+Load the dynamic object \fIplugin\fP into \fBbugpoint\fP itself.  This object should
+register new optimization passes.  Once loaded, the object will add new command
+line options to enable various optimizations.  To see the new complete list of
+optimizations, use the \fB\-help\fP and \fB\-\-load\fP options together; for example:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+bugpoint \-\-load myNewPass.so \-help
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-mlimit\fP \fImegabytes\fP
+.INDENT 0.0
+.INDENT 3.5
+Specifies an upper limit on memory usage of the optimization and codegen. Set
+to zero to disable the limit.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-output\fP \fIfilename\fP
+.INDENT 0.0
+.INDENT 3.5
+Whenever the test program produces output on its standard output stream, it
+should match the contents of \fIfilename\fP (the "reference output"). If you
+do not use this option, \fBbugpoint\fP will attempt to generate a reference output
+by compiling the program with the "safe" backend and running it.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-run\-{int,jit,llc,custom}\fP
+.INDENT 0.0
+.INDENT 3.5
+Whenever the test program is compiled, \fBbugpoint\fP should generate code for it
+using the specified code generator.  These options allow you to choose the
+interpreter, the JIT compiler, the static native code compiler, or a
+custom command (see \fB\-\-exec\-command\fP) respectively.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-safe\-{llc,custom}\fP
+.INDENT 0.0
+.INDENT 3.5
+When debugging a code generator, \fBbugpoint\fP should use the specified code
+generator as the "safe" code generator. This is a known\-good code generator
+used to generate the "reference output" if it has not been provided, and to
+compile portions of the program that as they are excluded from the testcase.
+These options allow you to choose the
+static native code compiler, or a custom command, (see \fB\-\-exec\-command\fP)
+respectively. The interpreter and the JIT backends cannot currently
+be used as the "safe" backends.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-exec\-command\fP \fIcommand\fP
+.INDENT 0.0
+.INDENT 3.5
+This option defines the command to use with the \fB\-\-run\-custom\fP and
+\fB\-\-safe\-custom\fP options to execute the bitcode testcase. This can
+be useful for cross\-compilation.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-compile\-command\fP \fIcommand\fP
+.INDENT 0.0
+.INDENT 3.5
+This option defines the command to use with the \fB\-\-compile\-custom\fP
+option to compile the bitcode testcase. This can be useful for
+testing compiler output without running any link or execute stages. To
+generate a reduced unit test, you may add CHECK directives to the
+testcase and pass the name of an executable compile\-command script in this form:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+#!/bin/sh
+llc "[email protected]"
+not FileCheck [bugpoint input file].ll < bugpoint\-test\-program.s
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+This script will "fail" as long as FileCheck passes. So the result
+will be the minimum bitcode that passes FileCheck.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-safe\-path\fP \fIpath\fP
+.INDENT 0.0
+.INDENT 3.5
+This option defines the path to the command to execute with the
+\fB\-\-safe\-{int,jit,llc,custom}\fP
+option.
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBbugpoint\fP succeeds in finding a problem, it will exit with 0.  Otherwise,
+if an error occurs, it will exit with a non\-zero value.
+.SH SEE ALSO
+.sp
+opt|opt
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/clang.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,583 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "CLANG" "1" "Jul 10, 2016" "3.8" "Clang"
+.SH NAME
+clang \- the Clang C, C++, and Objective-C compiler
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBclang\fP [\fIoptions\fP] \fIfilename ...\fP
+.SH DESCRIPTION
+.sp
+\fBclang\fP is a C, C++, and Objective\-C compiler which encompasses
+preprocessing, parsing, optimization, code generation, assembly, and linking.
+Depending on which high\-level mode setting is passed, Clang will stop before
+doing a full link.  While Clang is highly integrated, it is important to
+understand the stages of compilation, to understand how to invoke it.  These
+stages are:
+.INDENT 0.0
+.TP
+.B Driver
+The clang executable is actually a small driver which controls the overall
+execution of other tools such as the compiler, assembler and linker.
+Typically you do not need to interact with the driver, but you
+transparently use it to run the other tools.
+.TP
+.B Preprocessing
+This stage handles tokenization of the input source file, macro expansion,
+#include expansion and handling of other preprocessor directives.  The
+output of this stage is typically called a ".i" (for C), ".ii" (for C++),
+".mi" (for Objective\-C), or ".mii" (for Objective\-C++) file.
+.TP
+.B Parsing and Semantic Analysis
+This stage parses the input file, translating preprocessor tokens into a
+parse tree.  Once in the form of a parse tree, it applies semantic
+analysis to compute types for expressions as well and determine whether
+the code is well formed. This stage is responsible for generating most of
+the compiler warnings as well as parse errors. The output of this stage is
+an "Abstract Syntax Tree" (AST).
+.TP
+.B Code Generation and Optimization
+This stage translates an AST into low\-level intermediate code (known as
+"LLVM IR") and ultimately to machine code.  This phase is responsible for
+optimizing the generated code and handling target\-specific code generation.
+The output of this stage is typically called a ".s" file or "assembly" file.
+.sp
+Clang also supports the use of an integrated assembler, in which the code
+generator produces object files directly. This avoids the overhead of
+generating the ".s" file and of calling the target assembler.
+.TP
+.B Assembler
+This stage runs the target assembler to translate the output of the
+compiler into a target object file. The output of this stage is typically
+called a ".o" file or "object" file.
+.TP
+.B Linker
+This stage runs the target linker to merge multiple object files into an
+executable or dynamic library. The output of this stage is typically called
+an "a.out", ".dylib" or ".so" file.
+.UNINDENT
+.sp
+\fBClang Static Analyzer\fP
+.sp
+The Clang Static Analyzer is a tool that scans source code to try to find bugs
+through code analysis.  This tool uses many parts of Clang and is built into
+the same driver.  Please see <\fI\%http://clang\-analyzer.llvm.org\fP> for more details
+on how to use the static analyzer.
+.SH OPTIONS
+.SS Stage Selection Options
+.INDENT 0.0
+.TP
+.B \-E
+Run the preprocessor stage.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fsyntax\-only
+Run the preprocessor, parser and type checking stages.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-S
+Run the previous stages as well as LLVM generation and optimization stages
+and target\-specific code generation, producing an assembly file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-c
+Run all of the above, plus the assembler, generating a target ".o" object file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B no stage selection option
+If no stage selection option is specified, all stages above are run, and the
+linker is run to combine the results into an executable or shared library.
+.UNINDENT
+.SS Language Selection and Mode Options
+.INDENT 0.0
+.TP
+.B \-x <language>
+Treat subsequent input files as having type language.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-std=<language>
+Specify the language standard to compile for.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-stdlib=<library>
+Specify the C++ standard library to use; supported options are libstdc++ and
+libc++.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-ansi
+Same as \-std=c89.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-ObjC, \-ObjC++
+Treat source input files as Objective\-C and Object\-C++ inputs respectively.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-trigraphs
+Enable trigraphs.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-ffreestanding
+Indicate that the file should be compiled for a freestanding, not a hosted,
+environment.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fno\-builtin
+Disable special handling and optimizations of builtin functions like
+\fBstrlen()\fP and \fBmalloc()\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fmath\-errno
+Indicate that math functions should be treated as updating \fBerrno\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fpascal\-strings
+Enable support for Pascal\-style strings with "\epfoo".
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fms\-extensions
+Enable support for Microsoft extensions.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fmsc\-version=
+Set _MSC_VER. Defaults to 1300 on Windows. Not set otherwise.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fborland\-extensions
+Enable support for Borland extensions.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fwritable\-strings
+Make all string literals default to writable.  This disables uniquing of
+strings and other optimizations.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-flax\-vector\-conversions
+Allow loose type checking rules for implicit vector conversions.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fblocks
+Enable the "Blocks" language feature.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fobjc\-gc\-only
+Indicate that Objective\-C code should be compiled in GC\-only mode, which only
+works when Objective\-C Garbage Collection is enabled.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fobjc\-gc
+Indicate that Objective\-C code should be compiled in hybrid\-GC mode, which
+works with both GC and non\-GC mode.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fobjc\-abi\-version=version
+Select the Objective\-C ABI version to use. Available versions are 1 (legacy
+"fragile" ABI), 2 (non\-fragile ABI 1), and 3 (non\-fragile ABI 2).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fobjc\-nonfragile\-abi\-version=<version>
+Select the Objective\-C non\-fragile ABI version to use by default. This will
+only be used as the Objective\-C ABI when the non\-fragile ABI is enabled
+(either via \fI\%\-fobjc\-nonfragile\-abi\fP, or because it is the platform
+default).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fobjc\-nonfragile\-abi
+Enable use of the Objective\-C non\-fragile ABI. On platforms for which this is
+the default ABI, it can be disabled with \fB\-fno\-objc\-nonfragile\-abi\fP\&.
+.UNINDENT
+.SS Target Selection Options
+.sp
+Clang fully supports cross compilation as an inherent part of its design.
+Depending on how your version of Clang is configured, it may have support for a
+number of cross compilers, or may only support a native target.
+.INDENT 0.0
+.TP
+.B \-arch <architecture>
+Specify the architecture to build for.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-mmacosx\-version\-min=<version>
+When building for Mac OS X, specify the minimum version supported by your
+application.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-miphoneos\-version\-min
+When building for iPhone OS, specify the minimum version supported by your
+application.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-march=<cpu>
+Specify that Clang should generate code for a specific processor family
+member and later.  For example, if you specify \-march=i486, the compiler is
+allowed to generate instructions that are valid on i486 and later processors,
+but which may not exist on earlier ones.
+.UNINDENT
+.SS Code Generation Options
+.INDENT 0.0
+.TP
+.B \-O0, \-O1, \-O2, \-O3, \-Ofast, \-Os, \-Oz, \-O, \-O4
+Specify which optimization level to use:
+.INDENT 7.0
+.INDENT 3.5
+\fI\%\-O0\fP Means "no optimization": this level compiles the fastest and
+generates the most debuggable code.
+.sp
+\fI\%\-O1\fP Somewhere between \fI\%\-O0\fP and \fI\%\-O2\fP\&.
+.sp
+\fI\%\-O2\fP Moderate level of optimization which enables most
+optimizations.
+.sp
+\fI\%\-O3\fP Like \fI\%\-O2\fP, except that it enables optimizations that
+take longer to perform or that may generate larger code (in an attempt to
+make the program run faster).
+.sp
+\fI\%\-Ofast\fP Enables all the optimizations from \fI\%\-O3\fP along
+with other aggressive optimizations that may violate strict compliance with
+language standards.
+.sp
+\fI\%\-Os\fP Like \fI\%\-O2\fP with extra optimizations to reduce code
+size.
+.sp
+\fI\%\-Oz\fP Like \fI\%\-Os\fP (and thus \fI\%\-O2\fP), but reduces code
+size further.
+.sp
+\fI\%\-O\fP Equivalent to \fI\%\-O2\fP\&.
+.sp
+\fI\%\-O4\fP and higher
+.INDENT 0.0
+.INDENT 3.5
+Currently equivalent to \fI\%\-O3\fP
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-g
+Generate debug information.  Note that Clang debug information works best at \-O0.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gmodules
+Generate debug information that contains external references to
+types defined in clang modules or precompiled headers instead of
+emitting redundant debug type information into every object file.
+This option implies \fB\-fmodule\-format=obj\fP\&.
+.sp
+This option should not be used when building static libraries for
+distribution to other machines because the debug info will contain
+references to the module cache on the machine the object files in
+the library were built on.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fstandalone\-debug \-fno\-standalone\-debug
+Clang supports a number of optimizations to reduce the size of debug
+information in the binary. They work based on the assumption that the
+debug type information can be spread out over multiple compilation units.
+For instance, Clang will not emit type definitions for types that are not
+needed by a module and could be replaced with a forward declaration.
+Further, Clang will only emit type info for a dynamic C++ class in the
+module that contains the vtable for the class.
+.sp
+The \fB\-fstandalone\-debug\fP option turns off these optimizations.
+This is useful when working with 3rd\-party libraries that don\(aqt come with
+debug information.  This is the default on Darwin.  Note that Clang will
+never emit type information for types that are not referenced at all by the
+program.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fexceptions
+Enable generation of unwind information. This allows exceptions to be thrown
+through Clang compiled stack frames.  This is on by default in x86\-64.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-ftrapv
+Generate code to catch integer overflow errors.  Signed integer overflow is
+undefined in C. With this flag, extra code is generated to detect this and
+abort when it happens.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fvisibility
+This flag sets the default visibility level.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-fcommon
+This flag specifies that variables without initializers get common linkage.
+It can be disabled with \fB\-fno\-common\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-ftls\-model=<model>
+Set the default thread\-local storage (TLS) model to use for thread\-local
+variables. Valid values are: "global\-dynamic", "local\-dynamic",
+"initial\-exec" and "local\-exec". The default is "global\-dynamic". The default
+model can be overridden with the tls_model attribute. The compiler will try
+to choose a more efficient model if possible.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-flto, \-emit\-llvm
+Generate output files in LLVM formats, suitable for link time optimization.
+When used with \fI\%\-S\fP this generates LLVM intermediate language
+assembly files, otherwise this generates LLVM bitcode format object files
+(which may be passed to the linker depending on the stage selection options).
+.UNINDENT
+.SS Driver Options
+.INDENT 0.0
+.TP
+.B \-###
+Print (but do not run) the commands to run for this compilation.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-help
+Display available options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Qunused\-arguments
+Do not emit any warnings for unused driver arguments.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Wa,<args>
+Pass the comma separated arguments in args to the assembler.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Wl,<args>
+Pass the comma separated arguments in args to the linker.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Wp,<args>
+Pass the comma separated arguments in args to the preprocessor.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Xanalyzer <arg>
+Pass arg to the static analyzer.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Xassembler <arg>
+Pass arg to the assembler.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Xlinker <arg>
+Pass arg to the linker.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-Xpreprocessor <arg>
+Pass arg to the preprocessor.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-o <file>
+Write output to file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-file\-name=<file>
+Print the full library path of file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-libgcc\-file\-name
+Print the library path for "libgcc.a".
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-prog\-name=<name>
+Print the full program path of name.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-search\-dirs
+Print the paths used for finding libraries and programs.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-save\-temps
+Save intermediate compilation results.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-integrated\-as, \-no\-integrated\-as
+Used to enable and disable, respectively, the use of the integrated
+assembler. Whether the integrated assembler is on by default is target
+dependent.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-time
+Time individual commands.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-ftime\-report
+Print timing summary of each stage of compilation.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-v
+Show commands to run and use verbose output.
+.UNINDENT
+.SS Diagnostics Options
+.INDENT 0.0
+.TP
+.B \-fshow\-column, \-fshow\-source\-location, \-fcaret\-diagnostics, \-fdiagnostics\-fixit\-info, \-fdiagnostics\-parseable\-fixits, \-fdiagnostics\-print\-source\-range\-info, \-fprint\-source\-range\-info, \-fdiagnostics\-show\-option, \-fmessage\-length
+These options control how Clang prints out information about diagnostics
+(errors and warnings). Please see the Clang User\(aqs Manual for more information.
+.UNINDENT
+.SS Preprocessor Options
+.INDENT 0.0
+.TP
+.B \-D<macroname>=<value>
+Adds an implicit #define into the predefines buffer which is read before the
+source file is preprocessed.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-U<macroname>
+Adds an implicit #undef into the predefines buffer which is read before the
+source file is preprocessed.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-include <filename>
+Adds an implicit #include into the predefines buffer which is read before the
+source file is preprocessed.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-I<directory>
+Add the specified directory to the search path for include files.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-F<directory>
+Add the specified directory to the search path for framework include files.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-nostdinc
+Do not search the standard system directories or compiler builtin directories
+for include files.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-nostdlibinc
+Do not search the standard system directories for include files, but do
+search compiler builtin include directories.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-nobuiltininc
+Do not search clang\(aqs builtin directory for include files.
+.UNINDENT
+.SH ENVIRONMENT
+.INDENT 0.0
+.TP
+.B TMPDIR, TEMP, TMP
+These environment variables are checked, in order, for the location to write
+temporary files used during the compilation process.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B CPATH
+If this environment variable is present, it is treated as a delimited list of
+paths to be added to the default system include path list. The delimiter is
+the platform dependent delimiter, as used in the PATH environment variable.
+.sp
+Empty components in the environment variable are ignored.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
+These environment variables specify additional paths, as for \fI\%CPATH\fP, which are
+only used when processing the appropriate language.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B MACOSX_DEPLOYMENT_TARGET
+If \fI\%\-mmacosx\-version\-min\fP is unspecified, the default deployment
+target is read from this environment variable. This option only affects
+Darwin targets.
+.UNINDENT
+.SH BUGS
+.sp
+To report bugs, please visit <\fI\%http://llvm.org/bugs/\fP>.  Most bug reports should
+include preprocessed source files (use the \fI\%\-E\fP option) and the full
+output of the compiler, along with information to reproduce.
+.SH SEE ALSO
+.sp
+\fBas(1)\fP, \fBld(1)\fP
+.SH AUTHOR
+Maintained by the Clang / LLVM Team (<http://clang.llvm.org>)
+.SH COPYRIGHT
+2007-2016, The Clang Team
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/lit.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,471 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LIT" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+lit \- LLVM Integrated Tester
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBlit\fP [\fIoptions\fP] [\fItests\fP]
+.SH DESCRIPTION
+.sp
+\fBlit\fP is a portable tool for executing LLVM and Clang style test
+suites, summarizing their results, and providing indication of failures.
+\fBlit\fP is designed to be a lightweight testing tool with as simple a
+user interface as possible.
+.sp
+\fBlit\fP should be run with one or more \fItests\fP to run specified on the
+command line.  Tests can be either individual test files or directories to
+search for tests (see \fI\%TEST DISCOVERY\fP).
+.sp
+Each specified test will be executed (potentially in parallel) and once all
+tests have been run \fBlit\fP will print summary information on the number
+of tests which passed or failed (see \fI\%TEST STATUS RESULTS\fP).  The
+\fBlit\fP program will execute with a non\-zero exit code if any tests
+fail.
+.sp
+By default \fBlit\fP will use a succinct progress display and will only
+print summary information for test failures.  See \fI\%OUTPUT OPTIONS\fP for
+options controlling the \fBlit\fP progress display and output.
+.sp
+\fBlit\fP also includes a number of options for controlling how tests are
+executed (specific features may depend on the particular test format).  See
+\fI\%EXECUTION OPTIONS\fP for more information.
+.sp
+Finally, \fBlit\fP also supports additional options for only running a
+subset of the options specified on the command line, see
+\fI\%SELECTION OPTIONS\fP for more information.
+.sp
+Users interested in the \fBlit\fP architecture or designing a
+\fBlit\fP testing implementation should see \fI\%LIT INFRASTRUCTURE\fP\&.
+.SH GENERAL OPTIONS
+.INDENT 0.0
+.TP
+.B \-h, \-\-help
+Show the \fBlit\fP help message.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-j N, \-\-threads=N
+Run \fBN\fP tests in parallel.  By default, this is automatically chosen to
+match the number of detected available CPUs.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-config\-prefix=NAME
+Search for \fB\fINAME\fP\fP\fB\&.cfg\fP and \fB\fINAME\fP\fP\fB\&.site.cfg\fP when searching for
+test suites, instead of \fBlit.cfg\fP and \fBlit.site.cfg\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-D NAME, \-D NAME=VALUE, \-\-param NAME, \-\-param NAME=VALUE
+Add a user defined parameter \fBNAME\fP with the given \fBVALUE\fP (or the empty
+string if not given).  The meaning and use of these parameters is test suite
+dependent.
+.UNINDENT
+.SH OUTPUT OPTIONS
+.INDENT 0.0
+.TP
+.B \-q, \-\-quiet
+Suppress any output except for test failures.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-s, \-\-succinct
+Show less output, for example don\(aqt show information on tests that pass.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-v, \-\-verbose
+Show more information on test failures, for example the entire test output
+instead of just the test result.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-a, \-\-show\-all
+Show more information about all tests, for example the entire test
+commandline and output.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-no\-progress\-bar
+Do not use curses based progress bar.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-show\-unsupported
+Show the names of unsupported tests.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-show\-xfail
+Show the names of tests that were expected to fail.
+.UNINDENT
+.SH EXECUTION OPTIONS
+.INDENT 0.0
+.TP
+.B \-\-path=PATH
+Specify an additional \fBPATH\fP to use when searching for executables in tests.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-vg
+Run individual tests under valgrind (using the memcheck tool).  The
+\fB\-\-error\-exitcode\fP argument for valgrind is used so that valgrind failures
+will cause the program to exit with a non\-zero status.
+.sp
+When this option is enabled, \fBlit\fP will also automatically provide a
+"\fBvalgrind\fP" feature that can be used to conditionally disable (or expect
+failure in) certain tests.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-vg\-arg=ARG
+When \fI\%\-\-vg\fP is used, specify an additional argument to pass to
+\fBvalgrind\fP itself.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-vg\-leak
+When \fI\%\-\-vg\fP is used, enable memory leak checks.  When this option is
+enabled, \fBlit\fP will also automatically provide a "\fBvg_leak\fP"
+feature that can be used to conditionally disable (or expect failure in)
+certain tests.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-time\-tests
+Track the wall time individual tests take to execute and includes the results
+in the summary output.  This is useful for determining which tests in a test
+suite take the most time to execute.  Note that this option is most useful
+with \fB\-j 1\fP\&.
+.UNINDENT
+.SH SELECTION OPTIONS
+.INDENT 0.0
+.TP
+.B \-\-max\-tests=N
+Run at most \fBN\fP tests and then terminate.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-max\-time=N
+Spend at most \fBN\fP seconds (approximately) running tests and then terminate.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-shuffle
+Run the tests in a random order.
+.UNINDENT
+.SH ADDITIONAL OPTIONS
+.INDENT 0.0
+.TP
+.B \-\-debug
+Run \fBlit\fP in debug mode, for debugging configuration issues and
+\fBlit\fP itself.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-show\-suites
+List the discovered test suites and exit.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-show\-tests
+List all of the discovered tests and exit.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBlit\fP will exit with an exit code of 1 if there are any FAIL or XPASS
+results.  Otherwise, it will exit with the status 0.  Other exit codes are used
+for non\-test related failures (for example a user error or an internal program
+error).
+.SH TEST DISCOVERY
+.sp
+The inputs passed to \fBlit\fP can be either individual tests, or entire
+directories or hierarchies of tests to run.  When \fBlit\fP starts up, the
+first thing it does is convert the inputs into a complete list of tests to run
+as part of \fItest discovery\fP\&.
+.sp
+In the \fBlit\fP model, every test must exist inside some \fItest suite\fP\&.
+\fBlit\fP resolves the inputs specified on the command line to test suites
+by searching upwards from the input path until it finds a \fBlit.cfg\fP or
+\fBlit.site.cfg\fP file.  These files serve as both a marker of test suites
+and as configuration files which \fBlit\fP loads in order to understand
+how to find and run the tests inside the test suite.
+.sp
+Once \fBlit\fP has mapped the inputs into test suites it traverses the
+list of inputs adding tests for individual files and recursively searching for
+tests in directories.
+.sp
+This behavior makes it easy to specify a subset of tests to run, while still
+allowing the test suite configuration to control exactly how tests are
+interpreted.  In addition, \fBlit\fP always identifies tests by the test
+suite they are in, and their relative path inside the test suite.  For
+appropriately configured projects, this allows \fBlit\fP to provide
+convenient and flexible support for out\-of\-tree builds.
+.SH TEST STATUS RESULTS
+.sp
+Each test ultimately produces one of the following six results:
+.sp
+\fBPASS\fP
+.INDENT 0.0
+.INDENT 3.5
+The test succeeded.
+.UNINDENT
+.UNINDENT
+.sp
+\fBXFAIL\fP
+.INDENT 0.0
+.INDENT 3.5
+The test failed, but that is expected.  This is used for test formats which allow
+specifying that a test does not currently work, but wish to leave it in the test
+suite.
+.UNINDENT
+.UNINDENT
+.sp
+\fBXPASS\fP
+.INDENT 0.0
+.INDENT 3.5
+The test succeeded, but it was expected to fail.  This is used for tests which
+were specified as expected to fail, but are now succeeding (generally because
+the feature they test was broken and has been fixed).
+.UNINDENT
+.UNINDENT
+.sp
+\fBFAIL\fP
+.INDENT 0.0
+.INDENT 3.5
+The test failed.
+.UNINDENT
+.UNINDENT
+.sp
+\fBUNRESOLVED\fP
+.INDENT 0.0
+.INDENT 3.5
+The test result could not be determined.  For example, this occurs when the test
+could not be run, the test itself is invalid, or the test was interrupted.
+.UNINDENT
+.UNINDENT
+.sp
+\fBUNSUPPORTED\fP
+.INDENT 0.0
+.INDENT 3.5
+The test is not supported in this environment.  This is used by test formats
+which can report unsupported tests.
+.UNINDENT
+.UNINDENT
+.sp
+Depending on the test format tests may produce additional information about
+their status (generally only for failures).  See the \fI\%OUTPUT OPTIONS\fP
+section for more information.
+.SH LIT INFRASTRUCTURE
+.sp
+This section describes the \fBlit\fP testing architecture for users interested in
+creating a new \fBlit\fP testing implementation, or extending an existing one.
+.sp
+\fBlit\fP proper is primarily an infrastructure for discovering and running
+arbitrary tests, and to expose a single convenient interface to these
+tests. \fBlit\fP itself doesn\(aqt know how to run tests, rather this logic is
+defined by \fItest suites\fP\&.
+.SS TEST SUITES
+.sp
+As described in \fI\%TEST DISCOVERY\fP, tests are always located inside a \fItest
+suite\fP\&.  Test suites serve to define the format of the tests they contain, the
+logic for finding those tests, and any additional information to run the tests.
+.sp
+\fBlit\fP identifies test suites as directories containing \fBlit.cfg\fP or
+\fBlit.site.cfg\fP files (see also \fI\%\-\-config\-prefix\fP).  Test suites are
+initially discovered by recursively searching up the directory hierarchy for
+all the input files passed on the command line.  You can use
+\fI\%\-\-show\-suites\fP to display the discovered test suites at startup.
+.sp
+Once a test suite is discovered, its config file is loaded.  Config files
+themselves are Python modules which will be executed.  When the config file is
+executed, two important global variables are predefined:
+.sp
+\fBlit_config\fP
+.INDENT 0.0
+.INDENT 3.5
+The global \fBlit\fP configuration object (a \fILitConfig\fP instance), which defines
+the builtin test formats, global configuration parameters, and other helper
+routines for implementing test configurations.
+.UNINDENT
+.UNINDENT
+.sp
+\fBconfig\fP
+.INDENT 0.0
+.INDENT 3.5
+This is the config object (a \fITestingConfig\fP instance) for the test suite,
+which the config file is expected to populate.  The following variables are also
+available on the \fIconfig\fP object, some of which must be set by the config and
+others are optional or predefined:
+.sp
+\fBname\fP \fI[required]\fP The name of the test suite, for use in reports and
+diagnostics.
+.sp
+\fBtest_format\fP \fI[required]\fP The test format object which will be used to
+discover and run tests in the test suite.  Generally this will be a builtin test
+format available from the \fIlit.formats\fP module.
+.sp
+\fBtest_source_root\fP The filesystem path to the test suite root.  For out\-of\-dir
+builds this is the directory that will be scanned for tests.
+.sp
+\fBtest_exec_root\fP For out\-of\-dir builds, the path to the test suite root inside
+the object directory.  This is where tests will be run and temporary output files
+placed.
+.sp
+\fBenvironment\fP A dictionary representing the environment to use when executing
+tests in the suite.
+.sp
+\fBsuffixes\fP For \fBlit\fP test formats which scan directories for tests, this
+variable is a list of suffixes to identify test files.  Used by: \fIShTest\fP\&.
+.sp
+\fBsubstitutions\fP For \fBlit\fP test formats which substitute variables into a test
+script, the list of substitutions to perform.  Used by: \fIShTest\fP\&.
+.sp
+\fBunsupported\fP Mark an unsupported directory, all tests within it will be
+reported as unsupported.  Used by: \fIShTest\fP\&.
+.sp
+\fBparent\fP The parent configuration, this is the config object for the directory
+containing the test suite, or None.
+.sp
+\fBroot\fP The root configuration.  This is the top\-most \fBlit\fP configuration in
+the project.
+.sp
+\fBpipefail\fP Normally a test using a shell pipe fails if any of the commands
+on the pipe fail. If this is not desired, setting this variable to false
+makes the test fail only if the last command in the pipe fails.
+.UNINDENT
+.UNINDENT
+.SS TEST DISCOVERY
+.sp
+Once test suites are located, \fBlit\fP recursively traverses the source
+directory (following \fItest_source_root\fP) looking for tests.  When \fBlit\fP
+enters a sub\-directory, it first checks to see if a nested test suite is
+defined in that directory.  If so, it loads that test suite recursively,
+otherwise it instantiates a local test config for the directory (see
+\fI\%LOCAL CONFIGURATION FILES\fP).
+.sp
+Tests are identified by the test suite they are contained within, and the
+relative path inside that suite.  Note that the relative path may not refer to
+an actual file on disk; some test formats (such as \fIGoogleTest\fP) define
+"virtual tests" which have a path that contains both the path to the actual
+test file and a subpath to identify the virtual test.
+.SS LOCAL CONFIGURATION FILES
+.sp
+When \fBlit\fP loads a subdirectory in a test suite, it instantiates a
+local test configuration by cloning the configuration for the parent directory
+\-\-\- the root of this configuration chain will always be a test suite.  Once the
+test configuration is cloned \fBlit\fP checks for a \fIlit.local.cfg\fP file
+in the subdirectory.  If present, this file will be loaded and can be used to
+specialize the configuration for each individual directory.  This facility can
+be used to define subdirectories of optional tests, or to change other
+configuration parameters \-\-\- for example, to change the test format, or the
+suffixes which identify test files.
+.SS TEST RUN OUTPUT FORMAT
+.sp
+The \fBlit\fP output for a test run conforms to the following schema, in
+both short and verbose modes (although in short mode no PASS lines will be
+shown).  This schema has been chosen to be relatively easy to reliably parse by
+a machine (for example in buildbot log scraping), and for other tools to
+generate.
+.sp
+Each test result is expected to appear on a line that matches:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+<result code>: <test name> (<progress info>)
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+where \fB<result\-code>\fP is a standard test result such as PASS, FAIL, XFAIL,
+XPASS, UNRESOLVED, or UNSUPPORTED.  The performance result codes of IMPROVED and
+REGRESSED are also allowed.
+.sp
+The \fB<test name>\fP field can consist of an arbitrary string containing no
+newline.
+.sp
+The \fB<progress info>\fP field can be used to report progress information such
+as (1/300) or can be empty, but even when empty the parentheses are required.
+.sp
+Each test result may include additional (multiline) log information in the
+following format:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+<log delineator> TEST \(aq(<test name>)\(aq <trailing delineator>
+\&... log message ...
+<log delineator>
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+where \fB<test name>\fP should be the name of a preceding reported test, \fB<log
+delineator>\fP is a string of "*" characters \fIat least\fP four characters long
+(the recommended length is 20), and \fB<trailing delineator>\fP is an arbitrary
+(unparsed) string.
+.sp
+The following is an example of a test run output which consists of four tests A,
+B, C, and D, and a log message for the failing test C:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+PASS: A (1 of 4)
+PASS: B (2 of 4)
+FAIL: C (3 of 4)
+******************** TEST \(aqC\(aq FAILED ********************
+Test \(aqC\(aq failed as a result of exit code 1.
+********************
+PASS: D (4 of 4)
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SS LIT EXAMPLE TESTS
+.sp
+The \fBlit\fP distribution contains several example implementations of
+test suites in the \fIExampleTests\fP directory.
+.SH SEE ALSO
+.sp
+valgrind(1)
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llc.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,264 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLC" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llc \- LLVM static compiler
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllc\fP [\fIoptions\fP] [\fIfilename\fP]
+.SH DESCRIPTION
+.sp
+The \fBllc\fP command compiles LLVM source inputs into assembly language
+for a specified architecture.  The assembly language output can then be passed
+through a native assembler and linker to generate a native executable.
+.sp
+The choice of architecture for the output assembly code is automatically
+determined from the input file, unless the \fB\-march\fP option is used to
+override the default.
+.SH OPTIONS
+.sp
+If \fBfilename\fP is "\fB\-\fP" or omitted, \fBllc\fP reads from standard input.
+Otherwise, it will from \fBfilename\fP\&.  Inputs can be in either the LLVM assembly
+language format (\fB\&.ll\fP) or the LLVM bitcode format (\fB\&.bc\fP).
+.sp
+If the \fB\-o\fP option is omitted, then \fBllc\fP will send its output
+to standard output if the input is from standard input.  If the \fB\-o\fP
+option specifies "\fB\-\fP", then the output will also be sent to standard output.
+.sp
+If no \fB\-o\fP option is specified and an input file other than "\fB\-\fP" is
+specified, then \fBllc\fP creates the output filename by taking the input
+filename, removing any existing \fB\&.bc\fP extension, and adding a \fB\&.s\fP suffix.
+.sp
+Other \fBllc\fP options are described below.
+.SS End\-user Options
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-O=uint
+Generate code at different optimization levels.  These correspond to the
+\fB\-O0\fP, \fB\-O1\fP, \fB\-O2\fP, and \fB\-O3\fP optimization levels used by
+\fBclang\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-mtriple=<target triple>
+Override the target triple specified in the input file with the specified
+string.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-march=<arch>
+Specify the architecture for which to generate assembly, overriding the target
+encoded in the input file.  See the output of \fBllc \-help\fP for a list of
+valid architectures.  By default this is inferred from the target triple or
+autodetected to the current architecture.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-mcpu=<cpuname>
+Specify a specific chip in the current architecture to generate code for.
+By default this is inferred from the target triple and autodetected to
+the current architecture.  For a list of available CPUs, use:
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+llvm\-as < /dev/null | llc \-march=xyz \-mcpu=help
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-filetype=<output file type>
+Specify what kind of output \fBllc\fP should generated.  Options are: \fBasm\fP
+for textual assembly ( \fB\(aq.s\(aq\fP), \fBobj\fP for native object files (\fB\(aq.o\(aq\fP)
+and \fBnull\fP for not emitting anything (for performance testing).
+.sp
+Note that not all targets support all options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-mattr=a1,+a2,\-a3,...
+Override or control specific attributes of the target, such as whether SIMD
+operations are enabled or not.  The default set of attributes is set by the
+current CPU.  For a list of available attributes, use:
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+llvm\-as < /dev/null | llc \-march=xyz \-mattr=help
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-disable\-fp\-elim
+Disable frame pointer elimination optimization.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-disable\-excess\-fp\-precision
+Disable optimizations that may produce excess precision for floating point.
+Note that this option can dramatically slow down code on some systems
+(e.g. X86).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-enable\-no\-infs\-fp\-math
+Enable optimizations that assume no Inf values.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-enable\-no\-nans\-fp\-math
+Enable optimizations that assume no NAN values.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-enable\-unsafe\-fp\-math
+Enable optimizations that make unsafe assumptions about IEEE math (e.g. that
+addition is associative) or may not work for all input ranges.  These
+optimizations allow the code generator to make use of some instructions which
+would otherwise not be usable (such as \fBfsin\fP on X86).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-stats
+Print statistics recorded by code\-generation passes.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-time\-passes
+Record the amount of time needed for each pass and print a report to standard
+error.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-load=<dso_path>
+Dynamically load \fBdso_path\fP (a path to a dynamically shared object) that
+implements an LLVM target.  This will permit the target name to be used with
+the \fB\-march\fP option so that code can be generated for that target.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-meabi=[default|gnu|4|5]
+Specify which EABI version should conform to.  Valid EABI versions are \fIgnu\fP,
+\fI4\fP and \fI5\fP\&.  Default value (\fIdefault\fP) depends on the triple.
+.UNINDENT
+.SS Tuning/Configuration Options
+.INDENT 0.0
+.TP
+.B \-\-print\-machineinstrs
+Print generated machine code between compilation phases (useful for debugging).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-regalloc=<allocator>
+Specify the register allocator to use.
+Valid register allocators are:
+.sp
+\fIbasic\fP
+.INDENT 7.0
+.INDENT 3.5
+Basic register allocator.
+.UNINDENT
+.UNINDENT
+.sp
+\fIfast\fP
+.INDENT 7.0
+.INDENT 3.5
+Fast register allocator. It is the default for unoptimized code.
+.UNINDENT
+.UNINDENT
+.sp
+\fIgreedy\fP
+.INDENT 7.0
+.INDENT 3.5
+Greedy register allocator. It is the default for optimized code.
+.UNINDENT
+.UNINDENT
+.sp
+\fIpbqp\fP
+.INDENT 7.0
+.INDENT 3.5
+Register allocator based on \(aqPartitioned Boolean Quadratic Programming\(aq.
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-spiller=<spiller>
+Specify the spiller to use for register allocators that support it.  Currently
+this option is used only by the linear scan register allocator.  The default
+\fBspiller\fP is \fIlocal\fP\&.  Valid spillers are:
+.sp
+\fIsimple\fP
+.INDENT 7.0
+.INDENT 3.5
+Simple spiller
+.UNINDENT
+.UNINDENT
+.sp
+\fIlocal\fP
+.INDENT 7.0
+.INDENT 3.5
+Local spiller
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.SS Intel IA\-32\-specific Options
+.INDENT 0.0
+.TP
+.B \-\-x86\-asm\-syntax=[att|intel]
+Specify whether to emit assembly code in AT&T syntax (the default) or Intel
+syntax.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllc\fP succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non\-zero value.
+.SH SEE ALSO
+.sp
+lli
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/lli.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,297 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLI" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+lli \- directly execute programs from LLVM bitcode
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBlli\fP [\fIoptions\fP] [\fIfilename\fP] [\fIprogram args\fP]
+.SH DESCRIPTION
+.sp
+\fBlli\fP directly executes programs in LLVM bitcode format.  It takes a program
+in LLVM bitcode format and executes it using a just\-in\-time compiler or an
+interpreter.
+.sp
+\fBlli\fP is \fInot\fP an emulator. It will not execute IR of different architectures
+and it can only interpret (or JIT\-compile) for the host architecture.
+.sp
+The JIT compiler takes the same arguments as other tools, like \fBllc\fP,
+but they don\(aqt necessarily work for the interpreter.
+.sp
+If \fIfilename\fP is not specified, then \fBlli\fP reads the LLVM bitcode for the
+program from standard input.
+.sp
+The optional \fIargs\fP specified on the command line are passed to the program as
+arguments.
+.SH GENERAL OPTIONS
+.INDENT 0.0
+.TP
+.B \-fake\-argv0=executable
+Override the \fBargv[0]\fP value passed into the executing program.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-force\-interpreter={false,true}
+If set to true, use the interpreter even if a just\-in\-time compiler is available
+for this architecture. Defaults to false.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-load=pluginfilename
+Causes \fBlli\fP to load the plugin (shared object) named \fIpluginfilename\fP and use
+it for optimization.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-stats
+Print statistics from the code\-generation passes. This is only meaningful for
+the just\-in\-time compiler, at present.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-time\-passes
+Record the amount of time needed for each code\-generation pass and print it to
+standard error.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-version
+Print out the version of \fBlli\fP and exit without doing anything else.
+.UNINDENT
+.SH TARGET OPTIONS
+.INDENT 0.0
+.TP
+.B \-mtriple=target triple
+Override the target triple specified in the input bitcode file with the
+specified string.  This may result in a crash if you pick an
+architecture which is not compatible with the current system.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-march=arch
+Specify the architecture for which to generate assembly, overriding the target
+encoded in the bitcode file.  See the output of \fBllc \-help\fP for a list of
+valid architectures.  By default this is inferred from the target triple or
+autodetected to the current architecture.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-mcpu=cpuname
+Specify a specific chip in the current architecture to generate code for.
+By default this is inferred from the target triple and autodetected to
+the current architecture.  For a list of available CPUs, use:
+\fBllvm\-as < /dev/null | llc \-march=xyz \-mcpu=help\fP
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-mattr=a1,+a2,\-a3,...
+Override or control specific attributes of the target, such as whether SIMD
+operations are enabled or not.  The default set of attributes is set by the
+current CPU.  For a list of available attributes, use:
+\fBllvm\-as < /dev/null | llc \-march=xyz \-mattr=help\fP
+.UNINDENT
+.SH FLOATING POINT OPTIONS
+.INDENT 0.0
+.TP
+.B \-disable\-excess\-fp\-precision
+Disable optimizations that may increase floating point precision.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-enable\-no\-infs\-fp\-math
+Enable optimizations that assume no Inf values.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-enable\-no\-nans\-fp\-math
+Enable optimizations that assume no NAN values.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-enable\-unsafe\-fp\-math
+Causes \fBlli\fP to enable optimizations that may decrease floating point
+precision.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-soft\-float
+Causes \fBlli\fP to generate software floating point library calls instead of
+equivalent hardware instructions.
+.UNINDENT
+.SH CODE GENERATION OPTIONS
+.INDENT 0.0
+.TP
+.B \-code\-model=model
+Choose the code model from:
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+default: Target default code model
+small: Small code model
+kernel: Kernel code model
+medium: Medium code model
+large: Large code model
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-disable\-post\-RA\-scheduler
+Disable scheduling after register allocation.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-disable\-spill\-fusing
+Disable fusing of spill code into instructions.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-jit\-enable\-eh
+Exception handling should be enabled in the just\-in\-time compiler.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-join\-liveintervals
+Coalesce copies (default=true).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-nozero\-initialized\-in\-bss
+Don\(aqt place zero\-initialized symbols into the BSS section.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-pre\-RA\-sched=scheduler
+Instruction schedulers available (before register allocation):
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+=default: Best scheduler for the target
+=none: No scheduling: breadth first sequencing
+=simple: Simple two pass scheduling: minimize critical path and maximize processor utilization
+=simple\-noitin: Simple two pass scheduling: Same as simple except using generic latency
+=list\-burr: Bottom\-up register reduction list scheduling
+=list\-tdrr: Top\-down register reduction list scheduling
+=list\-td: Top\-down list scheduler \-print\-machineinstrs \- Print generated machine code
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-regalloc=allocator
+Register allocator to use (default=linearscan)
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+=bigblock: Big\-block register allocator
+=linearscan: linear scan register allocator =local \-   local register allocator
+=simple: simple register allocator
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-relocation\-model=model
+Choose relocation model from:
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+=default: Target default relocation model
+=static: Non\-relocatable code =pic \-   Fully relocatable, position independent code
+=dynamic\-no\-pic: Relocatable external references, non\-relocatable code
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-spiller
+Spiller to use (default=local)
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+=simple: simple spiller
+=local: local spiller
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-x86\-asm\-syntax=syntax
+Choose style of code to emit from X86 backend:
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+=att: Emit AT&T\-style assembly
+=intel: Emit Intel\-style assembly
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBlli\fP fails to load the program, it will exit with an exit code of 1.
+Otherwise, it will return the exit code of the program it executes.
+.SH SEE ALSO
+.sp
+\fBllc\fP
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-ar.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,389 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-AR" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-ar \- LLVM archiver
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-ar\fP [\-]{dmpqrtx}[Rabfikou] [relpos] [count] <archive> [files...]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-ar\fP command is similar to the common Unix utility, \fBar\fP\&. It
+archives several files together into a single file. The intent for this is
+to produce archive libraries by LLVM bitcode that can be linked into an
+LLVM program. However, the archive can contain any kind of file. By default,
+\fBllvm\-ar\fP generates a symbol table that makes linking faster because
+only the symbol table needs to be consulted, not each individual file member
+of the archive.
+.sp
+The \fBllvm\-ar\fP command can be used to \fIread\fP SVR4, GNU and BSD style archive
+files. However, right now it can only write in the GNU format. If an
+SVR4 or BSD style archive is used with the \fBr\fP (replace) or \fBq\fP (quick
+update) operations, the archive will be reconstructed in GNU format.
+.sp
+Here\(aqs where \fBllvm\-ar\fP departs from previous \fBar\fP implementations:
+.sp
+\fISymbol Table\fP
+.INDENT 0.0
+.INDENT 3.5
+Since \fBllvm\-ar\fP supports bitcode files. The symbol table it creates
+is in GNU format and includes both native and bitcode files.
+.UNINDENT
+.UNINDENT
+.sp
+\fILong Paths\fP
+.INDENT 0.0
+.INDENT 3.5
+Currently \fBllvm\-ar\fP can read GNU and BSD long file names, but only writes
+archives with the GNU format.
+.UNINDENT
+.UNINDENT
+.SH OPTIONS
+.sp
+The options to \fBllvm\-ar\fP are compatible with other \fBar\fP implementations.
+However, there are a few modifiers (\fIR\fP) that are not found in other \fBar\fP
+implementations. The options to \fBllvm\-ar\fP specify a single basic operation to
+perform on the archive, a variety of modifiers for that operation, the name of
+the archive file, and an optional list of file names. These options are used to
+determine how \fBllvm\-ar\fP should process the archive file.
+.sp
+The Operations and Modifiers are explained in the sections below. The minimal
+set of options is at least one operator and the name of the archive. Typically
+archive files end with a \fB\&.a\fP suffix, but this is not required. Following
+the \fIarchive\-name\fP comes a list of \fIfiles\fP that indicate the specific members
+of the archive to operate on. If the \fIfiles\fP option is not specified, it
+generally means either "none" or "all" members, depending on the operation.
+.SS Operations
+.sp
+d
+.INDENT 0.0
+.INDENT 3.5
+Delete files from the archive. No modifiers are applicable to this operation.
+The \fIfiles\fP options specify which members should be removed from the
+archive. It is not an error if a specified file does not appear in the archive.
+If no \fIfiles\fP are specified, the archive is not modified.
+.UNINDENT
+.UNINDENT
+.sp
+m[abi]
+.INDENT 0.0
+.INDENT 3.5
+Move files from one location in the archive to another. The \fIa\fP, \fIb\fP, and
+\fIi\fP modifiers apply to this operation. The \fIfiles\fP will all be moved
+to the location given by the modifiers. If no modifiers are used, the files
+will be moved to the end of the archive. If no \fIfiles\fP are specified, the
+archive is not modified.
+.UNINDENT
+.UNINDENT
+.sp
+p
+.INDENT 0.0
+.INDENT 3.5
+Print files to the standard output. This operation simply prints the
+\fIfiles\fP indicated to the standard output. If no \fIfiles\fP are
+specified, the entire  archive is printed.  Printing bitcode files is
+ill\-advised as they might confuse your terminal settings. The \fIp\fP
+operation never modifies the archive.
+.UNINDENT
+.UNINDENT
+.sp
+q
+.INDENT 0.0
+.INDENT 3.5
+Quickly append files to the end of the archive.  This operation quickly adds the
+\fIfiles\fP to the archive without checking for duplicates that should be
+removed first. If no \fIfiles\fP are specified, the archive is not modified.
+Because of the way that \fBllvm\-ar\fP constructs the archive file, its dubious
+whether the \fIq\fP operation is any faster than the \fIr\fP operation.
+.UNINDENT
+.UNINDENT
+.sp
+r[abu]
+.INDENT 0.0
+.INDENT 3.5
+Replace or insert file members. The \fIa\fP, \fIb\fP,  and \fIu\fP
+modifiers apply to this operation. This operation will replace existing
+\fIfiles\fP or insert them at the end of the archive if they do not exist. If no
+\fIfiles\fP are specified, the archive is not modified.
+.UNINDENT
+.UNINDENT
+.sp
+t[v]
+.INDENT 0.0
+.INDENT 3.5
+Print the table of contents. Without any modifiers, this operation just prints
+the names of the members to the standard output. With the \fIv\fP modifier,
+\fBllvm\-ar\fP also prints out the file type (B=bitcode, S=symbol
+table, blank=regular file), the permission mode, the owner and group, the
+size, and the date. If any \fIfiles\fP are specified, the listing is only for
+those files. If no \fIfiles\fP are specified, the table of contents for the
+whole archive is printed.
+.UNINDENT
+.UNINDENT
+.sp
+x[oP]
+.INDENT 0.0
+.INDENT 3.5
+Extract archive members back to files. The \fIo\fP modifier applies to this
+operation. This operation retrieves the indicated \fIfiles\fP from the archive
+and writes them back to the operating system\(aqs file system. If no
+\fIfiles\fP are specified, the entire archive is extract.
+.UNINDENT
+.UNINDENT
+.SS Modifiers (operation specific)
+.sp
+The modifiers below are specific to certain operations. See the Operations
+section (above) to determine which modifiers are applicable to which operations.
+.sp
+[a]
+.INDENT 0.0
+.INDENT 3.5
+When inserting or moving member files, this option specifies the destination of
+the new files as being after the \fIrelpos\fP member. If \fIrelpos\fP is not found,
+the files are placed at the end of the archive.
+.UNINDENT
+.UNINDENT
+.sp
+[b]
+.INDENT 0.0
+.INDENT 3.5
+When inserting or moving member files, this option specifies the destination of
+the new files as being before the \fIrelpos\fP member. If \fIrelpos\fP is not
+found, the files are placed at the end of the archive. This modifier is
+identical to the \fIi\fP modifier.
+.UNINDENT
+.UNINDENT
+.sp
+[i]
+.INDENT 0.0
+.INDENT 3.5
+A synonym for the \fIb\fP option.
+.UNINDENT
+.UNINDENT
+.sp
+[o]
+.INDENT 0.0
+.INDENT 3.5
+When extracting files, this option will cause \fBllvm\-ar\fP to preserve the
+original modification times of the files it writes.
+.UNINDENT
+.UNINDENT
+.sp
+[u]
+.INDENT 0.0
+.INDENT 3.5
+When replacing existing files in the archive, only replace those files that have
+a time stamp than the time stamp of the member in the archive.
+.UNINDENT
+.UNINDENT
+.SS Modifiers (generic)
+.sp
+The modifiers below may be applied to any operation.
+.sp
+[c]
+.INDENT 0.0
+.INDENT 3.5
+For all operations, \fBllvm\-ar\fP will always create the archive if it doesn\(aqt
+exist. Normally, \fBllvm\-ar\fP will print a warning message indicating that the
+archive is being created. Using this modifier turns off that warning.
+.UNINDENT
+.UNINDENT
+.sp
+[s]
+.INDENT 0.0
+.INDENT 3.5
+This modifier requests that an archive index (or symbol table) be added to the
+archive. This is the default mode of operation. The symbol table will contain
+all the externally visible functions and global variables defined by all the
+bitcode files in the archive.
+.UNINDENT
+.UNINDENT
+.sp
+[S]
+.INDENT 0.0
+.INDENT 3.5
+This modifier is the opposite of the \fIs\fP modifier. It instructs \fBllvm\-ar\fP to
+not build the symbol table. If both \fIs\fP and \fIS\fP are used, the last modifier to
+occur in the options will prevail.
+.UNINDENT
+.UNINDENT
+.sp
+[v]
+.INDENT 0.0
+.INDENT 3.5
+This modifier instructs \fBllvm\-ar\fP to be verbose about what it is doing. Each
+editing operation taken against the archive will produce a line of output saying
+what is being done.
+.UNINDENT
+.UNINDENT
+.SH STANDARDS
+.sp
+The \fBllvm\-ar\fP utility is intended to provide a superset of the IEEE Std 1003.2
+(POSIX.2) functionality for \fBar\fP\&. \fBllvm\-ar\fP can read both SVR4 and BSD4.4 (or
+Mac OS X) archives. If the \fBf\fP modifier is given to the \fBx\fP or \fBr\fP operations
+then \fBllvm\-ar\fP will write SVR4 compatible archives. Without this modifier,
+\fBllvm\-ar\fP will write BSD4.4 compatible archives that have long names
+immediately after the header and indicated using the "#1/ddd" notation for the
+name in the header.
+.SH FILE FORMAT
+.sp
+The file format for LLVM Archive files is similar to that of BSD 4.4 or Mac OSX
+archive files. In fact, except for the symbol table, the \fBar\fP commands on those
+operating systems should be able to read LLVM archive files. The details of the
+file format follow.
+.sp
+Each archive begins with the archive magic number which is the eight printable
+characters "!<arch>n" where n represents the newline character (0x0A).
+Following the magic number, the file is composed of even length members that
+begin with an archive header and end with a n padding character if necessary
+(to make the length even). Each file member is composed of a header (defined
+below), an optional newline\-terminated "long file name" and the contents of
+the file.
+.sp
+The fields of the header are described in the items below. All fields of the
+header contain only ASCII characters, are left justified and are right padded
+with space characters.
+.sp
+name \- char[16]
+.INDENT 0.0
+.INDENT 3.5
+This field of the header provides the name of the archive member. If the name is
+longer than 15 characters or contains a slash (/) character, then this field
+contains \fB#1/nnn\fP where \fBnnn\fP provides the length of the name and the \fB#1/\fP
+is literal.  In this case, the actual name of the file is provided in the \fBnnn\fP
+bytes immediately following the header. If the name is 15 characters or less, it
+is contained directly in this field and terminated with a slash (/) character.
+.UNINDENT
+.UNINDENT
+.sp
+date \- char[12]
+.INDENT 0.0
+.INDENT 3.5
+This field provides the date of modification of the file in the form of a
+decimal encoded number that provides the number of seconds since the epoch
+(since 00:00:00 Jan 1, 1970) per Posix specifications.
+.UNINDENT
+.UNINDENT
+.sp
+uid \- char[6]
+.INDENT 0.0
+.INDENT 3.5
+This field provides the user id of the file encoded as a decimal ASCII string.
+This field might not make much sense on non\-Unix systems. On Unix, it is the
+same value as the st_uid field of the stat structure returned by the stat(2)
+operating system call.
+.UNINDENT
+.UNINDENT
+.sp
+gid \- char[6]
+.INDENT 0.0
+.INDENT 3.5
+This field provides the group id of the file encoded as a decimal ASCII string.
+This field might not make much sense on non\-Unix systems. On Unix, it is the
+same value as the st_gid field of the stat structure returned by the stat(2)
+operating system call.
+.UNINDENT
+.UNINDENT
+.sp
+mode \- char[8]
+.INDENT 0.0
+.INDENT 3.5
+This field provides the access mode of the file encoded as an octal ASCII
+string. This field might not make much sense on non\-Unix systems. On Unix, it
+is the same value as the st_mode field of the stat structure returned by the
+stat(2) operating system call.
+.UNINDENT
+.UNINDENT
+.sp
+size \- char[10]
+.INDENT 0.0
+.INDENT 3.5
+This field provides the size of the file, in bytes, encoded as a decimal ASCII
+string.
+.UNINDENT
+.UNINDENT
+.sp
+fmag \- char[2]
+.INDENT 0.0
+.INDENT 3.5
+This field is the archive file member magic number. Its content is always the
+two characters back tick (0x60) and newline (0x0A). This provides some measure
+utility in identifying archive files that have been corrupted.
+.UNINDENT
+.UNINDENT
+.sp
+offset \- vbr encoded 32\-bit integer
+.INDENT 0.0
+.INDENT 3.5
+The offset item provides the offset into the archive file where the bitcode
+member is stored that is associated with the symbol. The offset value is 0
+based at the start of the first "normal" file member. To derive the actual
+file offset of the member, you must add the number of bytes occupied by the file
+signature (8 bytes) and the symbol tables. The value of this item is encoded
+using variable bit rate encoding to reduce the size of the symbol table.
+Variable bit rate encoding uses the high bit (0x80) of each byte to indicate
+if there are more bytes to follow. The remaining 7 bits in each byte carry bits
+from the value. The final byte does not have the high bit set.
+.UNINDENT
+.UNINDENT
+.sp
+length \- vbr encoded 32\-bit integer
+.INDENT 0.0
+.INDENT 3.5
+The length item provides the length of the symbol that follows. Like this
+\fIoffset\fP item, the length is variable bit rate encoded.
+.UNINDENT
+.UNINDENT
+.sp
+symbol \- character array
+.INDENT 0.0
+.INDENT 3.5
+The symbol item provides the text of the symbol that is associated with the
+\fIoffset\fP\&. The symbol is not terminated by any character. Its length is provided
+by the \fIlength\fP field. Note that is allowed (but unwise) to use non\-printing
+characters (even 0x00) in the symbol. This allows for multiple encodings of
+symbol names.
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllvm\-ar\fP succeeds, it will exit with 0.  A usage error, results
+in an exit code of 1. A hard (file system typically) error results in an
+exit code of 2. Miscellaneous or unknown errors result in an
+exit code of 3.
+.SH SEE ALSO
+.sp
+ar(1)
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-as.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,86 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-AS" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-as \- LLVM assembler
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-as\fP [\fIoptions\fP] [\fIfilename\fP]
+.SH DESCRIPTION
+.sp
+\fBllvm\-as\fP is the LLVM assembler.  It reads a file containing human\-readable
+LLVM assembly language, translates it to LLVM bitcode, and writes the result
+into a file or to standard output.
+.sp
+If \fIfilename\fP is omitted or is \fB\-\fP, then \fBllvm\-as\fP reads its input from
+standard input.
+.sp
+If an output file is not specified with the \fB\-o\fP option, then
+\fBllvm\-as\fP sends its output to a file or standard output by following
+these rules:
+.INDENT 0.0
+.IP \(bu 2
+If the input is standard input, then the output is standard output.
+.IP \(bu 2
+If the input is a file that ends with \fB\&.ll\fP, then the output file is of the
+same name, except that the suffix is changed to \fB\&.bc\fP\&.
+.IP \(bu 2
+If the input is a file that does not end with the \fB\&.ll\fP suffix, then the
+output file has the same name as the input file, except that the \fB\&.bc\fP
+suffix is appended.
+.UNINDENT
+.SH OPTIONS
+.INDENT 0.0
+.TP
+\fB\-f\fP
+Enable binary output on terminals.  Normally, \fBllvm\-as\fP will refuse to
+write raw bitcode output if the output stream is a terminal. With this option,
+\fBllvm\-as\fP will write raw bitcode regardless of the output device.
+.TP
+\fB\-help\fP
+Print a summary of command line options.
+.TP
+\fB\-o\fP \fIfilename\fP
+Specify the output file name.  If \fIfilename\fP is \fB\-\fP, then \fBllvm\-as\fP
+sends its output to standard output.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllvm\-as\fP succeeds, it will exit with 0.  Otherwise, if an error occurs, it
+will exit with a non\-zero value.
+.SH SEE ALSO
+.sp
+llvm\-dis|llvm\-dis, gccas|gccas
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-bcanalyzer.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,475 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-BCANALYZER" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-bcanalyzer \- LLVM bitcode analyzer
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-bcanalyzer\fP [\fIoptions\fP] [\fIfilename\fP]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-bcanalyzer\fP command is a small utility for analyzing bitcode
+files.  The tool reads a bitcode file (such as generated with the
+\fBllvm\-as\fP tool) and produces a statistical report on the contents of
+the bitcode file.  The tool can also dump a low level but human readable
+version of the bitcode file.  This tool is probably not of much interest or
+utility except for those working directly with the bitcode file format.  Most
+LLVM users can just ignore this tool.
+.sp
+If \fIfilename\fP is omitted or is \fB\-\fP, then \fBllvm\-bcanalyzer\fP reads its
+input from standard input.  This is useful for combining the tool into a
+pipeline.  Output is written to the standard output.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-nodetails
+Causes \fBllvm\-bcanalyzer\fP to abbreviate its output by writing out only
+a module level summary.  The details for individual functions are not
+displayed.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-dump
+Causes \fBllvm\-bcanalyzer\fP to dump the bitcode in a human readable
+format.  This format is significantly different from LLVM assembly and
+provides details about the encoding of the bitcode file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-verify
+Causes \fBllvm\-bcanalyzer\fP to verify the module produced by reading the
+bitcode.  This ensures that the statistics generated are based on a consistent
+module.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllvm\-bcanalyzer\fP succeeds, it will exit with 0.  Otherwise, if an
+error occurs, it will exit with a non\-zero value, usually 1.
+.SH SUMMARY OUTPUT DEFINITIONS
+.sp
+The following items are always printed by llvm\-bcanalyzer.  They comprize the
+summary output.
+.sp
+\fBBitcode Analysis Of Module\fP
+.INDENT 0.0
+.INDENT 3.5
+This just provides the name of the module for which bitcode analysis is being
+generated.
+.UNINDENT
+.UNINDENT
+.sp
+\fBBitcode Version Number\fP
+.INDENT 0.0
+.INDENT 3.5
+The bitcode version (not LLVM version) of the file read by the analyzer.
+.UNINDENT
+.UNINDENT
+.sp
+\fBFile Size\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of the entire bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBModule Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of the module block.  Percentage is relative to File Size.
+.UNINDENT
+.UNINDENT
+.sp
+\fBFunction Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of all the function blocks.  Percentage is relative to File
+Size.
+.UNINDENT
+.UNINDENT
+.sp
+\fBGlobal Types Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of the Global Types Pool.  Percentage is relative to File
+Size.  This is the size of the definitions of all types in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBConstant Pool Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of the Constant Pool Blocks Percentage is relative to File
+Size.
+.UNINDENT
+.UNINDENT
+.sp
+\fBModule Globals Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+Ths size, in bytes, of the Global Variable Definitions and their initializers.
+Percentage is relative to File Size.
+.UNINDENT
+.UNINDENT
+.sp
+\fBInstruction List Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of all the instruction lists in all the functions.
+Percentage is relative to File Size.  Note that this value is also included in
+the Function Bytes.
+.UNINDENT
+.UNINDENT
+.sp
+\fBCompaction Table Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of all the compaction tables in all the functions.
+Percentage is relative to File Size.  Note that this value is also included in
+the Function Bytes.
+.UNINDENT
+.UNINDENT
+.sp
+\fBSymbol Table Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of all the symbol tables in all the functions.  Percentage is
+relative to File Size.  Note that this value is also included in the Function
+Bytes.
+.UNINDENT
+.UNINDENT
+.sp
+\fBDependent Libraries Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The size, in bytes, of the list of dependent libraries in the module.  Percentage
+is relative to File Size.  Note that this value is also included in the Module
+Global Bytes.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Bitcode Blocks\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of blocks of any kind in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Functions\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of function definitions in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Types\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of types defined in the Global Types Pool.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Constants\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of constants (of any type) defined in the Constant Pool.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Basic Blocks\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of basic blocks defined in all functions in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Instructions\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of instructions defined in all functions in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Long Instructions\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of long instructions defined in all functions in the bitcode
+file.  Long instructions are those taking greater than 4 bytes.  Typically long
+instructions are GetElementPtr with several indices, PHI nodes, and calls to
+functions with large numbers of arguments.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Operands\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of operands used in all instructions in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Compaction Tables\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of compaction tables in all functions in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Symbol Tables\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of symbol tables in all functions in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber Of Dependent Libs\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of dependent libraries found in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBTotal Instruction Size\fP
+.INDENT 0.0
+.INDENT 3.5
+The total size of the instructions in all functions in the bitcode file.
+.UNINDENT
+.UNINDENT
+.sp
+\fBAverage Instruction Size\fP
+.INDENT 0.0
+.INDENT 3.5
+The average number of bytes per instruction across all functions in the bitcode
+file.  This value is computed by dividing Total Instruction Size by Number Of
+Instructions.
+.UNINDENT
+.UNINDENT
+.sp
+\fBMaximum Type Slot Number\fP
+.INDENT 0.0
+.INDENT 3.5
+The maximum value used for a type\(aqs slot number.  Larger slot number values take
+more bytes to encode.
+.UNINDENT
+.UNINDENT
+.sp
+\fBMaximum Value Slot Number\fP
+.INDENT 0.0
+.INDENT 3.5
+The maximum value used for a value\(aqs slot number.  Larger slot number values take
+more bytes to encode.
+.UNINDENT
+.UNINDENT
+.sp
+\fBBytes Per Value\fP
+.INDENT 0.0
+.INDENT 3.5
+The average size of a Value definition (of any type).  This is computed by
+dividing File Size by the total number of values of any type.
+.UNINDENT
+.UNINDENT
+.sp
+\fBBytes Per Global\fP
+.INDENT 0.0
+.INDENT 3.5
+The average size of a global definition (constants and global variables).
+.UNINDENT
+.UNINDENT
+.sp
+\fBBytes Per Function\fP
+.INDENT 0.0
+.INDENT 3.5
+The average number of bytes per function definition.  This is computed by
+dividing Function Bytes by Number Of Functions.
+.UNINDENT
+.UNINDENT
+.sp
+\fB# of VBR 32\-bit Integers\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of 32\-bit integers encoded using the Variable Bit Rate
+encoding scheme.
+.UNINDENT
+.UNINDENT
+.sp
+\fB# of VBR 64\-bit Integers\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of 64\-bit integers encoded using the Variable Bit Rate encoding
+scheme.
+.UNINDENT
+.UNINDENT
+.sp
+\fB# of VBR Compressed Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of bytes consumed by the 32\-bit and 64\-bit integers that use
+the Variable Bit Rate encoding scheme.
+.UNINDENT
+.UNINDENT
+.sp
+\fB# of VBR Expanded Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of bytes that would have been consumed by the 32\-bit and 64\-bit
+integers had they not been compressed with the Variable Bit Rage encoding
+scheme.
+.UNINDENT
+.UNINDENT
+.sp
+\fBBytes Saved With VBR\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of bytes saved by using the Variable Bit Rate encoding scheme.
+The percentage is relative to # of VBR Expanded Bytes.
+.UNINDENT
+.UNINDENT
+.SH DETAILED OUTPUT DEFINITIONS
+.sp
+The following definitions occur only if the \-nodetails option was not given.
+The detailed output provides additional information on a per\-function basis.
+.sp
+\fBType\fP
+.INDENT 0.0
+.INDENT 3.5
+The type signature of the function.
+.UNINDENT
+.UNINDENT
+.sp
+\fBByte Size\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of bytes in the function\(aqs block.
+.UNINDENT
+.UNINDENT
+.sp
+\fBBasic Blocks\fP
+.INDENT 0.0
+.INDENT 3.5
+The number of basic blocks defined by the function.
+.UNINDENT
+.UNINDENT
+.sp
+\fBInstructions\fP
+.INDENT 0.0
+.INDENT 3.5
+The number of instructions defined by the function.
+.UNINDENT
+.UNINDENT
+.sp
+\fBLong Instructions\fP
+.INDENT 0.0
+.INDENT 3.5
+The number of instructions using the long instruction format in the function.
+.UNINDENT
+.UNINDENT
+.sp
+\fBOperands\fP
+.INDENT 0.0
+.INDENT 3.5
+The number of operands used by all instructions in the function.
+.UNINDENT
+.UNINDENT
+.sp
+\fBInstruction Size\fP
+.INDENT 0.0
+.INDENT 3.5
+The number of bytes consumed by instructions in the function.
+.UNINDENT
+.UNINDENT
+.sp
+\fBAverage Instruction Size\fP
+.INDENT 0.0
+.INDENT 3.5
+The average number of bytes consumed by the instructions in the function.
+This value is computed by dividing Instruction Size by Instructions.
+.UNINDENT
+.UNINDENT
+.sp
+\fBBytes Per Instruction\fP
+.INDENT 0.0
+.INDENT 3.5
+The average number of bytes used by the function per instruction.  This value
+is computed by dividing Byte Size by Instructions.  Note that this is not the
+same as Average Instruction Size.  It computes a number relative to the total
+function size not just the size of the instruction list.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber of VBR 32\-bit Integers\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of 32\-bit integers found in this function (for any use).
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber of VBR 64\-bit Integers\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of 64\-bit integers found in this function (for any use).
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber of VBR Compressed Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of bytes in this function consumed by the 32\-bit and 64\-bit
+integers that use the Variable Bit Rate encoding scheme.
+.UNINDENT
+.UNINDENT
+.sp
+\fBNumber of VBR Expanded Bytes\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of bytes in this function that would have been consumed by
+the 32\-bit and 64\-bit integers had they not been compressed with the Variable
+Bit Rate encoding scheme.
+.UNINDENT
+.UNINDENT
+.sp
+\fBBytes Saved With VBR\fP
+.INDENT 0.0
+.INDENT 3.5
+The total number of bytes saved in this function by using the Variable Bit
+Rate encoding scheme.  The percentage is relative to # of VBR Expanded Bytes.
+.UNINDENT
+.UNINDENT
+.SH SEE ALSO
+.sp
+/CommandGuide/llvm\-dis, /BitCodeFormat
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-build.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,129 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-BUILD" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-build \- LLVM Project Build Utility
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-build\fP [\fIoptions\fP]
+.SH DESCRIPTION
+.sp
+\fBllvm\-build\fP is a tool for working with LLVM projects that use the LLVMBuild
+system for describing their components.
+.sp
+At heart, \fBllvm\-build\fP is responsible for loading, verifying, and manipulating
+the project\(aqs component data. The tool is primarily designed for use in
+implementing build systems and tools which need access to the project structure
+information.
+.SH OPTIONS
+.sp
+\fB\-h\fP, \fB\-\-help\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the builtin program help.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-source\-root\fP=\fIPATH\fP
+.INDENT 0.0
+.INDENT 3.5
+If given, load the project at the given source root path. If this option is not
+given, the location of the project sources will be inferred from the location of
+the \fBllvm\-build\fP script itself.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-print\-tree\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the component tree for the project.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-write\-library\-table\fP
+.INDENT 0.0
+.INDENT 3.5
+Write out the C++ fragment which defines the components, library names, and
+required libraries. This C++ fragment is built into llvm\-config|llvm\-config
+in order to provide clients with the list of required libraries for arbitrary
+component combinations.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-write\-llvmbuild\fP
+.INDENT 0.0
+.INDENT 3.5
+Write out new \fILLVMBuild.txt\fP files based on the loaded components. This is
+useful for auto\-upgrading the schema of the files. \fBllvm\-build\fP will try to a
+limited extent to preserve the comments which were written in the original
+source file, although at this time it only preserves block comments that precede
+the section names in the \fILLVMBuild\fP files.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-write\-cmake\-fragment\fP
+.INDENT 0.0
+.INDENT 3.5
+Write out the LLVMBuild in the form of a CMake fragment, so it can easily be
+consumed by the CMake based build system. The exact contents and format of this
+file are closely tied to how LLVMBuild is integrated with CMake, see LLVM\(aqs
+top\-level CMakeLists.txt.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-write\-make\-fragment\fP
+.INDENT 0.0
+.INDENT 3.5
+Write out the LLVMBuild in the form of a Makefile fragment, so it can easily be
+consumed by a Make based build system. The exact contents and format of this
+file are closely tied to how LLVMBuild is integrated with the Makefiles, see
+LLVM\(aqs Makefile.rules.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-llvmbuild\-source\-root\fP=\fIPATH\fP
+.INDENT 0.0
+.INDENT 3.5
+If given, expect the \fILLVMBuild\fP files for the project to be rooted at the
+given path, instead of inside the source tree itself. This option is primarily
+designed for use in conjunction with \fB\-\-write\-llvmbuild\fP to test changes to
+\fILLVMBuild\fP schema.
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBllvm\-build\fP exits with 0 if operation was successful. Otherwise, it will exist
+with a non\-zero value.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-config.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,209 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-CONFIG" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-config \- Print LLVM compilation options
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-config\fP \fIoption\fP [\fIcomponents\fP\&...]
+.SH DESCRIPTION
+.sp
+\fBllvm\-config\fP makes it easier to build applications that use LLVM.  It can
+print the compiler flags, linker flags and object libraries needed to link
+against LLVM.
+.SH EXAMPLES
+.sp
+To link against the JIT:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+g++ \(gallvm\-config \-\-cxxflags\(ga \-o HowToUseJIT.o \-c HowToUseJIT.cpp
+g++ \(gallvm\-config \-\-ldflags\(ga \-o HowToUseJIT HowToUseJIT.o \e
+    \(gallvm\-config \-\-libs engine bcreader scalaropts\(ga
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SH OPTIONS
+.sp
+\fB\-\-version\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the version number of LLVM.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-help\fP
+.INDENT 0.0
+.INDENT 3.5
+Print a summary of \fBllvm\-config\fP arguments.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-prefix\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the installation prefix for LLVM.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-src\-root\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the source root from which LLVM was built.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-obj\-root\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the object root used to build LLVM.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-bindir\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the installation directory for LLVM binaries.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-includedir\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the installation directory for LLVM headers.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-libdir\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the installation directory for LLVM libraries.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-cxxflags\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the C++ compiler flags needed to use LLVM headers.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-ldflags\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the flags needed to link against LLVM libraries.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-libs\fP
+.INDENT 0.0
+.INDENT 3.5
+Print all the libraries needed to link against the specified LLVM
+\fIcomponents\fP, including any dependencies.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-libnames\fP
+.INDENT 0.0
+.INDENT 3.5
+Similar to \fB\-\-libs\fP, but prints the bare filenames of the libraries
+without \fB\-l\fP or pathnames.  Useful for linking against a not\-yet\-installed
+copy of LLVM.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-libfiles\fP
+.INDENT 0.0
+.INDENT 3.5
+Similar to \fB\-\-libs\fP, but print the full path to each library file.  This is
+useful when creating makefile dependencies, to ensure that a tool is relinked if
+any library it uses changes.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-components\fP
+.INDENT 0.0
+.INDENT 3.5
+Print all valid component names.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-targets\-built\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the component names for all targets supported by this copy of LLVM.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-build\-mode\fP
+.INDENT 0.0
+.INDENT 3.5
+Print the build mode used when LLVM was built (e.g. Debug or Release)
+.UNINDENT
+.UNINDENT
+.SH COMPONENTS
+.sp
+To print a list of all available components, run \fBllvm\-config
+\-\-components\fP\&.  In most cases, components correspond directly to LLVM
+libraries.  Useful "virtual" components include:
+.sp
+\fBall\fP
+.INDENT 0.0
+.INDENT 3.5
+Includes all LLVM libraries.  The default if no components are specified.
+.UNINDENT
+.UNINDENT
+.sp
+\fBbackend\fP
+.INDENT 0.0
+.INDENT 3.5
+Includes either a native backend or the C backend.
+.UNINDENT
+.UNINDENT
+.sp
+\fBengine\fP
+.INDENT 0.0
+.INDENT 3.5
+Includes either a native JIT or the bitcode interpreter.
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllvm\-config\fP succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non\-zero value.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-cov.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,318 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-COV" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-cov \- emit coverage information
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-cov\fP \fIcommand\fP [\fIargs...\fP]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-cov\fP tool shows code coverage information for
+programs that are instrumented to emit profile data. It can be used to
+work with \fBgcov\fP\-style coverage or with \fBclang\fP\(aqs instrumentation
+based profiling.
+.sp
+If the program is invoked with a base name of \fBgcov\fP, it will behave as if
+the \fBllvm\-cov gcov\fP command were called. Otherwise, a command should
+be provided.
+.SH COMMANDS
+.INDENT 0.0
+.IP \(bu 2
+\fI\%gcov\fP
+.IP \(bu 2
+\fI\%show\fP
+.IP \(bu 2
+\fI\%report\fP
+.UNINDENT
+.SH GCOV COMMAND
+.SS SYNOPSIS
+.sp
+\fBllvm\-cov gcov\fP [\fIoptions\fP] \fISOURCEFILE\fP
+.SS DESCRIPTION
+.sp
+The \fBllvm\-cov gcov\fP tool reads code coverage data files and displays
+the coverage information for a specified source file. It is compatible with the
+\fBgcov\fP tool from version 4.2 of \fBGCC\fP and may also be compatible with some
+later versions of \fBgcov\fP\&.
+.sp
+To use \fBllvm\-cov gcov\fP, you must first build an instrumented version
+of your application that collects coverage data as it runs. Compile with the
+\fB\-fprofile\-arcs\fP and \fB\-ftest\-coverage\fP options to add the
+instrumentation. (Alternatively, you can use the \fB\-\-coverage\fP option, which
+includes both of those other options.) You should compile with debugging
+information (\fB\-g\fP) and without optimization (\fB\-O0\fP); otherwise, the
+coverage data cannot be accurately mapped back to the source code.
+.sp
+At the time you compile the instrumented code, a \fB\&.gcno\fP data file will be
+generated for each object file. These \fB\&.gcno\fP files contain half of the
+coverage data. The other half of the data comes from \fB\&.gcda\fP files that are
+generated when you run the instrumented program, with a separate \fB\&.gcda\fP
+file for each object file. Each time you run the program, the execution counts
+are summed into any existing \fB\&.gcda\fP files, so be sure to remove any old
+files if you do not want their contents to be included.
+.sp
+By default, the \fB\&.gcda\fP files are written into the same directory as the
+object files, but you can override that by setting the \fBGCOV_PREFIX\fP and
+\fBGCOV_PREFIX_STRIP\fP environment variables. The \fBGCOV_PREFIX_STRIP\fP
+variable specifies a number of directory components to be removed from the
+start of the absolute path to the object file directory. After stripping those
+directories, the prefix from the \fBGCOV_PREFIX\fP variable is added. These
+environment variables allow you to run the instrumented program on a machine
+where the original object file directories are not accessible, but you will
+then need to copy the \fB\&.gcda\fP files back to the object file directories
+where \fBllvm\-cov gcov\fP expects to find them.
+.sp
+Once you have generated the coverage data files, run \fBllvm\-cov gcov\fP
+for each main source file where you want to examine the coverage results. This
+should be run from the same directory where you previously ran the
+compiler. The results for the specified source file are written to a file named
+by appending a \fB\&.gcov\fP suffix. A separate output file is also created for
+each file included by the main source file, also with a \fB\&.gcov\fP suffix added.
+.sp
+The basic content of an \fB\&.gcov\fP output file is a copy of the source file with
+an execution count and line number prepended to every line. The execution
+count is shown as \fB\-\fP if a line does not contain any executable code. If
+a line contains code but that code was never executed, the count is displayed
+as \fB#####\fP\&.
+.SS OPTIONS
+.INDENT 0.0
+.TP
+.B \-a, \-\-all\-blocks
+Display all basic blocks. If there are multiple blocks for a single line of
+source code, this option causes llvm\-cov to show the count for each block
+instead of just one count for the entire line.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-b, \-\-branch\-probabilities
+Display conditional branch probabilities and a summary of branch information.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-c, \-\-branch\-counts
+Display branch counts instead of probabilities (requires \-b).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-f, \-\-function\-summaries
+Show a summary of coverage for each function instead of just one summary for
+an entire source file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-help
+Display available options (\-\-help\-hidden for more).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-l, \-\-long\-file\-names
+For coverage output of files included from the main source file, add the
+main file name followed by \fB##\fP as a prefix to the output file names. This
+can be combined with the \-\-preserve\-paths option to use complete paths for
+both the main file and the included file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-n, \-\-no\-output
+Do not output any \fB\&.gcov\fP files. Summary information is still
+displayed.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-o=<DIR|FILE>, \-\-object\-directory=<DIR>, \-\-object\-file=<FILE>
+Find objects in DIR or based on FILE\(aqs path. If you specify a particular
+object file, the coverage data files are expected to have the same base name
+with \fB\&.gcno\fP and \fB\&.gcda\fP extensions. If you specify a directory, the
+files are expected in that directory with the same base name as the source
+file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-p, \-\-preserve\-paths
+Preserve path components when naming the coverage output files. In addition
+to the source file name, include the directories from the path to that
+file. The directories are separate by \fB#\fP characters, with \fB\&.\fP directories
+removed and \fB\&..\fP directories replaced by \fB^\fP characters. When used with
+the \-\-long\-file\-names option, this applies to both the main file name and the
+included file name.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-u, \-\-unconditional\-branches
+Include unconditional branches in the output for the \-\-branch\-probabilities
+option.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-version
+Display the version of llvm\-cov.
+.UNINDENT
+.SS EXIT STATUS
+.sp
+\fBllvm\-cov gcov\fP returns 1 if it cannot read input files.  Otherwise,
+it exits with zero.
+.SH SHOW COMMAND
+.SS SYNOPSIS
+.sp
+\fBllvm\-cov show\fP [\fIoptions\fP] \-instr\-profile \fIPROFILE\fP \fIBIN\fP [\fISOURCES\fP]
+.SS DESCRIPTION
+.sp
+The \fBllvm\-cov show\fP command shows line by line coverage of a binary
+\fIBIN\fP using the profile data \fIPROFILE\fP\&. It can optionally be filtered to only
+show the coverage for the files listed in \fISOURCES\fP\&.
+.sp
+To use \fBllvm\-cov show\fP, you need a program that is compiled with
+instrumentation to emit profile and coverage data. To build such a program with
+\fBclang\fP use the \fB\-fprofile\-instr\-generate\fP and \fB\-fcoverage\-mapping\fP
+flags. If linking with the \fBclang\fP driver, pass \fB\-fprofile\-instr\-generate\fP
+to the link stage to make sure the necessary runtime libraries are linked in.
+.sp
+The coverage information is stored in the built executable or library itself,
+and this is what you should pass to \fBllvm\-cov show\fP as the \fIBIN\fP
+argument. The profile data is generated by running this instrumented program
+normally. When the program exits it will write out a raw profile file,
+typically called \fBdefault.profraw\fP, which can be converted to a format that
+is suitable for the \fIPROFILE\fP argument using the \fBllvm\-profdata merge\fP
+tool.
+.SS OPTIONS
+.INDENT 0.0
+.TP
+.B \-show\-line\-counts
+Show the execution counts for each line. This is enabled by default, unless
+another \fB\-show\fP option is used.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-show\-expansions
+Expand inclusions, such as preprocessor macros or textual inclusions, inline
+in the display of the source file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-show\-instantiations
+For source regions that are instantiated multiple times, such as templates in
+\fBC++\fP, show each instantiation separately as well as the combined summary.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-show\-regions
+Show the execution counts for each region by displaying a caret that points to
+the character where the region starts.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-show\-line\-counts\-or\-regions
+Show the execution counts for each line if there is only one region on the
+line, but show the individual regions if there are multiple on the line.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-use\-color[=VALUE]
+Enable or disable color output. By default this is autodetected.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-arch=<name>
+If the covered binary is a universal binary, select the architecture to use.
+It is an error to specify an architecture that is not included in the
+universal binary or to use an architecture that does not match a
+non\-universal binary.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-name=<NAME>
+Show code coverage only for functions with the given name.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-name\-regex=<PATTERN>
+Show code coverage only for functions that match the given regular expression.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-line\-coverage\-gt=<N>
+Show code coverage only for functions with line coverage greater than the
+given threshold.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-line\-coverage\-lt=<N>
+Show code coverage only for functions with line coverage less than the given
+threshold.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-region\-coverage\-gt=<N>
+Show code coverage only for functions with region coverage greater than the
+given threshold.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-region\-coverage\-lt=<N>
+Show code coverage only for functions with region coverage less than the given
+threshold.
+.UNINDENT
+.SH REPORT COMMAND
+.SS SYNOPSIS
+.sp
+\fBllvm\-cov report\fP [\fIoptions\fP] \-instr\-profile \fIPROFILE\fP \fIBIN\fP [\fISOURCES\fP]
+.SS DESCRIPTION
+.sp
+The \fBllvm\-cov report\fP command displays a summary of the coverage of a
+binary \fIBIN\fP using the profile data \fIPROFILE\fP\&. It can optionally be filtered to
+only show the coverage for the files listed in \fISOURCES\fP\&.
+.sp
+If no source files are provided, a summary line is printed for each file in the
+coverage data. If any files are provided, summaries are shown for each function
+in the listed files instead.
+.sp
+For information on compiling programs for coverage and generating profile data,
+see \fI\%SHOW COMMAND\fP\&.
+.SS OPTIONS
+.INDENT 0.0
+.TP
+.B \-use\-color[=VALUE]
+Enable or disable color output. By default this is autodetected.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-arch=<name>
+If the covered binary is a universal binary, select the architecture to use.
+It is an error to specify an architecture that is not included in the
+universal binary or to use an architecture that does not match a
+non\-universal binary.
+.UNINDENT
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-diff.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,76 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-DIFF" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-diff \- LLVM structural 'diff'
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-diff\fP [\fIoptions\fP] \fImodule 1\fP \fImodule 2\fP [\fIglobal name ...\fP]
+.SH DESCRIPTION
+.sp
+\fBllvm\-diff\fP compares the structure of two LLVM modules, primarily
+focusing on differences in function definitions.  Insignificant
+differences, such as changes in the ordering of globals or in the
+names of local values, are ignored.
+.sp
+An input module will be interpreted as an assembly file if its name
+ends in \(aq.ll\(aq;  otherwise it will be read in as a bitcode file.
+.sp
+If a list of global names is given, just the values with those names
+are compared; otherwise, all global values are compared, and
+diagnostics are produced for globals which only appear in one module
+or the other.
+.sp
+\fBllvm\-diff\fP compares two functions by comparing their basic blocks,
+beginning with the entry blocks.  If the terminators seem to match,
+then the corresponding successors are compared; otherwise they are
+ignored.  This algorithm is very sensitive to changes in control flow,
+which tend to stop any downstream changes from being detected.
+.sp
+\fBllvm\-diff\fP is intended as a debugging tool for writers of LLVM
+passes and frontends.  It does not have a stable output format.
+.SH EXIT STATUS
+.sp
+If \fBllvm\-diff\fP finds no differences between the modules, it will exit
+with 0 and produce no output.  Otherwise it will exit with a non\-zero
+value.
+.SH BUGS
+.sp
+Many important differences, like changes in linkage or function
+attributes, are not diagnosed.
+.sp
+Changes in memory behavior (for example, coalescing loads) can cause
+massive detected differences in blocks.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-dis.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,87 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-DIS" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-dis \- LLVM disassembler
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-dis\fP [\fIoptions\fP] [\fIfilename\fP]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-dis\fP command is the LLVM disassembler.  It takes an LLVM
+bitcode file and converts it into human\-readable LLVM assembly language.
+.sp
+If filename is omitted or specified as \fB\-\fP, \fBllvm\-dis\fP reads its
+input from standard input.
+.sp
+If the input is being read from standard input, then \fBllvm\-dis\fP
+will send its output to standard output by default.  Otherwise, the
+output will be written to a file named after the input file, with
+a \fB\&.ll\fP suffix added (any existing \fB\&.bc\fP suffix will first be
+removed).  You can override the choice of output file using the
+\fB\-o\fP option.
+.SH OPTIONS
+.sp
+\fB\-f\fP
+.INDENT 0.0
+.INDENT 3.5
+Enable binary output on terminals.  Normally, \fBllvm\-dis\fP will refuse to
+write raw bitcode output if the output stream is a terminal. With this option,
+\fBllvm\-dis\fP will write raw bitcode regardless of the output device.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-help\fP
+.INDENT 0.0
+.INDENT 3.5
+Print a summary of command line options.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-o\fP \fIfilename\fP
+.INDENT 0.0
+.INDENT 3.5
+Specify the output file name.  If \fIfilename\fP is \-, then the output is sent
+to standard output.
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllvm\-dis\fP succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non\-zero value.
+.SH SEE ALSO
+.sp
+llvm\-as|llvm\-as
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-dwarfdump.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,59 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-DWARFDUMP" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-dwarfdump \- print contents of DWARF sections
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-dwarfdump\fP [\fIoptions\fP] [\fIfilenames...\fP]
+.SH DESCRIPTION
+.sp
+\fBllvm\-dwarfdump\fP parses DWARF sections in the object files
+and prints their contents in human\-readable form.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-debug\-dump=section
+Specify the DWARF section to dump.
+For example, use \fBabbrev\fP to dump the contents of \fB\&.debug_abbrev\fP section,
+\fBloc.dwo\fP to dump the contents of \fB\&.debug_loc.dwo\fP etc.
+See \fBllvm\-dwarfdump \-\-help\fP for the complete list of supported sections.
+Use \fBall\fP to dump all DWARF sections. It is the default.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBllvm\-dwarfdump\fP returns 0 if the input files were parsed and dumped
+successfully. Otherwise, it returns 1.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-extract.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,128 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-EXTRACT" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-extract \- extract a function from an LLVM module
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-extract\fP [\fIoptions\fP] \fB\-\-func\fP \fIfunction\-name\fP [\fIfilename\fP]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-extract\fP command takes the name of a function and extracts
+it from the specified LLVM bitcode file.  It is primarily used as a debugging
+tool to reduce test cases from larger programs that are triggering a bug.
+.sp
+In addition to extracting the bitcode of the specified function,
+\fBllvm\-extract\fP will also remove unreachable global variables,
+prototypes, and unused types.
+.sp
+The \fBllvm\-extract\fP command reads its input from standard input if
+filename is omitted or if filename is \fB\-\fP\&.  The output is always written to
+standard output, unless the \fB\-o\fP option is specified (see below).
+.SH OPTIONS
+.sp
+\fB\-f\fP
+.INDENT 0.0
+.INDENT 3.5
+Enable binary output on terminals.  Normally, \fBllvm\-extract\fP will
+refuse to write raw bitcode output if the output stream is a terminal.  With
+this option, \fBllvm\-extract\fP will write raw bitcode regardless of the
+output device.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-func\fP \fIfunction\-name\fP
+.INDENT 0.0
+.INDENT 3.5
+Extract the function named \fIfunction\-name\fP from the LLVM bitcode.  May be
+specified multiple times to extract multiple functions at once.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-rfunc\fP \fIfunction\-regular\-expr\fP
+.INDENT 0.0
+.INDENT 3.5
+Extract the function(s) matching \fIfunction\-regular\-expr\fP from the LLVM bitcode.
+All functions matching the regular expression will be extracted.  May be
+specified multiple times.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-glob\fP \fIglobal\-name\fP
+.INDENT 0.0
+.INDENT 3.5
+Extract the global variable named \fIglobal\-name\fP from the LLVM bitcode.  May be
+specified multiple times to extract multiple global variables at once.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-\-rglob\fP \fIglob\-regular\-expr\fP
+.INDENT 0.0
+.INDENT 3.5
+Extract the global variable(s) matching \fIglobal\-regular\-expr\fP from the LLVM
+bitcode.  All global variables matching the regular expression will be
+extracted.  May be specified multiple times.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-help\fP
+.INDENT 0.0
+.INDENT 3.5
+Print a summary of command line options.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-o\fP \fIfilename\fP
+.INDENT 0.0
+.INDENT 3.5
+Specify the output filename.  If filename is "\-" (the default), then
+\fBllvm\-extract\fP sends its output to standard output.
+.UNINDENT
+.UNINDENT
+.sp
+\fB\-S\fP
+.INDENT 0.0
+.INDENT 3.5
+Write output in LLVM intermediate language (instead of bitcode).
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllvm\-extract\fP succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non\-zero value.
+.SH SEE ALSO
+.sp
+bugpoint
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-lib.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,61 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-LIB" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-lib \- LLVM lib.exe compatible library tool
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-lib\fP [/libpath:<path>] [/out:<output>] [/llvmlibthin]
+[/ignore] [/machine] [/nologo] [files...]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-lib\fP command is intended to be a \fBlib.exe\fP compatible
+tool. See \fI\%https://msdn.microsoft.com/en\-us/library/7ykb2k5f\fP for the
+general description.
+.sp
+\fBllvm\-lib\fP has the following extensions:
+.INDENT 0.0
+.IP \(bu 2
+Bitcode files in symbol tables.
+\fBllvm\-lib\fP includes symbols from both bitcode files and regular
+object files in the symbol table.
+.IP \(bu 2
+Creating thin archives.
+The /llvmlibthin option causes \fBllvm\-lib\fP to create thin archive
+that contain only the symbol table and the header for the various
+members. These files are much smaller, but are not compatible with
+link.exe (lld can handle them).
+.UNINDENT
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-link.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,88 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-LINK" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-link \- LLVM bitcode linker
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-link\fP [\fIoptions\fP] \fIfilename ...\fP
+.SH DESCRIPTION
+.sp
+\fBllvm\-link\fP takes several LLVM bitcode files and links them together
+into a single LLVM bitcode file.  It writes the output file to standard output,
+unless the \fB\-o\fP option is used to specify a filename.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-f
+Enable binary output on terminals.  Normally, \fBllvm\-link\fP will refuse
+to write raw bitcode output if the output stream is a terminal. With this
+option, \fBllvm\-link\fP will write raw bitcode regardless of the output
+device.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-o filename
+Specify the output file name.  If \fBfilename\fP is "\fB\-\fP", then
+\fBllvm\-link\fP will write its output to standard output.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-S
+Write output in LLVM intermediate language (instead of bitcode).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-d
+If specified, \fBllvm\-link\fP prints a human\-readable version of the
+output bitcode file to standard error.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-v
+Verbose mode.  Print information about what \fBllvm\-link\fP is doing.
+This typically includes a message for each bitcode file linked in and for each
+library found.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBllvm\-link\fP succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non\-zero value.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-nm.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,212 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-NM" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-nm \- list LLVM bitcode and object file's symbol table
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-nm\fP [\fIoptions\fP] [\fIfilenames...\fP]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-nm\fP utility lists the names of symbols from the LLVM bitcode
+files, object files, or \fBar\fP archives containing them, named on the
+command line.  Each symbol is listed along with some simple information about
+its provenance.  If no file name is specified, or \fI\-\fP is used as a file name,
+\fBllvm\-nm\fP will process a file on its standard input stream.
+.sp
+\fBllvm\-nm\fP\(aqs default output format is the traditional BSD \fBnm\fP
+output format.  Each such output record consists of an (optional) 8\-digit
+hexadecimal address, followed by a type code character, followed by a name, for
+each symbol.  One record is printed per line; fields are separated by spaces.
+When the address is omitted, it is replaced by 8 spaces.
+.sp
+Type code characters currently supported, and their meanings, are as follows:
+.sp
+U
+.INDENT 0.0
+.INDENT 3.5
+Named object is referenced but undefined in this bitcode file
+.UNINDENT
+.UNINDENT
+.sp
+C
+.INDENT 0.0
+.INDENT 3.5
+Common (multiple definitions link together into one def)
+.UNINDENT
+.UNINDENT
+.sp
+W
+.INDENT 0.0
+.INDENT 3.5
+Weak reference (multiple definitions link together into zero or one definitions)
+.UNINDENT
+.UNINDENT
+.sp
+t
+.INDENT 0.0
+.INDENT 3.5
+Local function (text) object
+.UNINDENT
+.UNINDENT
+.sp
+T
+.INDENT 0.0
+.INDENT 3.5
+Global function (text) object
+.UNINDENT
+.UNINDENT
+.sp
+d
+.INDENT 0.0
+.INDENT 3.5
+Local data object
+.UNINDENT
+.UNINDENT
+.sp
+D
+.INDENT 0.0
+.INDENT 3.5
+Global data object
+.UNINDENT
+.UNINDENT
+.sp
+?
+.INDENT 0.0
+.INDENT 3.5
+Something unrecognizable
+.UNINDENT
+.UNINDENT
+.sp
+Because LLVM bitcode files typically contain objects that are not considered to
+have addresses until they are linked into an executable image or dynamically
+compiled "just\-in\-time", \fBllvm\-nm\fP does not print an address for any
+symbol in an LLVM bitcode file, even symbols which are defined in the bitcode
+file.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-B    (default)
+Use BSD output format.  Alias for \fB\-\-format=bsd\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-P
+Use POSIX.2 output format.  Alias for \fB\-\-format=posix\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-debug\-syms, \-a
+Show all symbols, even debugger only.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-defined\-only
+Print only symbols defined in this file (as opposed to
+symbols which may be referenced by objects in this file, but not
+defined in this file.)
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-dynamic, \-D
+Display dynamic symbols instead of normal symbols.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-extern\-only, \-g
+Print only symbols whose definitions are external; that is, accessible
+from other files.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-format=format, \-f format
+Select an output format; \fIformat\fP may be \fIsysv\fP, \fIposix\fP, or \fIbsd\fP\&.  The default
+is \fIbsd\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command\-line options and their meanings.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-no\-sort, \-p
+Shows symbols in order encountered.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-numeric\-sort, \-n, \-v
+Sort symbols by address.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-print\-file\-name, \-A, \-o
+Precede each symbol with the file it came from.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-print\-size, \-S
+Show symbol size instead of address.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-size\-sort
+Sort symbols by size.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-undefined\-only, \-u
+Print only symbols referenced but not defined in this file.
+.UNINDENT
+.SH BUGS
+.INDENT 0.0
+.INDENT 3.5
+.INDENT 0.0
+.IP \(bu 2
+\fBllvm\-nm\fP cannot demangle C++ mangled names, like GNU \fBnm\fP
+can.
+.IP \(bu 2
+\fBllvm\-nm\fP does not support the full set of arguments that GNU
+\fBnm\fP does.
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBllvm\-nm\fP exits with an exit code of zero.
+.SH SEE ALSO
+.sp
+llvm\-dis, ar(1), nm(1)
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-profdata.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,222 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-PROFDATA" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-profdata \- Profile data tool
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-profdata\fP \fIcommand\fP [\fIargs...\fP]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-profdata\fP tool is a small utility for working with profile
+data files.
+.SH COMMANDS
+.INDENT 0.0
+.IP \(bu 2
+\fI\%merge\fP
+.IP \(bu 2
+\fI\%show\fP
+.UNINDENT
+.SH MERGE
+.SS SYNOPSIS
+.sp
+\fBllvm\-profdata merge\fP [\fIoptions\fP] [\fIfilename...\fP]
+.SS DESCRIPTION
+.sp
+\fBllvm\-profdata merge\fP takes several profile data files
+generated by PGO instrumentation and merges them together into a single
+indexed profile data file.
+.sp
+By default profile data is merged without modification. This means that the
+relative importance of each input file is proportional to the number of samples
+or counts it contains. In general, the input from a longer training run will be
+interpreted as relatively more important than a shorter run. Depending on the
+nature of the training runs it may be useful to adjust the weight given to each
+input file by using the \fB\-weighted\-input\fP option.
+.SS OPTIONS
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-output=output, \-o=output
+Specify the output file name.  \fIOutput\fP cannot be \fB\-\fP as the resulting
+indexed profile data can\(aqt be written to standard output.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-weighted\-input=weight,filename
+Specify an input file name along with a weight. The profile counts of the input
+file will be scaled (multiplied) by the supplied \fBweight\fP, where where \fBweight\fP
+is a decimal integer >= 1. Input files specified without using this option are
+assigned a default weight of 1. Examples are shown below.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-instr (default)
+Specify that the input profile is an instrumentation\-based profile.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-sample
+Specify that the input profile is a sample\-based profile.
+.sp
+The format of the generated file can be generated in one of three ways:
+.INDENT 7.0
+.TP
+.B \-binary (default)
+.UNINDENT
+.sp
+Emit the profile using a binary encoding. For instrumentation\-based profile
+the output format is the indexed binary format.
+.INDENT 7.0
+.TP
+.B \-text
+.UNINDENT
+.sp
+Emit the profile in text mode. This option can also be used with both
+sample\-based and instrumentation\-based profile. When this option is used
+the profile will be dumped in the text format that is parsable by the profile
+reader.
+.INDENT 7.0
+.TP
+.B \-gcc
+.UNINDENT
+.sp
+Emit the profile using GCC\(aqs gcov format (Not yet supported).
+.UNINDENT
+.SS EXAMPLES
+.SS Basic Usage
+.sp
+Merge three profiles:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+llvm\-profdata merge foo.profdata bar.profdata baz.profdata \-output merged.profdata
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SS Weighted Input
+.sp
+The input file \fIfoo.profdata\fP is especially important, multiply its counts by 10:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+llvm\-profdata merge \-weighted\-input=10,foo.profdata bar.profdata baz.profdata \-output merged.profdata
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+Exactly equivalent to the previous invocation (explicit form; useful for programmatic invocation):
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+llvm\-profdata merge \-weighted\-input=10,foo.profdata \-weighted\-input=1,bar.profdata \-weighted\-input=1,baz.profdata \-output merged.profdata
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SH SHOW
+.SS SYNOPSIS
+.sp
+\fBllvm\-profdata show\fP [\fIoptions\fP] [\fIfilename\fP]
+.SS DESCRIPTION
+.sp
+\fBllvm\-profdata show\fP takes a profile data file and displays the
+information about the profile counters for this file and
+for any of the specified function(s).
+.sp
+If \fIfilename\fP is omitted or is \fB\-\fP, then \fBllvm\-profdata show\fP reads its
+input from standard input.
+.SS OPTIONS
+.INDENT 0.0
+.TP
+.B \-all\-functions
+Print details for every function.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-counts
+Print the counter values for the displayed functions.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-function=string
+Print details for a function if the function\(aqs name contains the given string.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-output=output, \-o=output
+Specify the output file name.  If \fIoutput\fP is \fB\-\fP or it isn\(aqt specified,
+then the output is sent to standard output.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-instr (default)
+Specify that the input profile is an instrumentation\-based profile.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-text
+Instruct the profile dumper to show profile counts in the text format of the
+instrumentation\-based profile data representation. By default, the profile
+information is dumped in a more human readable form (also in text) with
+annotations.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-sample
+Specify that the input profile is a sample\-based profile.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBllvm\-profdata\fP returns 1 if the command is omitted or is invalid,
+if it cannot read input files, or if there is a mismatch between their data.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-readobj.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,129 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-READOBJ" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-readobj \- LLVM Object Reader
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-readobj\fP [\fIoptions\fP] [\fIinput...\fP]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-readobj\fP tool displays low\-level format\-specific information
+about one or more object files. The tool and its output is primarily designed
+for use in FileCheck\-based tests.
+.SH OPTIONS
+.sp
+If \fBinput\fP is "\fB\-\fP" or omitted, \fBllvm\-readobj\fP reads from standard
+input. Otherwise, it will read from the specified \fBfilenames\fP\&.
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-version
+Display the version of this program
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-file\-headers, \-h
+Display file headers.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-sections, \-s
+Display all sections.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-section\-data, \-sd
+When used with \fB\-sections\fP, display section data for each section shown.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-section\-relocations, \-sr
+When used with \fB\-sections\fP, display relocations for each section shown.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-section\-symbols, \-st
+When used with \fB\-sections\fP, display symbols for each section shown.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-relocations, \-r
+Display the relocation entries in the file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-symbols, \-t
+Display the symbol table.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-dyn\-symbols
+Display the dynamic symbol table (only for ELF object files).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-unwind, \-u
+Display unwind information.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-expand\-relocs
+When used with \fB\-relocations\fP, display each relocation in an expanded
+multi\-line format.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-dynamic\-table
+Display the ELF .dynamic section table (only for ELF object files).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-needed\-libs
+Display the needed libraries (only for ELF object files).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-program\-headers
+Display the ELF program headers (only for ELF object files).
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBllvm\-readobj\fP returns 0.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-stress.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,64 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-STRESS" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-stress \- generate random .ll files
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-stress\fP [\-size=filesize] [\-seed=initialseed] [\-o=outfile]
+.SH DESCRIPTION
+.sp
+The \fBllvm\-stress\fP tool is used to generate random \fB\&.ll\fP files that
+can be used to test different components of LLVM.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-o filename
+Specify the output filename.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-size size
+Specify the size of the generated \fB\&.ll\fP file.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-seed seed
+Specify the seed to be used for the randomly generated instructions.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBllvm\-stress\fP returns 0.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/llvm-symbolizer.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,162 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "LLVM-SYMBOLIZER" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+llvm-symbolizer \- convert addresses into source code locations
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBllvm\-symbolizer\fP [options]
+.SH DESCRIPTION
+.sp
+\fBllvm\-symbolizer\fP reads object file names and addresses from standard
+input and prints corresponding source code locations to standard output.
+If object file is specified in command line, \fBllvm\-symbolizer\fP
+processes only addresses from standard input, the rest is output verbatim.
+This program uses debug info sections and symbol table in the object files.
+.SH EXAMPLE
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ cat addr.txt
+a.out 0x4004f4
+/tmp/b.out 0x400528
+/tmp/c.so 0x710
+/tmp/mach_universal_binary:i386 0x1f84
+/tmp/mach_universal_binary:x86_64 0x100000f24
+$ llvm\-symbolizer < addr.txt
+main
+/tmp/a.cc:4
+
+f(int, int)
+/tmp/b.cc:11
+
+h_inlined_into_g
+/tmp/header.h:2
+g_inlined_into_f
+/tmp/header.h:7
+f_inlined_into_main
+/tmp/source.cc:3
+main
+/tmp/source.cc:8
+
+_main
+/tmp/source_i386.cc:8
+
+_main
+/tmp/source_x86_64.cc:8
+$ cat addr2.txt
+0x4004f4
+0x401000
+$ llvm\-symbolizer \-obj=a.out < addr2.txt
+main
+/tmp/a.cc:4
+
+foo(int)
+/tmp/a.cc:12
+$cat addr.txt
+0x40054d
+$llvm\-symbolizer \-inlining \-print\-address \-pretty\-print \-obj=addr.exe < addr.txt
+0x40054d: inc at /tmp/x.c:3:3
+ (inlined by) main at /tmp/x.c:9:0
+$llvm\-symbolizer \-inlining \-pretty\-print \-obj=addr.exe < addr.txt
+inc at /tmp/x.c:3:3
+ (inlined by) main at /tmp/x.c:9:0
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-obj
+Path to object file to be symbolized.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-functions=[none|short|linkage]
+Specify the way function names are printed (omit function name,
+print short function name, or print full linkage name, respectively).
+Defaults to \fBlinkage\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-use\-symbol\-table
+Prefer function names stored in symbol table to function names
+in debug info sections. Defaults to true.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-demangle
+Print demangled function names. Defaults to true.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-inlining
+If a source code location is in an inlined function, prints all the
+inlnied frames. Defaults to true.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-default\-arch
+If a binary contains object files for multiple architectures (e.g. it is a
+Mach\-O universal binary), symbolize the object file for a given architecture.
+You can also specify architecture by writing \fBbinary_name:arch_name\fP in the
+input (see example above). If architecture is not specified in either way,
+address will not be symbolized. Defaults to empty string.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-dsym\-hint=<path/to/file.dSYM>
+(Darwin\-only flag). If the debug info for a binary isn\(aqt present in the default
+location, look for the debug info at the .dSYM path provided via the
+\fB\-dsym\-hint\fP flag. This flag can be used multiple times.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-address
+Print address before the source code location. Defaults to false.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-pretty\-print
+Print human readable output. If \fB\-inlining\fP is specified, enclosing scope is
+prefixed by (inlined by). Refer to listed examples.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+\fBllvm\-symbolizer\fP returns 0. Other exit codes imply internal program error.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/opt.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,169 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "OPT" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+opt \- LLVM optimizer
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBopt\fP [\fIoptions\fP] [\fIfilename\fP]
+.SH DESCRIPTION
+.sp
+The \fBopt\fP command is the modular LLVM optimizer and analyzer.  It
+takes LLVM source files as input, runs the specified optimizations or analyses
+on it, and then outputs the optimized file or the analysis results.  The
+function of \fBopt\fP depends on whether the \fB\-analyze\fP option is
+given.
+.sp
+When \fB\-analyze\fP is specified, \fBopt\fP performs various analyses
+of the input source.  It will usually print the results on standard output, but
+in a few cases, it will print output to standard error or generate a file with
+the analysis output, which is usually done when the output is meant for another
+program.
+.sp
+While \fB\-analyze\fP is \fInot\fP given, \fBopt\fP attempts to produce an
+optimized output file.  The optimizations available via \fBopt\fP depend
+upon what libraries were linked into it as well as any additional libraries
+that have been loaded with the \fI\%\-load\fP option.  Use the \fI\%\-help\fP
+option to determine what optimizations you can use.
+.sp
+If \fBfilename\fP is omitted from the command line or is "\fB\-\fP", \fBopt\fP
+reads its input from standard input.  Inputs can be in either the LLVM assembly
+language format (\fB\&.ll\fP) or the LLVM bitcode format (\fB\&.bc\fP).
+.sp
+If an output filename is not specified with the \fI\%\-o\fP option,
+\fBopt\fP writes its output to the standard output.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-f
+Enable binary output on terminals.  Normally, \fBopt\fP will refuse to
+write raw bitcode output if the output stream is a terminal.  With this option,
+\fBopt\fP will write raw bitcode regardless of the output device.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-o <filename>
+Specify the output filename.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-S
+Write output in LLVM intermediate language (instead of bitcode).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-{passname}
+\fBopt\fP provides the ability to run any of LLVM\(aqs optimization or
+analysis passes in any order.  The \fI\%\-help\fP option lists all the passes
+available.  The order in which the options occur on the command line are the
+order in which they are executed (within pass constraints).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-disable\-inlining
+This option simply removes the inlining pass from the standard list.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-disable\-opt
+This option is only meaningful when \fB\-std\-link\-opts\fP is given.  It
+disables most passes.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-strip\-debug
+This option causes opt to strip debug information from the module before
+applying other optimizations.  It is essentially the same as \fB\-strip\fP
+but it ensures that stripping of debug information is done first.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-verify\-each
+This option causes opt to add a verify pass after every pass otherwise
+specified on the command line (including \fB\-verify\fP).  This is useful
+for cases where it is suspected that a pass is creating an invalid module but
+it is not clear which pass is doing it.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-stats
+Print statistics.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-time\-passes
+Record the amount of time needed for each pass and print it to standard
+error.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-debug
+If this is a debug build, this option will enable debug printouts from passes
+which use the \fBDEBUG()\fP macro.  See the \fI\%LLVM Programmer\(aqs Manual\fP, section \fB#DEBUG\fP for more information.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-load=<plugin>
+Load the dynamic object \fBplugin\fP\&.  This object should register new
+optimization or analysis passes.  Once loaded, the object will add new command
+line options to enable various optimizations or analyses.  To see the new
+complete list of optimizations, use the \fI\%\-help\fP and \fI\%\-load\fP
+options together.  For example:
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+opt \-load=plugin.so \-help
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-p
+Print module after each transformation.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBopt\fP succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non\-zero value.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/Solaris/man1/tblgen.1	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,181 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "TBLGEN" "1" "2016-07-10" "3.8" "LLVM"
+.SH NAME
+tblgen \- Target Description To C++ Code Generator
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.SH SYNOPSIS
+.sp
+\fBtblgen\fP [\fIoptions\fP] [\fIfilename\fP]
+.SH DESCRIPTION
+.sp
+\fBtblgen\fP translates from target description (\fB\&.td\fP) files into C++
+code that can be included in the definition of an LLVM target library.  Most
+users of LLVM will not need to use this program.  It is only for assisting with
+writing an LLVM target backend.
+.sp
+The input and output of \fBtblgen\fP is beyond the scope of this short
+introduction; please see the introduction to TableGen\&.
+.sp
+The \fIfilename\fP argument specifies the name of a Target Description (\fB\&.td\fP)
+file to read as input.
+.SH OPTIONS
+.INDENT 0.0
+.TP
+.B \-help
+Print a summary of command line options.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-o filename
+Specify the output file name.  If \fBfilename\fP is \fB\-\fP, then
+\fBtblgen\fP sends its output to standard output.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-I directory
+Specify where to find other target description files for inclusion.  The
+\fBdirectory\fP value should be a full or partial path to a directory that
+contains target description files.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-asmparsernum N
+Make \-gen\-asm\-parser emit assembly writer number \fBN\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-asmwriternum N
+Make \-gen\-asm\-writer emit assembly writer number \fBN\fP\&.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-class className
+Print the enumeration list for this class.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-records
+Print all records to standard output (default).
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-enums
+Print enumeration values for a class.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-print\-sets
+Print expanded sets for testing DAG exprs.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-emitter
+Generate machine code emitter.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-register\-info
+Generate registers and register classes info.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-instr\-info
+Generate instruction descriptions.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-asm\-writer
+Generate the assembly writer.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-disassembler
+Generate disassembler.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-pseudo\-lowering
+Generate pseudo instruction lowering.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-dag\-isel
+Generate a DAG (Directed Acycle Graph) instruction selector.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-asm\-matcher
+Generate assembly instruction matcher.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-dfa\-packetizer
+Generate DFA Packetizer for VLIW targets.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-fast\-isel
+Generate a "fast" instruction selector.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-subtarget
+Generate subtarget enumerations.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-intrinsic
+Generate intrinsic information.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-tgt\-intrinsic
+Generate target intrinsic information.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-gen\-enhanced\-disassembly\-info
+Generate enhanced disassembly info.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-version
+Show the version number of this program.
+.UNINDENT
+.SH EXIT STATUS
+.sp
+If \fBtblgen\fP succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non\-zero value.
+.SH AUTHOR
+Maintained by The LLVM Team (http://llvm.org/).
+.SH COPYRIGHT
+2003-2016, LLVM Project
+.\" Generated by docutils manpage writer.
+.
--- a/components/llvm/clang-build.p5m	Thu Jul 28 16:15:45 2016 -0700
+++ b/components/llvm/clang-build.p5m	Thu Jul 28 16:25:34 2016 -0700
@@ -38,10 +38,6 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/188
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-file path=usr/bin/arcmt-test
-file path=usr/bin/c-arcmt-test
-file path=usr/bin/c-index-test
-file path=usr/bin/diagtool
 file path=usr/include/clang-c/BuildSystem.h
 file path=usr/include/clang-c/CXCompilationDatabase.h
 file path=usr/include/clang-c/CXErrorCode.h
@@ -49,7 +45,6 @@
 file path=usr/include/clang-c/Documentation.h
 file path=usr/include/clang-c/Index.h
 file path=usr/include/clang-c/Platform.h
-file path=usr/include/clang-c/module.modulemap
 file path=usr/include/clang/ARCMigrate/ARCMT.h
 file path=usr/include/clang/ARCMigrate/ARCMTActions.h
 file path=usr/include/clang/ARCMigrate/FileRemapper.h
@@ -90,7 +85,6 @@
 file path=usr/include/clang/AST/CommentParser.h
 file path=usr/include/clang/AST/CommentSema.h
 file path=usr/include/clang/AST/CommentVisitor.h
-file path=usr/include/clang/AST/DataRecursiveASTVisitor.h
 file path=usr/include/clang/AST/Decl.h
 file path=usr/include/clang/AST/DeclAccessPair.h
 file path=usr/include/clang/AST/DeclBase.h
@@ -110,6 +104,7 @@
 file path=usr/include/clang/AST/Expr.h
 file path=usr/include/clang/AST/ExprCXX.h
 file path=usr/include/clang/AST/ExprObjC.h
+file path=usr/include/clang/AST/ExprOpenMP.h
 file path=usr/include/clang/AST/ExternalASTSource.h
 file path=usr/include/clang/AST/GlobalDecl.h
 file path=usr/include/clang/AST/LambdaCapture.h
@@ -191,6 +186,7 @@
 file path=usr/include/clang/Basic/Builtins.def
 file path=usr/include/clang/Basic/Builtins.h
 file path=usr/include/clang/Basic/BuiltinsAArch64.def
+file path=usr/include/clang/Basic/BuiltinsAMDGPU.def
 file path=usr/include/clang/Basic/BuiltinsARM.def
 file path=usr/include/clang/Basic/BuiltinsHexagon.def
 file path=usr/include/clang/Basic/BuiltinsLe64.def
@@ -198,7 +194,8 @@
 file path=usr/include/clang/Basic/BuiltinsNEON.def
 file path=usr/include/clang/Basic/BuiltinsNVPTX.def
 file path=usr/include/clang/Basic/BuiltinsPPC.def
-file path=usr/include/clang/Basic/BuiltinsR600.def
+file path=usr/include/clang/Basic/BuiltinsSystemZ.def
+file path=usr/include/clang/Basic/BuiltinsWebAssembly.def
 file path=usr/include/clang/Basic/BuiltinsX86.def
 file path=usr/include/clang/Basic/BuiltinsXCore.def
 file path=usr/include/clang/Basic/CapturedStmt.h
@@ -270,6 +267,7 @@
 file path=usr/include/clang/CodeGen/CodeGenABITypes.h
 file path=usr/include/clang/CodeGen/CodeGenAction.h
 file path=usr/include/clang/CodeGen/ModuleBuilder.h
+file path=usr/include/clang/CodeGen/ObjectFilePCHContainerOperations.h
 file path=usr/include/clang/Config/config.h
 file path=usr/include/clang/Driver/Action.h
 file path=usr/include/clang/Driver/Compilation.h
@@ -313,6 +311,7 @@
 file path=usr/include/clang/Frontend/LogDiagnosticPrinter.h
 file path=usr/include/clang/Frontend/MigratorOptions.h
 file path=usr/include/clang/Frontend/MultiplexConsumer.h
+file path=usr/include/clang/Frontend/PCHContainerOperations.h
 file path=usr/include/clang/Frontend/PreprocessorOutputOptions.h
 file path=usr/include/clang/Frontend/SerializedDiagnosticPrinter.h
 file path=usr/include/clang/Frontend/SerializedDiagnosticReader.h
@@ -358,6 +357,7 @@
 file path=usr/include/clang/Parse/Parser.h
 file path=usr/include/clang/Rewrite/Core/DeltaTree.h
 file path=usr/include/clang/Rewrite/Core/HTMLRewrite.h
+file path=usr/include/clang/Rewrite/Core/RewriteBuffer.h
 file path=usr/include/clang/Rewrite/Core/RewriteRope.h
 file path=usr/include/clang/Rewrite/Core/Rewriter.h
 file path=usr/include/clang/Rewrite/Core/TokenRewriter.h
@@ -411,6 +411,7 @@
 file path=usr/include/clang/Serialization/ContinuousRangeMap.h
 file path=usr/include/clang/Serialization/GlobalModuleIndex.h
 file path=usr/include/clang/Serialization/Module.h
+file path=usr/include/clang/Serialization/ModuleFileExtension.h
 file path=usr/include/clang/Serialization/ModuleManager.h
 file path=usr/include/clang/Serialization/SerializationDiagnostic.h
 file path=usr/include/clang/StaticAnalyzer/Checkers/ClangCheckers.h
@@ -427,6 +428,7 @@
 file path=usr/include/clang/StaticAnalyzer/Core/CheckerManager.h
 file path=usr/include/clang/StaticAnalyzer/Core/CheckerOptInfo.h
 file path=usr/include/clang/StaticAnalyzer/Core/CheckerRegistry.h
+file path=usr/include/clang/StaticAnalyzer/Core/IssueHash.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
@@ -438,10 +440,12 @@
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h
+file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/FunctionSummary.h
+file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
 file path=usr/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h
@@ -464,6 +468,7 @@
 file path=usr/include/clang/Tooling/CommonOptionsParser.h
 file path=usr/include/clang/Tooling/CompilationDatabase.h
 file path=usr/include/clang/Tooling/CompilationDatabasePluginRegistry.h
+file path=usr/include/clang/Tooling/Core/Lookup.h
 file path=usr/include/clang/Tooling/Core/Replacement.h
 file path=usr/include/clang/Tooling/FileMatchTrie.h
 file path=usr/include/clang/Tooling/JSONCompilationDatabase.h
@@ -471,7 +476,6 @@
 file path=usr/include/clang/Tooling/RefactoringCallbacks.h
 file path=usr/include/clang/Tooling/ReplacementsYaml.h
 file path=usr/include/clang/Tooling/Tooling.h
-file path=usr/lib/$(MACH64)/libclang.a
 file path=usr/lib/$(MACH64)/libclangARCMigrate.a
 file path=usr/lib/$(MACH64)/libclangAST.a
 file path=usr/lib/$(MACH64)/libclangASTMatchers.a
@@ -496,6 +500,11 @@
 file path=usr/lib/$(MACH64)/libclangStaticAnalyzerFrontend.a
 file path=usr/lib/$(MACH64)/libclangTooling.a
 file path=usr/lib/$(MACH64)/libclangToolingCore.a
+#
+file path=usr/share/clang/cmake/ClangConfig.cmake
+file path=usr/share/clang/cmake/ClangTargets-release.cmake
+file path=usr/share/clang/cmake/ClangTargets.cmake
+#
 license llvm.license license="University of Illinois/NCSA"
 depend type=require fmri=pkg:/developer/llvm/llvm-build
 
--- a/components/llvm/clang.p5m	Thu Jul 28 16:15:45 2016 -0700
+++ b/components/llvm/clang.p5m	Thu Jul 28 16:25:34 2016 -0700
@@ -23,6 +23,7 @@
 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 
+<transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
 set name=pkg.fmri \
     value=pkg:/developer/llvm/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
@@ -38,13 +39,22 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/188
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-file path=usr/bin/clang
-hardlink path=usr/bin/clang++ target=clang
-file path=usr/bin/clang-check
-file path=usr/bin/clang-format
-file path=usr/bin/clang-tblgen
+file usr/bin/$(MACH64)/arcmt-test path=usr/bin/arcmt-test
+file usr/bin/$(MACH64)/c-arcmt-test path=usr/bin/c-arcmt-test
+file usr/bin/$(MACH64)/c-index-test path=usr/bin/c-index-test
+hardlink path=usr/bin/clang target=clang-3.8
+hardlink path=usr/bin/clang++ target=clang-3.8
+file usr/bin/$(MACH64)/clang-3.8 path=usr/bin/clang-3.8
+file usr/bin/$(MACH64)/clang-format path=usr/bin/clang-format
+file usr/bin/$(MACH64)/diagtool path=usr/bin/diagtool
+file usr/bin/$(MACH64)/git-clang-format path=usr/bin/git-clang-format
+file usr/bin/$(MACH64)/scan-build path=usr/bin/scan-build
+file usr/bin/$(MACH64)/scan-view path=usr/bin/scan-view
 file path=usr/lib/$(MACH64)/libclang.so
+file usr/libexec/$(MACH64)/c++-analyzer path=usr/lib/c++-analyzer
+file usr/libexec/$(MACH64)/ccc-analyzer path=usr/lib/ccc-analyzer
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/Intrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/__clang_cuda_runtime_wrapper.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/__stddef_max_align_t.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/__wmmintrin_aes.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/__wmmintrin_pclmul.h
@@ -55,21 +65,29 @@
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/arm_neon.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx2intrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512bwintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512cdintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512dqintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512erintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512fintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512vlbwintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512vldqintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avx512vlintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/avxintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/bmi2intrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/bmiintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/cpuid.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/cuda_builtin_vars.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/emmintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/f16cintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/float.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/fma4intrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/fmaintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/fxsrintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/htmintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/htmxlintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/ia32intrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/immintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/inttypes.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/iso646.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/limits.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/lzcntintrin.h
@@ -78,11 +96,13 @@
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/mmintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/module.modulemap
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/nmmintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/pkuintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/pmmintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/popcntintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/prfchwintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/rdseedintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/rtmintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/s390intrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/shaintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/smmintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/stdalign.h
@@ -98,10 +118,33 @@
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/unwind.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/vadefs.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/varargs.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/vecintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/wmmintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/x86intrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/xmmintrin.h
 file path=usr/lib/clang/$(COMPONENT_VERSION)/include/xopintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/xsavecintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/xsaveintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/xsaveoptintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/xsavesintrin.h
+file path=usr/lib/clang/$(COMPONENT_VERSION)/include/xtestintrin.h
+$(SOLARIS_11_ONLY)file path=usr/lib/clang/$(MACH64)/cxa_finalize.o
+$(SOLARIS_11_ONLY)file path=usr/lib/clang/$(MACH64)/cxa_finalize_pic.o
+$(SOLARIS_11_ONLY)file path=usr/lib/clang/cxa_finalize.o
+$(SOLARIS_11_ONLY)file path=usr/lib/clang/cxa_finalize_pic.o
+file path=usr/lib/python2.7/vendor-packages/Reporter.py
+file path=usr/lib/python2.7/vendor-packages/ScanView.py
+file path=usr/lib/python2.7/vendor-packages/clang-format-diff.py
+file path=usr/lib/python2.7/vendor-packages/clang-format-sublime.py
+file path=usr/lib/python2.7/vendor-packages/clang-format.py
+file path=usr/share/clang/clang-format-bbedit.applescript
+file path=usr/share/clang/clang-format.el
+file path=usr/share/man/man1/clang.1
+file path=usr/share/scan-build/scanview.css
+file path=usr/share/scan-build/sorttable.js
+file path=usr/share/scan-view/FileRadar.scpt
+file path=usr/share/scan-view/GetRadarVersion.scpt
+file path=usr/share/scan-view/bugcatcher.ico
 license llvm.license license="University of Illinois/NCSA"
 depend type=require fmri=pkg:/system/header
 
--- a/components/llvm/cxa_finalize/Makefile	Thu Jul 28 16:15:45 2016 -0700
+++ b/components/llvm/cxa_finalize/Makefile	Thu Jul 28 16:25:34 2016 -0700
@@ -22,12 +22,10 @@
 #
 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
 #
+export PARFAIT_BUILD=no
 COMPILER= gcc
-include ../../../make-rules/shared-macros.mk
 
-include $(WS_MAKE_RULES)/prep.mk
-include $(WS_MAKE_RULES)/configure.mk
-include $(WS_MAKE_RULES)/ips.mk
+include ../../../make-rules/shared-macros.mk
 
 COMPONENT_DIR := $(shell pwd)/..
 
@@ -38,10 +36,17 @@
 OBJECTS = cxa_finalize-32.o cxa_finalize-64.o \
 	  cxa_finalize_pic-32.o cxa_finalize_pic-64.o
 
-include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/common.mk
+
+GCC_VERSION := 4.9
+
+# We need GCC version 4.9, and not another version.
+CC=/usr/gcc/$(GCC_VERSION)/bin/gcc
+CXX=/usr/gcc/$(GCC_VERSION)/bin/g++
 
 RELEASE_LIST=Debug+Asserts+Checks Debug+Asserts Debug Release+Debug Release Unoptimized
 
+# Keep CFLAGS simple and generic.
 CFLAGS = -g -O2 -std=c99 -Wall -Wextra -Wcast-align
 ARCH = $(shell uname -p)
 
@@ -50,7 +55,7 @@
 endif
 
 ifeq ($(ARCH),i386)
-  CFLAGS += -mtune=opteron -march=opteron
+  CFLAGS += -mtune=opteron -march=opteron -mno-sse3 -mno-ssse3
 endif
 
 all:: $(OBJECTS)
--- a/components/llvm/llvm-build.p5m	Thu Jul 28 16:15:45 2016 -0700
+++ b/components/llvm/llvm-build.p5m	Thu Jul 28 16:25:34 2016 -0700
@@ -43,12 +43,14 @@
 file path=usr/include/llvm-c/BitWriter.h
 file path=usr/include/llvm-c/Core.h
 file path=usr/include/llvm-c/Disassembler.h
+file path=usr/include/llvm-c/ErrorHandling.h
 file path=usr/include/llvm-c/ExecutionEngine.h
 file path=usr/include/llvm-c/IRReader.h
 file path=usr/include/llvm-c/Initialization.h
 file path=usr/include/llvm-c/LinkTimeOptimizer.h
 file path=usr/include/llvm-c/Linker.h
 file path=usr/include/llvm-c/Object.h
+file path=usr/include/llvm-c/OrcBindings.h
 file path=usr/include/llvm-c/Support.h
 file path=usr/include/llvm-c/Target.h
 file path=usr/include/llvm-c/TargetMachine.h
@@ -56,6 +58,7 @@
 file path=usr/include/llvm-c/Transforms/PassManagerBuilder.h
 file path=usr/include/llvm-c/Transforms/Scalar.h
 file path=usr/include/llvm-c/Transforms/Vectorize.h
+file path=usr/include/llvm-c/Types.h
 file path=usr/include/llvm-c/lto.h
 file path=usr/include/llvm/ADT/APFloat.h
 file path=usr/include/llvm/ADT/APInt.h
@@ -68,6 +71,7 @@
 file path=usr/include/llvm/ADT/DenseMapInfo.h
 file path=usr/include/llvm/ADT/DenseSet.h
 file path=usr/include/llvm/ADT/DepthFirstIterator.h
+file path=usr/include/llvm/ADT/EpochTracker.h
 file path=usr/include/llvm/ADT/EquivalenceClasses.h
 file path=usr/include/llvm/ADT/FoldingSet.h
 file path=usr/include/llvm/ADT/GraphTraits.h
@@ -83,7 +87,9 @@
 file path=usr/include/llvm/ADT/None.h
 file path=usr/include/llvm/ADT/Optional.h
 file path=usr/include/llvm/ADT/PackedVector.h
+file path=usr/include/llvm/ADT/PointerEmbeddedInt.h
 file path=usr/include/llvm/ADT/PointerIntPair.h
+file path=usr/include/llvm/ADT/PointerSumType.h
 file path=usr/include/llvm/ADT/PointerUnion.h
 file path=usr/include/llvm/ADT/PostOrderIterator.h
 file path=usr/include/llvm/ADT/PriorityQueue.h
@@ -119,11 +125,13 @@
 file path=usr/include/llvm/Analysis/AliasAnalysis.h
 file path=usr/include/llvm/Analysis/AliasSetTracker.h
 file path=usr/include/llvm/Analysis/AssumptionCache.h
+file path=usr/include/llvm/Analysis/BasicAliasAnalysis.h
 file path=usr/include/llvm/Analysis/BlockFrequencyInfo.h
 file path=usr/include/llvm/Analysis/BlockFrequencyInfoImpl.h
 file path=usr/include/llvm/Analysis/BranchProbabilityInfo.h
 file path=usr/include/llvm/Analysis/CFG.h
 file path=usr/include/llvm/Analysis/CFGPrinter.h
+file path=usr/include/llvm/Analysis/CFLAliasAnalysis.h
 file path=usr/include/llvm/Analysis/CGSCCPassManager.h
 file path=usr/include/llvm/Analysis/CallGraph.h
 file path=usr/include/llvm/Analysis/CallGraphSCCPass.h
@@ -131,32 +139,38 @@
 file path=usr/include/llvm/Analysis/CaptureTracking.h
 file path=usr/include/llvm/Analysis/CodeMetrics.h
 file path=usr/include/llvm/Analysis/ConstantFolding.h
-file path=usr/include/llvm/Analysis/ConstantsScanner.h
 file path=usr/include/llvm/Analysis/DOTGraphTraitsPass.h
+file path=usr/include/llvm/Analysis/DemandedBits.h
 file path=usr/include/llvm/Analysis/DependenceAnalysis.h
+file path=usr/include/llvm/Analysis/DivergenceAnalysis.h
 file path=usr/include/llvm/Analysis/DomPrinter.h
 file path=usr/include/llvm/Analysis/DominanceFrontier.h
 file path=usr/include/llvm/Analysis/DominanceFrontierImpl.h
-file path=usr/include/llvm/Analysis/FunctionTargetTransformInfo.h
+file path=usr/include/llvm/Analysis/EHPersonalities.h
+file path=usr/include/llvm/Analysis/GlobalsModRef.h
 file path=usr/include/llvm/Analysis/IVUsers.h
 file path=usr/include/llvm/Analysis/InlineCost.h
 file path=usr/include/llvm/Analysis/InstructionSimplify.h
 file path=usr/include/llvm/Analysis/Interval.h
 file path=usr/include/llvm/Analysis/IntervalIterator.h
 file path=usr/include/llvm/Analysis/IntervalPartition.h
-file path=usr/include/llvm/Analysis/JumpInstrTableInfo.h
+file path=usr/include/llvm/Analysis/IteratedDominanceFrontier.h
 file path=usr/include/llvm/Analysis/LazyCallGraph.h
 file path=usr/include/llvm/Analysis/LazyValueInfo.h
-file path=usr/include/llvm/Analysis/LibCallAliasAnalysis.h
-file path=usr/include/llvm/Analysis/LibCallSemantics.h
 file path=usr/include/llvm/Analysis/Lint.h
 file path=usr/include/llvm/Analysis/Loads.h
+file path=usr/include/llvm/Analysis/LoopAccessAnalysis.h
 file path=usr/include/llvm/Analysis/LoopInfo.h
 file path=usr/include/llvm/Analysis/LoopInfoImpl.h
 file path=usr/include/llvm/Analysis/LoopIterator.h
 file path=usr/include/llvm/Analysis/LoopPass.h
 file path=usr/include/llvm/Analysis/MemoryBuiltins.h
 file path=usr/include/llvm/Analysis/MemoryDependenceAnalysis.h
+file path=usr/include/llvm/Analysis/MemoryLocation.h
+file path=usr/include/llvm/Analysis/ObjCARCAliasAnalysis.h
+file path=usr/include/llvm/Analysis/ObjCARCAnalysisUtils.h
+file path=usr/include/llvm/Analysis/ObjCARCInstKind.h
+file path=usr/include/llvm/Analysis/OrderedBasicBlock.h
 file path=usr/include/llvm/Analysis/PHITransAddr.h
 file path=usr/include/llvm/Analysis/Passes.h
 file path=usr/include/llvm/Analysis/PostDominators.h
@@ -167,15 +181,23 @@
 file path=usr/include/llvm/Analysis/RegionPass.h
 file path=usr/include/llvm/Analysis/RegionPrinter.h
 file path=usr/include/llvm/Analysis/ScalarEvolution.h
+file path=usr/include/llvm/Analysis/ScalarEvolutionAliasAnalysis.h
 file path=usr/include/llvm/Analysis/ScalarEvolutionExpander.h
 file path=usr/include/llvm/Analysis/ScalarEvolutionExpressions.h
 file path=usr/include/llvm/Analysis/ScalarEvolutionNormalization.h
+file path=usr/include/llvm/Analysis/ScopedNoAliasAA.h
 file path=usr/include/llvm/Analysis/SparsePropagation.h
 file path=usr/include/llvm/Analysis/TargetFolder.h
+file path=usr/include/llvm/Analysis/TargetLibraryInfo.def
+file path=usr/include/llvm/Analysis/TargetLibraryInfo.h
 file path=usr/include/llvm/Analysis/TargetTransformInfo.h
+file path=usr/include/llvm/Analysis/TargetTransformInfoImpl.h
 file path=usr/include/llvm/Analysis/Trace.h
+file path=usr/include/llvm/Analysis/TypeBasedAliasAnalysis.h
 file path=usr/include/llvm/Analysis/ValueTracking.h
+file path=usr/include/llvm/Analysis/VectorUtils.h
 file path=usr/include/llvm/AsmParser/Parser.h
+file path=usr/include/llvm/AsmParser/SlotMapping.h
 file path=usr/include/llvm/Bitcode/BitCodes.h
 file path=usr/include/llvm/Bitcode/BitcodeWriterPass.h
 file path=usr/include/llvm/Bitcode/BitstreamReader.h
@@ -184,15 +206,19 @@
 file path=usr/include/llvm/Bitcode/ReaderWriter.h
 file path=usr/include/llvm/CodeGen/Analysis.h
 file path=usr/include/llvm/CodeGen/AsmPrinter.h
+file path=usr/include/llvm/CodeGen/AtomicExpandUtils.h
+file path=usr/include/llvm/CodeGen/BasicTTIImpl.h
 file path=usr/include/llvm/CodeGen/CalcSpillWeights.h
 file path=usr/include/llvm/CodeGen/CallingConvLower.h
 file path=usr/include/llvm/CodeGen/CommandFlags.h
 file path=usr/include/llvm/CodeGen/DAGCombine.h
 file path=usr/include/llvm/CodeGen/DFAPacketizer.h
 file path=usr/include/llvm/CodeGen/DIE.h
+file path=usr/include/llvm/CodeGen/DIEValue.def
+file path=usr/include/llvm/CodeGen/DwarfStringPoolEntry.h
 file path=usr/include/llvm/CodeGen/EdgeBundles.h
 file path=usr/include/llvm/CodeGen/FastISel.h
-file path=usr/include/llvm/CodeGen/ForwardControlFlowIntegrity.h
+file path=usr/include/llvm/CodeGen/FaultMaps.h
 file path=usr/include/llvm/CodeGen/FunctionLoweringInfo.h
 file path=usr/include/llvm/CodeGen/GCMetadata.h
 file path=usr/include/llvm/CodeGen/GCMetadataPrinter.h
@@ -200,7 +226,6 @@
 file path=usr/include/llvm/CodeGen/GCs.h
 file path=usr/include/llvm/CodeGen/ISDOpcodes.h
 file path=usr/include/llvm/CodeGen/IntrinsicLowering.h
-file path=usr/include/llvm/CodeGen/JumpInstrTables.h
 file path=usr/include/llvm/CodeGen/LatencyPriorityQueue.h
 file path=usr/include/llvm/CodeGen/LexicalScopes.h
 file path=usr/include/llvm/CodeGen/LinkAllAsmWriterComponents.h
@@ -213,6 +238,8 @@
 file path=usr/include/llvm/CodeGen/LiveRegMatrix.h
 file path=usr/include/llvm/CodeGen/LiveStackAnalysis.h
 file path=usr/include/llvm/CodeGen/LiveVariables.h
+file path=usr/include/llvm/CodeGen/MIRParser/MIRParser.h
+file path=usr/include/llvm/CodeGen/MIRYamlMapping.h
 file path=usr/include/llvm/CodeGen/MachORelocation.h
 file path=usr/include/llvm/CodeGen/MachineBasicBlock.h
 file path=usr/include/llvm/CodeGen/MachineBlockFrequencyInfo.h
@@ -224,6 +251,7 @@
 file path=usr/include/llvm/CodeGen/MachineFrameInfo.h
 file path=usr/include/llvm/CodeGen/MachineFunction.h
 file path=usr/include/llvm/CodeGen/MachineFunctionAnalysis.h
+file path=usr/include/llvm/CodeGen/MachineFunctionInitializer.h
 file path=usr/include/llvm/CodeGen/MachineFunctionPass.h
 file path=usr/include/llvm/CodeGen/MachineInstr.h
 file path=usr/include/llvm/CodeGen/MachineInstrBuilder.h
@@ -248,6 +276,7 @@
 file path=usr/include/llvm/CodeGen/PBQP/ReductionRules.h
 file path=usr/include/llvm/CodeGen/PBQP/Solution.h
 file path=usr/include/llvm/CodeGen/PBQPRAConstraint.h
+file path=usr/include/llvm/CodeGen/ParallelCG.h
 file path=usr/include/llvm/CodeGen/Passes.h
 file path=usr/include/llvm/CodeGen/PseudoSourceValue.h
 file path=usr/include/llvm/CodeGen/RegAllocPBQP.h
@@ -267,7 +296,6 @@
 file path=usr/include/llvm/CodeGen/SelectionDAGISel.h
 file path=usr/include/llvm/CodeGen/SelectionDAGNodes.h
 file path=usr/include/llvm/CodeGen/SlotIndexes.h
-file path=usr/include/llvm/CodeGen/StackMapLivenessAnalysis.h
 file path=usr/include/llvm/CodeGen/StackMaps.h
 file path=usr/include/llvm/CodeGen/StackProtector.h
 file path=usr/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -275,37 +303,133 @@
 file path=usr/include/llvm/CodeGen/ValueTypes.h
 file path=usr/include/llvm/CodeGen/ValueTypes.td
 file path=usr/include/llvm/CodeGen/VirtRegMap.h
+file path=usr/include/llvm/CodeGen/WinEHFuncInfo.h
 file path=usr/include/llvm/Config/AsmParsers.def
 file path=usr/include/llvm/Config/AsmPrinters.def
 file path=usr/include/llvm/Config/Disassemblers.def
 file path=usr/include/llvm/Config/Targets.def
-file path=usr/include/llvm/Config/config.h
 file path=usr/include/llvm/Config/llvm-config.h
+file path=usr/include/llvm/DebugInfo/CodeView/CodeView.h
+file path=usr/include/llvm/DebugInfo/CodeView/CodeViewOStream.h
+file path=usr/include/llvm/DebugInfo/CodeView/FieldListRecordBuilder.h
+file path=usr/include/llvm/DebugInfo/CodeView/FunctionId.h
+file path=usr/include/llvm/DebugInfo/CodeView/Line.h
+file path=usr/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h
+file path=usr/include/llvm/DebugInfo/CodeView/MemoryTypeTableBuilder.h
+file path=usr/include/llvm/DebugInfo/CodeView/MethodListRecordBuilder.h
+file path=usr/include/llvm/DebugInfo/CodeView/TypeIndex.h
+file path=usr/include/llvm/DebugInfo/CodeView/TypeRecord.h
+file path=usr/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h
+file path=usr/include/llvm/DebugInfo/CodeView/TypeSymbolEmitter.h
+file path=usr/include/llvm/DebugInfo/CodeView/TypeTableBuilder.h
 file path=usr/include/llvm/DebugInfo/DIContext.h
-file path=usr/include/llvm/DebugInfo/DWARFAbbreviationDeclaration.h
-file path=usr/include/llvm/DebugInfo/DWARFAcceleratorTable.h
-file path=usr/include/llvm/DebugInfo/DWARFCompileUnit.h
-file path=usr/include/llvm/DebugInfo/DWARFContext.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugAbbrev.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugArangeSet.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugAranges.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugFrame.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugInfoEntry.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugLine.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugLoc.h
-file path=usr/include/llvm/DebugInfo/DWARFDebugRangeList.h
-file path=usr/include/llvm/DebugInfo/DWARFFormValue.h
-file path=usr/include/llvm/DebugInfo/DWARFRelocMap.h
-file path=usr/include/llvm/DebugInfo/DWARFSection.h
-file path=usr/include/llvm/DebugInfo/DWARFTypeUnit.h
-file path=usr/include/llvm/DebugInfo/DWARFUnit.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFCompileUnit.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFContext.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugMacro.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFFormValue.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFRelocMap.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFSection.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFTypeUnit.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFUnit.h
+file path=usr/include/llvm/DebugInfo/DWARF/DWARFUnitIndex.h
+file path=usr/include/llvm/DebugInfo/PDB/ConcreteSymbolEnumerator.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIADataStream.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIAEnumDebugStreams.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIAEnumLineNumbers.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIAEnumSourceFiles.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIALineNumber.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIASession.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIASourceFile.h
+file path=usr/include/llvm/DebugInfo/PDB/DIA/DIASupport.h
+file path=usr/include/llvm/DebugInfo/PDB/IPDBDataStream.h
+file path=usr/include/llvm/DebugInfo/PDB/IPDBEnumChildren.h
+file path=usr/include/llvm/DebugInfo/PDB/IPDBLineNumber.h
+file path=usr/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
+file path=usr/include/llvm/DebugInfo/PDB/IPDBSession.h
+file path=usr/include/llvm/DebugInfo/PDB/IPDBSourceFile.h
+file path=usr/include/llvm/DebugInfo/PDB/PDB.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBContext.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBExtras.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymDumper.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbol.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolData.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolExe.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h
+file path=usr/include/llvm/DebugInfo/PDB/PDBTypes.h
+file path=usr/include/llvm/DebugInfo/Symbolize/DIPrinter.h
+file path=usr/include/llvm/DebugInfo/Symbolize/SymbolizableModule.h
+file path=usr/include/llvm/DebugInfo/Symbolize/Symbolize.h
 file path=usr/include/llvm/ExecutionEngine/ExecutionEngine.h
 file path=usr/include/llvm/ExecutionEngine/GenericValue.h
 file path=usr/include/llvm/ExecutionEngine/Interpreter.h
 file path=usr/include/llvm/ExecutionEngine/JITEventListener.h
+file path=usr/include/llvm/ExecutionEngine/JITSymbolFlags.h
 file path=usr/include/llvm/ExecutionEngine/MCJIT.h
 file path=usr/include/llvm/ExecutionEngine/OProfileWrapper.h
 file path=usr/include/llvm/ExecutionEngine/ObjectCache.h
+file path=usr/include/llvm/ExecutionEngine/ObjectMemoryBuffer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/CompileUtils.h
+file path=usr/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
+file path=usr/include/llvm/ExecutionEngine/Orc/GlobalMappingLayer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
+file path=usr/include/llvm/ExecutionEngine/Orc/JITSymbol.h
+file path=usr/include/llvm/ExecutionEngine/Orc/LambdaResolver.h
+file path=usr/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/LogicalDylib.h
+file path=usr/include/llvm/ExecutionEngine/Orc/NullResolver.h
+file path=usr/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h
+file path=usr/include/llvm/ExecutionEngine/Orc/OrcError.h
+file path=usr/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h
+file path=usr/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h
+file path=usr/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
+file path=usr/include/llvm/ExecutionEngine/Orc/RPCChannel.h
+file path=usr/include/llvm/ExecutionEngine/Orc/RPCUtils.h
+file path=usr/include/llvm/ExecutionEngine/OrcMCJITReplacement.h
 file path=usr/include/llvm/ExecutionEngine/RTDyldMemoryManager.h
 file path=usr/include/llvm/ExecutionEngine/RuntimeDyld.h
 file path=usr/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
@@ -313,6 +437,8 @@
 file path=usr/include/llvm/IR/Argument.h
 file path=usr/include/llvm/IR/AssemblyAnnotationWriter.h
 file path=usr/include/llvm/IR/Attributes.h
+file path=usr/include/llvm/IR/Attributes.inc
+file path=usr/include/llvm/IR/Attributes.td
 file path=usr/include/llvm/IR/AutoUpgrade.h
 file path=usr/include/llvm/IR/BasicBlock.h
 file path=usr/include/llvm/IR/CFG.h
@@ -326,12 +452,15 @@
 file path=usr/include/llvm/IR/DIBuilder.h
 file path=usr/include/llvm/IR/DataLayout.h
 file path=usr/include/llvm/IR/DebugInfo.h
+file path=usr/include/llvm/IR/DebugInfoFlags.def
+file path=usr/include/llvm/IR/DebugInfoMetadata.h
 file path=usr/include/llvm/IR/DebugLoc.h
 file path=usr/include/llvm/IR/DerivedTypes.h
 file path=usr/include/llvm/IR/DiagnosticInfo.h
 file path=usr/include/llvm/IR/DiagnosticPrinter.h
 file path=usr/include/llvm/IR/Dominators.h
 file path=usr/include/llvm/IR/Function.h
+file path=usr/include/llvm/IR/FunctionInfo.h
 file path=usr/include/llvm/IR/GVMaterializer.h
 file path=usr/include/llvm/IR/GetElementPtrTypeIterator.h
 file path=usr/include/llvm/IR/GlobalAlias.h
@@ -352,12 +481,15 @@
 file path=usr/include/llvm/IR/Intrinsics.h
 file path=usr/include/llvm/IR/Intrinsics.td
 file path=usr/include/llvm/IR/IntrinsicsAArch64.td
+file path=usr/include/llvm/IR/IntrinsicsAMDGPU.td
 file path=usr/include/llvm/IR/IntrinsicsARM.td
+file path=usr/include/llvm/IR/IntrinsicsBPF.td
 file path=usr/include/llvm/IR/IntrinsicsHexagon.td
 file path=usr/include/llvm/IR/IntrinsicsMips.td
 file path=usr/include/llvm/IR/IntrinsicsNVVM.td
 file path=usr/include/llvm/IR/IntrinsicsPowerPC.td
-file path=usr/include/llvm/IR/IntrinsicsR600.td
+file path=usr/include/llvm/IR/IntrinsicsSystemZ.td
+file path=usr/include/llvm/IR/IntrinsicsWebAssembly.td
 file path=usr/include/llvm/IR/IntrinsicsX86.td
 file path=usr/include/llvm/IR/IntrinsicsXCore.td
 file path=usr/include/llvm/IR/LLVMContext.h
@@ -368,8 +500,8 @@
 file path=usr/include/llvm/IR/Mangler.h
 file path=usr/include/llvm/IR/Metadata.def
 file path=usr/include/llvm/IR/Metadata.h
-file path=usr/include/llvm/IR/MetadataTracking.h
 file path=usr/include/llvm/IR/Module.h
+file path=usr/include/llvm/IR/ModuleSlotTracker.h
 file path=usr/include/llvm/IR/NoFolder.h
 file path=usr/include/llvm/IR/OperandTraits.h
 file path=usr/include/llvm/IR/Operator.h
@@ -386,6 +518,7 @@
 file path=usr/include/llvm/IR/Use.h
 file path=usr/include/llvm/IR/UseListOrder.h
 file path=usr/include/llvm/IR/User.h
+file path=usr/include/llvm/IR/Value.def
 file path=usr/include/llvm/IR/Value.h
 file path=usr/include/llvm/IR/ValueHandle.h
 file path=usr/include/llvm/IR/ValueMap.h
@@ -395,9 +528,11 @@
 file path=usr/include/llvm/InitializePasses.h
 file path=usr/include/llvm/LTO/LTOCodeGenerator.h
 file path=usr/include/llvm/LTO/LTOModule.h
+file path=usr/include/llvm/LibDriver/LibDriver.h
 file path=usr/include/llvm/LineEditor/LineEditor.h
 file path=usr/include/llvm/LinkAllIR.h
 file path=usr/include/llvm/LinkAllPasses.h
+file path=usr/include/llvm/Linker/IRMover.h
 file path=usr/include/llvm/Linker/Linker.h
 file path=usr/include/llvm/MC/ConstantPools.h
 file path=usr/include/llvm/MC/MCAsmBackend.h
@@ -413,15 +548,14 @@
 file path=usr/include/llvm/MC/MCDirectives.h
 file path=usr/include/llvm/MC/MCDisassembler.h
 file path=usr/include/llvm/MC/MCDwarf.h
-file path=usr/include/llvm/MC/MCELF.h
 file path=usr/include/llvm/MC/MCELFObjectWriter.h
 file path=usr/include/llvm/MC/MCELFStreamer.h
-file path=usr/include/llvm/MC/MCELFSymbolFlags.h
 file path=usr/include/llvm/MC/MCExpr.h
 file path=usr/include/llvm/MC/MCExternalSymbolizer.h
 file path=usr/include/llvm/MC/MCFixedLenDisassembler.h
 file path=usr/include/llvm/MC/MCFixup.h
 file path=usr/include/llvm/MC/MCFixupKindInfo.h
+file path=usr/include/llvm/MC/MCFragment.h
 file path=usr/include/llvm/MC/MCInst.h
 file path=usr/include/llvm/MC/MCInstBuilder.h
 file path=usr/include/llvm/MC/MCInstPrinter.h
@@ -431,7 +565,6 @@
 file path=usr/include/llvm/MC/MCInstrItineraries.h
 file path=usr/include/llvm/MC/MCLabel.h
 file path=usr/include/llvm/MC/MCLinkerOptimizationHint.h
-file path=usr/include/llvm/MC/MCMachOSymbolFlags.h
 file path=usr/include/llvm/MC/MCMachObjectWriter.h
 file path=usr/include/llvm/MC/MCObjectFileInfo.h
 file path=usr/include/llvm/MC/MCObjectStreamer.h
@@ -441,6 +574,7 @@
 file path=usr/include/llvm/MC/MCParser/MCAsmLexer.h
 file path=usr/include/llvm/MC/MCParser/MCAsmParser.h
 file path=usr/include/llvm/MC/MCParser/MCAsmParserExtension.h
+file path=usr/include/llvm/MC/MCParser/MCAsmParserUtils.h
 file path=usr/include/llvm/MC/MCParser/MCParsedAsmOperand.h
 file path=usr/include/llvm/MC/MCRegisterInfo.h
 file path=usr/include/llvm/MC/MCRelocationInfo.h
@@ -452,6 +586,9 @@
 file path=usr/include/llvm/MC/MCStreamer.h
 file path=usr/include/llvm/MC/MCSubtargetInfo.h
 file path=usr/include/llvm/MC/MCSymbol.h
+file path=usr/include/llvm/MC/MCSymbolCOFF.h
+file path=usr/include/llvm/MC/MCSymbolELF.h
+file path=usr/include/llvm/MC/MCSymbolMachO.h
 file path=usr/include/llvm/MC/MCSymbolizer.h
 file path=usr/include/llvm/MC/MCTargetAsmParser.h
 file path=usr/include/llvm/MC/MCTargetOptions.h
@@ -467,19 +604,24 @@
 file path=usr/include/llvm/MC/SubtargetFeature.h
 file path=usr/include/llvm/MC/YAML.h
 file path=usr/include/llvm/Object/Archive.h
+file path=usr/include/llvm/Object/ArchiveWriter.h
 file path=usr/include/llvm/Object/Binary.h
 file path=usr/include/llvm/Object/COFF.h
+file path=usr/include/llvm/Object/COFFImportFile.h
 file path=usr/include/llvm/Object/COFFYAML.h
 file path=usr/include/llvm/Object/ELF.h
 file path=usr/include/llvm/Object/ELFObjectFile.h
 file path=usr/include/llvm/Object/ELFTypes.h
 file path=usr/include/llvm/Object/ELFYAML.h
 file path=usr/include/llvm/Object/Error.h
+file path=usr/include/llvm/Object/FunctionIndexObjectFile.h
 file path=usr/include/llvm/Object/IRObjectFile.h
 file path=usr/include/llvm/Object/MachO.h
 file path=usr/include/llvm/Object/MachOUniversal.h
 file path=usr/include/llvm/Object/ObjectFile.h
 file path=usr/include/llvm/Object/RelocVisitor.h
+file path=usr/include/llvm/Object/StackMapParser.h
+file path=usr/include/llvm/Object/SymbolSize.h
 file path=usr/include/llvm/Object/SymbolicFile.h
 file path=usr/include/llvm/Option/Arg.h
 file path=usr/include/llvm/Option/ArgList.h
@@ -490,13 +632,14 @@
 file path=usr/include/llvm/Pass.h
 file path=usr/include/llvm/PassAnalysisSupport.h
 file path=usr/include/llvm/PassInfo.h
-file path=usr/include/llvm/PassManager.h
 file path=usr/include/llvm/PassRegistry.h
 file path=usr/include/llvm/PassSupport.h
+file path=usr/include/llvm/Passes/PassBuilder.h
 file path=usr/include/llvm/ProfileData/CoverageMapping.h
 file path=usr/include/llvm/ProfileData/CoverageMappingReader.h
 file path=usr/include/llvm/ProfileData/CoverageMappingWriter.h
 file path=usr/include/llvm/ProfileData/InstrProf.h
+file path=usr/include/llvm/ProfileData/InstrProfData.inc
 file path=usr/include/llvm/ProfileData/InstrProfReader.h
 file path=usr/include/llvm/ProfileData/InstrProfWriter.h
 file path=usr/include/llvm/ProfileData/SampleProf.h
@@ -505,6 +648,7 @@
 file path=usr/include/llvm/Support/AIXDataTypesFix.h
 file path=usr/include/llvm/Support/ARMBuildAttributes.h
 file path=usr/include/llvm/Support/ARMEHABI.h
+file path=usr/include/llvm/Support/ARMTargetParser.def
 file path=usr/include/llvm/Support/ARMWinEH.h
 file path=usr/include/llvm/Support/AlignOf.h
 file path=usr/include/llvm/Support/Allocator.h
@@ -514,6 +658,7 @@
 file path=usr/include/llvm/Support/BranchProbability.h
 file path=usr/include/llvm/Support/CBindingWrapping.h
 file path=usr/include/llvm/Support/COFF.h
+file path=usr/include/llvm/Support/COM.h
 file path=usr/include/llvm/Support/Capacity.h
 file path=usr/include/llvm/Support/Casting.h
 file path=usr/include/llvm/Support/CodeGen.h
@@ -527,17 +672,20 @@
 file path=usr/include/llvm/Support/DataStream.h
 file path=usr/include/llvm/Support/DataTypes.h
 file path=usr/include/llvm/Support/Debug.h
+file path=usr/include/llvm/Support/Dwarf.def
 file path=usr/include/llvm/Support/Dwarf.h
 file path=usr/include/llvm/Support/DynamicLibrary.h
 file path=usr/include/llvm/Support/ELF.h
 file path=usr/include/llvm/Support/ELFRelocs/AArch64.def
 file path=usr/include/llvm/Support/ELFRelocs/ARM.def
+file path=usr/include/llvm/Support/ELFRelocs/AVR.def
 file path=usr/include/llvm/Support/ELFRelocs/Hexagon.def
 file path=usr/include/llvm/Support/ELFRelocs/Mips.def
 file path=usr/include/llvm/Support/ELFRelocs/PowerPC.def
 file path=usr/include/llvm/Support/ELFRelocs/PowerPC64.def
 file path=usr/include/llvm/Support/ELFRelocs/Sparc.def
 file path=usr/include/llvm/Support/ELFRelocs/SystemZ.def
+file path=usr/include/llvm/Support/ELFRelocs/WebAssembly.def
 file path=usr/include/llvm/Support/ELFRelocs/i386.def
 file path=usr/include/llvm/Support/ELFRelocs/x86_64.def
 file path=usr/include/llvm/Support/Endian.h
@@ -556,6 +704,7 @@
 file path=usr/include/llvm/Support/GenericDomTreeConstruction.h
 file path=usr/include/llvm/Support/GraphWriter.h
 file path=usr/include/llvm/Support/Host.h
+file path=usr/include/llvm/Support/JamCRC.h
 file path=usr/include/llvm/Support/LEB128.h
 file path=usr/include/llvm/Support/LICENSE.TXT
 file path=usr/include/llvm/Support/LineIterator.h
@@ -568,15 +717,16 @@
 file path=usr/include/llvm/Support/Memory.h
 file path=usr/include/llvm/Support/MemoryBuffer.h
 file path=usr/include/llvm/Support/MemoryObject.h
+file path=usr/include/llvm/Support/MipsABIFlags.h
 file path=usr/include/llvm/Support/Mutex.h
 file path=usr/include/llvm/Support/MutexGuard.h
 file path=usr/include/llvm/Support/OnDiskHashTable.h
 file path=usr/include/llvm/Support/Options.h
-file path=usr/include/llvm/Support/OutputBuffer.h
 file path=usr/include/llvm/Support/Path.h
 file path=usr/include/llvm/Support/PluginLoader.h
 file path=usr/include/llvm/Support/PointerLikeTypeTraits.h
 file path=usr/include/llvm/Support/PrettyStackTrace.h
+file path=usr/include/llvm/Support/Printable.h
 file path=usr/include/llvm/Support/Process.h
 file path=usr/include/llvm/Support/Program.h
 file path=usr/include/llvm/Support/RWMutex.h
@@ -595,15 +745,19 @@
 file path=usr/include/llvm/Support/SpecialCaseList.h
 file path=usr/include/llvm/Support/StreamingMemoryObject.h
 file path=usr/include/llvm/Support/StringPool.h
+file path=usr/include/llvm/Support/StringSaver.h
 file path=usr/include/llvm/Support/SwapByteOrder.h
 file path=usr/include/llvm/Support/SystemUtils.h
+file path=usr/include/llvm/Support/TargetParser.h
 file path=usr/include/llvm/Support/TargetRegistry.h
 file path=usr/include/llvm/Support/TargetSelect.h
 file path=usr/include/llvm/Support/ThreadLocal.h
+file path=usr/include/llvm/Support/ThreadPool.h
 file path=usr/include/llvm/Support/Threading.h
 file path=usr/include/llvm/Support/TimeValue.h
 file path=usr/include/llvm/Support/Timer.h
 file path=usr/include/llvm/Support/ToolOutputFile.h
+file path=usr/include/llvm/Support/TrailingObjects.h
 file path=usr/include/llvm/Support/Unicode.h
 file path=usr/include/llvm/Support/UnicodeCharRanges.h
 file path=usr/include/llvm/Support/UniqueLock.h
@@ -616,6 +770,7 @@
 file path=usr/include/llvm/Support/circular_raw_ostream.h
 file path=usr/include/llvm/Support/raw_os_ostream.h
 file path=usr/include/llvm/Support/raw_ostream.h
+file path=usr/include/llvm/Support/thread.h
 file path=usr/include/llvm/Support/type_traits.h
 file path=usr/include/llvm/TableGen/Error.h
 file path=usr/include/llvm/TableGen/Main.h
@@ -632,23 +787,35 @@
 file path=usr/include/llvm/Target/TargetInstrInfo.h
 file path=usr/include/llvm/Target/TargetIntrinsicInfo.h
 file path=usr/include/llvm/Target/TargetItinerary.td
-file path=usr/include/llvm/Target/TargetLibraryInfo.h
 file path=usr/include/llvm/Target/TargetLowering.h
 file path=usr/include/llvm/Target/TargetLoweringObjectFile.h
 file path=usr/include/llvm/Target/TargetMachine.h
 file path=usr/include/llvm/Target/TargetOpcodes.h
 file path=usr/include/llvm/Target/TargetOptions.h
+file path=usr/include/llvm/Target/TargetRecip.h
 file path=usr/include/llvm/Target/TargetRegisterInfo.h
 file path=usr/include/llvm/Target/TargetSchedule.td
 file path=usr/include/llvm/Target/TargetSelectionDAG.td
 file path=usr/include/llvm/Target/TargetSelectionDAGInfo.h
 file path=usr/include/llvm/Target/TargetSubtargetInfo.h
 file path=usr/include/llvm/Transforms/IPO.h
+file path=usr/include/llvm/Transforms/IPO/ForceFunctionAttrs.h
+file path=usr/include/llvm/Transforms/IPO/FunctionImport.h
+file path=usr/include/llvm/Transforms/IPO/InferFunctionAttrs.h
 file path=usr/include/llvm/Transforms/IPO/InlinerPass.h
+file path=usr/include/llvm/Transforms/IPO/LowerBitSets.h
 file path=usr/include/llvm/Transforms/IPO/PassManagerBuilder.h
+file path=usr/include/llvm/Transforms/IPO/StripDeadPrototypes.h
+file path=usr/include/llvm/Transforms/InstCombine/InstCombine.h
+file path=usr/include/llvm/Transforms/InstCombine/InstCombineWorklist.h
 file path=usr/include/llvm/Transforms/Instrumentation.h
 file path=usr/include/llvm/Transforms/ObjCARC.h
 file path=usr/include/llvm/Transforms/Scalar.h
+file path=usr/include/llvm/Transforms/Scalar/ADCE.h
+file path=usr/include/llvm/Transforms/Scalar/EarlyCSE.h
+file path=usr/include/llvm/Transforms/Scalar/LowerExpectIntrinsic.h
+file path=usr/include/llvm/Transforms/Scalar/SROA.h
+file path=usr/include/llvm/Transforms/Scalar/SimplifyCFG.h
 file path=usr/include/llvm/Transforms/Utils/ASanStackFrameLayout.h
 file path=usr/include/llvm/Transforms/Utils/BasicBlockUtils.h
 file path=usr/include/llvm/Transforms/Utils/BuildLibCalls.h
@@ -661,17 +828,18 @@
 file path=usr/include/llvm/Transforms/Utils/IntegerDivision.h
 file path=usr/include/llvm/Transforms/Utils/Local.h
 file path=usr/include/llvm/Transforms/Utils/LoopUtils.h
+file path=usr/include/llvm/Transforms/Utils/LoopVersioning.h
 file path=usr/include/llvm/Transforms/Utils/ModuleUtils.h
 file path=usr/include/llvm/Transforms/Utils/PromoteMemToReg.h
 file path=usr/include/llvm/Transforms/Utils/SSAUpdater.h
 file path=usr/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
 file path=usr/include/llvm/Transforms/Utils/SimplifyIndVar.h
 file path=usr/include/llvm/Transforms/Utils/SimplifyLibCalls.h
+file path=usr/include/llvm/Transforms/Utils/SplitModule.h
 file path=usr/include/llvm/Transforms/Utils/SymbolRewriter.h
 file path=usr/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h
 file path=usr/include/llvm/Transforms/Utils/UnrollLoop.h
 file path=usr/include/llvm/Transforms/Utils/ValueMapper.h
-file path=usr/include/llvm/Transforms/Utils/VectorUtils.h
 file path=usr/include/llvm/Transforms/Vectorize.h
 file path=usr/lib/$(MACH64)/libLLVMAnalysis.a
 file path=usr/lib/$(MACH64)/libLLVMAsmParser.a
@@ -680,22 +848,28 @@
 file path=usr/lib/$(MACH64)/libLLVMBitWriter.a
 file path=usr/lib/$(MACH64)/libLLVMCodeGen.a
 file path=usr/lib/$(MACH64)/libLLVMCore.a
-file path=usr/lib/$(MACH64)/libLLVMDebugInfo.a
+file path=usr/lib/$(MACH64)/libLLVMDebugInfoCodeView.a
+file path=usr/lib/$(MACH64)/libLLVMDebugInfoDWARF.a
+file path=usr/lib/$(MACH64)/libLLVMDebugInfoPDB.a
 file path=usr/lib/$(MACH64)/libLLVMExecutionEngine.a
 file path=usr/lib/$(MACH64)/libLLVMIRReader.a
 file path=usr/lib/$(MACH64)/libLLVMInstCombine.a
 file path=usr/lib/$(MACH64)/libLLVMInstrumentation.a
 file path=usr/lib/$(MACH64)/libLLVMInterpreter.a
 file path=usr/lib/$(MACH64)/libLLVMLTO.a
+file path=usr/lib/$(MACH64)/libLLVMLibDriver.a
 file path=usr/lib/$(MACH64)/libLLVMLineEditor.a
 file path=usr/lib/$(MACH64)/libLLVMLinker.a
 file path=usr/lib/$(MACH64)/libLLVMMC.a
 file path=usr/lib/$(MACH64)/libLLVMMCDisassembler.a
 file path=usr/lib/$(MACH64)/libLLVMMCJIT.a
 file path=usr/lib/$(MACH64)/libLLVMMCParser.a
+file path=usr/lib/$(MACH64)/libLLVMMIRParser.a
 file path=usr/lib/$(MACH64)/libLLVMObjCARCOpts.a
 file path=usr/lib/$(MACH64)/libLLVMObject.a
 file path=usr/lib/$(MACH64)/libLLVMOption.a
+file path=usr/lib/$(MACH64)/libLLVMOrcJIT.a
+file path=usr/lib/$(MACH64)/libLLVMPasses.a
 file path=usr/lib/$(MACH64)/libLLVMProfileData.a
 file path=usr/lib/$(MACH64)/libLLVMRuntimeDyld.a
 file path=usr/lib/$(MACH64)/libLLVMScalarOpts.a
@@ -707,6 +881,7 @@
 file path=usr/lib/$(MACH64)/libLLVMSparcDisassembler.a variant.arch=sparc
 file path=usr/lib/$(MACH64)/libLLVMSparcInfo.a variant.arch=sparc
 file path=usr/lib/$(MACH64)/libLLVMSupport.a
+file path=usr/lib/$(MACH64)/libLLVMSymbolize.a
 file path=usr/lib/$(MACH64)/libLLVMTableGen.a
 file path=usr/lib/$(MACH64)/libLLVMTarget.a
 file path=usr/lib/$(MACH64)/libLLVMTransformUtils.a
@@ -718,15 +893,15 @@
 file path=usr/lib/$(MACH64)/libLLVMX86Disassembler.a variant.arch=i386
 file path=usr/lib/$(MACH64)/libLLVMX86Info.a variant.arch=i386
 file path=usr/lib/$(MACH64)/libLLVMX86Utils.a variant.arch=i386
-file path=usr/lib/$(MACH64)/libLLVMipa.a
 file path=usr/lib/$(MACH64)/libLLVMipo.a
-file path=usr/lib/$(MACH64)/libLTO.a
+#
 file path=usr/share/llvm/cmake/AddLLVM.cmake
 file path=usr/share/llvm/cmake/AddLLVMDefinitions.cmake
 file path=usr/share/llvm/cmake/AddOCaml.cmake
 file path=usr/share/llvm/cmake/AddSphinxTarget.cmake
 file path=usr/share/llvm/cmake/ChooseMSVCCRT.cmake
 file path=usr/share/llvm/cmake/CrossCompile.cmake
+file path=usr/share/llvm/cmake/DetermineGCCCompatible.cmake
 file path=usr/share/llvm/cmake/FindOCaml.cmake
 file path=usr/share/llvm/cmake/FindSphinx.cmake
 file path=usr/share/llvm/cmake/GetSVN.cmake
@@ -736,7 +911,8 @@
 file path=usr/share/llvm/cmake/LLVMConfig.cmake
 file path=usr/share/llvm/cmake/LLVMConfigVersion.cmake
 file path=usr/share/llvm/cmake/LLVMExports.cmake
-file path=usr/share/llvm/cmake/LLVMParseArguments.cmake
+file path=usr/share/llvm/cmake/LLVMExternalProjectUtils.cmake
+file path=usr/share/llvm/cmake/LLVMInstallSymlink.cmake
 file path=usr/share/llvm/cmake/LLVMProcessSources.cmake
 file path=usr/share/llvm/cmake/TableGen.cmake
 license llvm.license license="University of Illinois/NCSA"
--- a/components/llvm/llvm.p5m	Thu Jul 28 16:15:45 2016 -0700
+++ b/components/llvm/llvm.p5m	Thu Jul 28 16:25:34 2016 -0700
@@ -23,6 +23,7 @@
 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 
+<transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
 set name=pkg.fmri \
     value=pkg:/developer/llvm/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
@@ -38,49 +39,73 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/188
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-file path=usr/bin/FileCheck
-file path=usr/bin/bugpoint
-file path=usr/bin/count
-file path=usr/bin/llc
-file path=usr/bin/lli
-file path=usr/bin/lli-child-target
-file path=usr/bin/llvm-ar
-file path=usr/bin/llvm-as
-file path=usr/bin/llvm-bcanalyzer
-file path=usr/bin/llvm-config
-file path=usr/bin/llvm-cov
-file path=usr/bin/llvm-diff
-file path=usr/bin/llvm-dis
-file path=usr/bin/llvm-dsymutil
-file path=usr/bin/llvm-dwarfdump
-file path=usr/bin/llvm-extract
-file path=usr/bin/llvm-link
-file path=usr/bin/llvm-lto
-file path=usr/bin/llvm-mc
-file path=usr/bin/llvm-mcmarkup
-file path=usr/bin/llvm-nm
-file path=usr/bin/llvm-objdump
-file path=usr/bin/llvm-profdata
+file usr/bin/$(MACH64)/bugpoint path=usr/bin/bugpoint
+file usr/bin/$(MACH64)/llc path=usr/bin/llc
+file usr/bin/$(MACH64)/lli path=usr/bin/lli
+file usr/bin/$(MACH64)/llvm-ar path=usr/bin/llvm-ar
+file usr/bin/$(MACH64)/llvm-as path=usr/bin/llvm-as
+file usr/bin/$(MACH64)/llvm-bcanalyzer path=usr/bin/llvm-bcanalyzer
+file usr/bin/$(MACH64)/llvm-c-test path=usr/bin/llvm-c-test
+file usr/bin/$(MACH64)/llvm-config path=usr/bin/llvm-config
+file usr/bin/$(MACH64)/llvm-cov path=usr/bin/llvm-cov
+file usr/bin/$(MACH64)/llvm-cxxdump path=usr/bin/llvm-cxxdump
+file usr/bin/$(MACH64)/llvm-diff path=usr/bin/llvm-diff
+file usr/bin/$(MACH64)/llvm-dis path=usr/bin/llvm-dis
+file usr/bin/$(MACH64)/llvm-dsymutil path=usr/bin/llvm-dsymutil
+file usr/bin/$(MACH64)/llvm-dwarfdump path=usr/bin/llvm-dwarfdump
+file usr/bin/$(MACH64)/llvm-dwp path=usr/bin/llvm-dwp
+file usr/bin/$(MACH64)/llvm-extract path=usr/bin/llvm-extract
+hardlink path=usr/bin/llvm-lib target=llvm-ar
+file usr/bin/$(MACH64)/llvm-link path=usr/bin/llvm-link
+file usr/bin/$(MACH64)/llvm-lto path=usr/bin/llvm-lto
+file usr/bin/$(MACH64)/llvm-mc path=usr/bin/llvm-mc
+file usr/bin/$(MACH64)/llvm-mcmarkup path=usr/bin/llvm-mcmarkup
+file usr/bin/$(MACH64)/llvm-nm path=usr/bin/llvm-nm
+file usr/bin/$(MACH64)/llvm-objdump path=usr/bin/llvm-objdump
+file usr/bin/$(MACH64)/llvm-pdbdump path=usr/bin/llvm-pdbdump
+file usr/bin/$(MACH64)/llvm-profdata path=usr/bin/llvm-profdata
 hardlink path=usr/bin/llvm-ranlib target=llvm-ar
-file path=usr/bin/llvm-readobj
-file path=usr/bin/llvm-rtdyld
-file path=usr/bin/llvm-size
-file path=usr/bin/llvm-stress
-file path=usr/bin/llvm-symbolizer
-file path=usr/bin/llvm-tblgen
-file path=usr/bin/llvm-vtabledump
-file path=usr/bin/macho-dump
-file path=usr/bin/not
-file path=usr/bin/obj2yaml
-file path=usr/bin/opt
-file path=usr/bin/verify-uselistorder
-file path=usr/bin/yaml2obj
+file usr/bin/$(MACH64)/llvm-readobj path=usr/bin/llvm-readobj
+file usr/bin/$(MACH64)/llvm-rtdyld path=usr/bin/llvm-rtdyld
+file usr/bin/$(MACH64)/llvm-size path=usr/bin/llvm-size
+file usr/bin/$(MACH64)/llvm-split path=usr/bin/llvm-split
+file usr/bin/$(MACH64)/llvm-stress path=usr/bin/llvm-stress
+file usr/bin/$(MACH64)/llvm-symbolizer path=usr/bin/llvm-symbolizer
+file usr/bin/$(MACH64)/llvm-tblgen path=usr/bin/llvm-tblgen
+file usr/bin/$(MACH64)/obj2yaml path=usr/bin/obj2yaml
+file usr/bin/$(MACH64)/opt path=usr/bin/opt
+file usr/bin/$(MACH64)/sancov path=usr/bin/sancov
+file usr/bin/$(MACH64)/verify-uselistorder path=usr/bin/verify-uselistorder
+file usr/bin/$(MACH64)/yaml2obj path=usr/bin/yaml2obj
 file path=usr/lib/$(MACH64)/BugpointPasses.so
 file path=usr/lib/$(MACH64)/LLVMHello.so
-link path=usr/lib/$(MACH64)/libLLVM-$(COMPONENT_VERSION).so \
-    target=libLLVM-3.6.so
-file path=usr/lib/$(MACH64)/libLLVM-3.6.so
+file path=usr/lib/$(MACH64)/libLLVM-3.8.so
+link path=usr/lib/$(MACH64)/libLLVM.so target=libLLVM-3.8.so
 file path=usr/lib/$(MACH64)/libLTO.so
+file path=usr/share/man/man1/FileCheck.1
+file path=usr/share/man/man1/bugpoint.1
+file path=usr/share/man/man1/lit.1
+file path=usr/share/man/man1/llc.1
+file path=usr/share/man/man1/lli.1
+file path=usr/share/man/man1/llvm-ar.1
+file path=usr/share/man/man1/llvm-as.1
+file path=usr/share/man/man1/llvm-bcanalyzer.1
+file path=usr/share/man/man1/llvm-build.1
+file path=usr/share/man/man1/llvm-config.1
+file path=usr/share/man/man1/llvm-cov.1
+file path=usr/share/man/man1/llvm-diff.1
+file path=usr/share/man/man1/llvm-dis.1
+file path=usr/share/man/man1/llvm-dwarfdump.1
+file path=usr/share/man/man1/llvm-extract.1
+file path=usr/share/man/man1/llvm-lib.1
+file path=usr/share/man/man1/llvm-link.1
+file path=usr/share/man/man1/llvm-nm.1
+file path=usr/share/man/man1/llvm-profdata.1
+file path=usr/share/man/man1/llvm-readobj.1
+file path=usr/share/man/man1/llvm-stress.1
+file path=usr/share/man/man1/llvm-symbolizer.1
+file path=usr/share/man/man1/opt.1
+file path=usr/share/man/man1/tblgen.1
 license llvm.license license="University of Illinois/NCSA"
 depend type=require fmri=pkg:/developer/gcc-49
 depend type=require fmri=pkg:/developer/gnu-binutils
--- a/components/llvm/patches/000-AutoRegen.sh.patch	Thu Jul 28 16:15:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-# Solaris autoconf-based build.
-# https://llvm.org/bugs/show_bug.cgi?id=24641
---- autoconf/AutoRegen.sh	2014-02-28 13:17:54.000000000 -0500
-+++ autoconf/AutoRegen.sh	2015-07-18 15:03:22.104835693 -0400
[email protected]@ -19,6 +19,21 @@
- want_aclocal_version='1\.9\.6'
- ### END NOTE #########################################################
- 
-+UNAMES="`uname -s`"
-+UNAMER="`uname -r`"
-+
-+if [ "${UNAMES}" = "SunOS" ] ; then
-+  if [ "${UNAMER}" = "5.11" ] ; then
-+    want_autoconf_version='2\.68'
-+    want_autoheader_version=$want_autoconf_version
-+    want_aclocal_version='1\.11\.2'
-+  elif [ "${UNAMER}" = "5.12" ] ; then
-+    want_autoconf_version='2\.69'
-+    want_autoheader_version=$want_autoconf_version
-+    want_aclocal_version='1\.15'
-+  fi
-+fi
-+
- outfile=configure
- configfile=configure.ac
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/patches/000-solaris-LLVM-libLLVMTransforms.patch	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,23 @@
+# 24314638 LLVM CommandLine subsystem is busted
+# 3.9.X for upstream.
+--- lib/Transforms/Instrumentation/GCOVProfiling.cpp	2016-01-25 14:24:50.000000000 -0800
++++ lib/Transforms/Instrumentation/GCOVProfiling.cpp	2016-05-11 19:11:39.817769093 -0700
[email protected]@ -45,10 +45,14 @@
+ #define DEBUG_TYPE "insert-gcov-profiling"
+ 
+ static cl::opt<std::string>
+-DefaultGCOVVersion("default-gcov-version", cl::init("402*"), cl::Hidden,
+-                   cl::ValueRequired);
+-static cl::opt<bool> DefaultExitBlockBeforeBody("gcov-exit-block-before-body",
+-                                                cl::init(false), cl::Hidden);
++DefaultGCOVVersion("default-gcov-version",
++                   cl::init(std::string("402*")),
++                   cl::Hidden, cl::ValueRequired);
++
++static cl::opt<bool>
++DefaultExitBlockBeforeBody("gcov-exit-block-before-body",
++                           cl::init(false),
++                           cl::Hidden);
+ 
+ GCOVOptions GCOVOptions::getDefault() {
+   GCOVOptions Options;
--- a/components/llvm/patches/001-Makefile.config.in.patch	Thu Jul 28 16:15:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-# Solaris autoconf-based build.
-# https://llvm.org/bugs/show_bug.cgi?id=24641
---- Makefile.config.in	2014-11-04 16:35:15.000000000 -0800
-+++ Makefile.config.in	2015-08-31 09:18:01.367776683 -0700
[email protected]@ -12,6 +12,8 @@
- #
- #===------------------------------------------------------------------------===#
- 
-+MACH = $(shell uname -p)
-+
- # Define LLVM specific info and directories based on the autoconf variables
- LLVMPackageName   := @[email protected]
- LLVMVersion       := @[email protected]
[email protected]@ -220,6 +222,12 @@
- 
- LIBS       := @[email protected]
- 
-+ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
-+  ifeq ($(MACH),sparc)
-+    LIBS += -lkstat
-+  endif
-+endif
-+
- # Targets that are possible to build
- ALL_TARGETS := @[email protected]
- 
[email protected]@ -337,14 +345,14 @@
- ENABLE_EMBED_STDCXX := @[email protected]
- 
- # Use -fvisibility-inlines-hidden?
--ENABLE_VISIBILITY_INLINES_HIDDEN := @[email protected]
-+ENABLE_VISIBILITY_INLINES_HIDDEN := 0
- 
- # Do we want to allow timestamping information into builds?
- ENABLE_TIMESTAMPS := @[email protected]
- 
- # This option tells the Makefiles to produce verbose output.
- # It essentially prints the commands that make is executing
--#VERBOSE = 1
-+VERBOSE := 1
- 
- # Enable JIT for this platform
- TARGET_HAS_JIT = @[email protected]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/patches/001-solaris-LLVM-libLLVMCodegen.patch	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,629 @@
+# 22859423 llvm CodeGen on Intel emits a bogus .ctors section
+# 22902339 memory corruption caused by undefined behavior in LLVM IR Module
+--- include/llvm/CodeGen/CommandFlags.h	2015-12-16 14:58:30.000000000 -0500
++++ include/llvm/CodeGen/CommandFlags.h	2016-05-08 23:19:20.514430315 -0400
[email protected]@ -38,7 +38,7 @@
+ MCPU("mcpu",
+      cl::desc("Target a specific cpu type (-mcpu=help for details)"),
+      cl::value_desc("cpu-name"),
+-     cl::init(""));
++     cl::init(std::string("")));
+ 
+ cl::list<std::string>
+ MAttrs("mattr",
[email protected]@ -190,7 +190,7 @@
+ cl::opt<std::string>
+ TrapFuncName("trap-func", cl::Hidden,
+         cl::desc("Emit a call to trap function rather than a trap instruction"),
+-        cl::init(""));
++        cl::init(std::string("")));
+ 
+ cl::opt<bool>
+ EnablePIE("enable-pie",
[email protected]@ -202,35 +202,42 @@
+              cl::desc("Use .ctors instead of .init_array."),
+              cl::init(false));
+ 
+-cl::opt<std::string> StopAfter("stop-after",
+-                            cl::desc("Stop compilation after a specific pass"),
+-                            cl::value_desc("pass-name"),
+-                                      cl::init(""));
+-cl::opt<std::string> StartAfter("start-after",
+-                          cl::desc("Resume compilation after a specific pass"),
+-                          cl::value_desc("pass-name"),
+-                          cl::init(""));
++cl::opt<std::string>
++StopAfter("stop-after",
++          cl::desc("Stop compilation after a specific pass"),
++          cl::value_desc("pass-name"),
++          cl::init(std::string("")));
++
++cl::opt<std::string>
++StartAfter("start-after",
++           cl::desc("Resume compilation after a specific pass"),
++           cl::value_desc("pass-name"),
++           cl::init(std::string("")));
+ 
+ cl::opt<std::string>
+-    RunPass("run-pass", cl::desc("Run compiler only for one specific pass"),
+-            cl::value_desc("pass-name"), cl::init(""));
++RunPass("run-pass", cl::desc("Run compiler only for one specific pass"),
++        cl::value_desc("pass-name"),
++        cl::init(std::string("")));
+ 
+-cl::opt<bool> DataSections("data-sections",
+-                           cl::desc("Emit data into separate sections"),
+-                           cl::init(false));
++cl::opt<bool>
++DataSections("data-sections",
++             cl::desc("Emit data into separate sections"),
++             cl::init(false));
+ 
+ cl::opt<bool>
+ FunctionSections("function-sections",
+                  cl::desc("Emit functions into separate sections"),
+                  cl::init(false));
+ 
+-cl::opt<bool> EmulatedTLS("emulated-tls",
+-                          cl::desc("Use emulated TLS model"),
+-                          cl::init(false));
+-
+-cl::opt<bool> UniqueSectionNames("unique-section-names",
+-                                 cl::desc("Give unique names to every section"),
+-                                 cl::init(true));
++cl::opt<bool>
++EmulatedTLS("emulated-tls",
++            cl::desc("Use emulated TLS model"),
++            cl::init(false));
++
++cl::opt<bool>
++UniqueSectionNames("unique-section-names",
++                   cl::desc("Give unique names to every section"),
++                   cl::init(true));
+ 
+ cl::opt<llvm::JumpTable::JumpTableType>
+ JTableType("jump-table-type",
[email protected]@ -269,7 +276,9 @@
+ 
+ // Common utility function tightly tied to the options listed here. Initializes
+ // a TargetOptions object with CodeGen flags and returns it.
+-static inline TargetOptions InitTargetOptionsFromCodeGenFlags() {
++static inline
++__attribute__((used))
++TargetOptions InitTargetOptionsFromCodeGenFlags() {
+   TargetOptions Options;
+   Options.LessPreciseFPMADOption = EnableFPMAD;
+   Options.AllowFPOpFusion = FuseFPOps;
+###
+--- include/llvm/CodeGen/LiveInterval.h	2016-02-17 10:41:44.000000000 -0800
++++ include/llvm/CodeGen/LiveInterval.h	2016-07-08 16:53:26.422739200 -0700
[email protected]@ -43,7 +43,7 @@
+   /// This class holds information about a machine level values, including
+   /// definition and use points.
+   ///
+-  class VNInfo {
++  class LLVM_ALIGNAS(/*alignof(uint64_t)*/ 8) VNInfo {
+   public:
+     typedef BumpPtrAllocator Allocator;
+ 
[email protected]@ -55,13 +55,11 @@
+ 
+     /// VNInfo constructor.
+     VNInfo(unsigned i, SlotIndex d)
+-      : id(i), def(d)
+-    { }
++    : id(i), def(d) { }
+ 
+     /// VNInfo construtor, copies values from orig, except for the value number.
+     VNInfo(unsigned i, const VNInfo &orig)
+-      : id(i), def(orig.def)
+-    { }
++    : id(i), def(orig.def) { }
+ 
+     /// Copy from the parameter into this VNInfo.
+     void copyFrom(VNInfo &src) {
[email protected]@ -85,16 +83,15 @@
+   /// of live ranges, and it should be used as the primary interface for
+   /// examining live ranges around instructions.
+   class LiveQueryResult {
++  private:
+     VNInfo *const EarlyVal;
+     VNInfo *const LateVal;
+     const SlotIndex EndPoint;
+     const bool Kill;
+ 
+   public:
+-    LiveQueryResult(VNInfo *EarlyVal, VNInfo *LateVal, SlotIndex EndPoint,
+-                    bool Kill)
+-      : EarlyVal(EarlyVal), LateVal(LateVal), EndPoint(EndPoint), Kill(Kill)
+-    {}
++    LiveQueryResult(VNInfo *EV, VNInfo *LV, SlotIndex EP, bool K)
++    : EarlyVal(EV), LateVal(LV), EndPoint(EP), Kill(K) { }
+ 
+     /// Return the value that is live-in to the instruction. This is the value
+     /// that will be read by the instruction's use operands. Return NULL if no
[email protected]@ -157,12 +154,13 @@
+     /// This represents a simple continuous liveness interval for a value.
+     /// The start point is inclusive, the end point exclusive. These intervals
+     /// are rendered as [start,end).
+-    struct Segment {
++    class Segment {
++    public:
+       SlotIndex start;  // Start point of the interval (inclusive)
+       SlotIndex end;    // End point of the interval (exclusive)
+       VNInfo *valno;    // identifier for the value contained in this segment.
+ 
+-      Segment() : valno(nullptr) {}
++      Segment() : start(), end(), valno(nullptr) { }
+ 
+       Segment(SlotIndex S, SlotIndex E, VNInfo *V)
+         : start(S), end(E), valno(V) {
[email protected]@ -190,8 +188,9 @@
+       void dump() const;
+     };
+ 
+-    typedef SmallVector<Segment,4> Segments;
+-    typedef SmallVector<VNInfo*,4> VNInfoList;
++    typedef std::vector<Segment> Segments;
++    typedef std::vector<VNInfo*> VNInfoList;
++    typedef std::set<Segment> SegmentSet;
+ 
+     Segments segments;   // the liveness segments
+     VNInfoList valnos;   // value#'s
[email protected]@ -199,7 +198,6 @@
+     // The segment set is used temporarily to accelerate initial computation
+     // of live ranges of physical registers in computeRegUnitRange.
+     // After that the set is flushed to the segment vector and deleted.
+-    typedef std::set<Segment> SegmentSet;
+     std::unique_ptr<SegmentSet> segmentSet;
+ 
+     typedef Segments::iterator iterator;
[email protected]@ -219,13 +217,14 @@
+     const_vni_iterator vni_end() const   { return valnos.end(); }
+ 
+     /// Constructs a new LiveRange object.
+-    LiveRange(bool UseSegmentSet = false)
+-        : segmentSet(UseSegmentSet ? llvm::make_unique<SegmentSet>()
+-                                   : nullptr) {}
++    explicit LiveRange(bool UseSegmentSet = false)
++    : segments(), valnos(),
++    segmentSet(UseSegmentSet ? llvm::make_unique<SegmentSet>() : nullptr) { }
+ 
+     /// Constructs a new LiveRange object by copying segments and valnos from
+     /// another LiveRange.
+-    LiveRange(const LiveRange &Other, BumpPtrAllocator &Allocator) {
++    LiveRange(const LiveRange &Other, BumpPtrAllocator &Allocator)
++    : segments(), valnos(), segmentSet() {
+       assert(Other.segmentSet == nullptr &&
+              "Copying of LiveRanges with active SegmentSets is not supported");
+ 
[email protected]@ -305,8 +304,15 @@
+     /// getNextValue - Create a new value number and return it.  MIIdx specifies
+     /// the instruction that defines the value number.
+     VNInfo *getNextValue(SlotIndex def, VNInfo::Allocator &VNInfoAllocator) {
+-      VNInfo *VNI =
+-        new (VNInfoAllocator) VNInfo((unsigned)valnos.size(), def);
++      size_t Size = sizeof(VNInfo) + valnos.size();
++      size_t Alignment = llvm::AlignOf<llvm::VNInfo>::Alignment;
++      void *Mem = VNInfoAllocator.Allocate(Size, Alignment);
++      assert(Mem && "VNInfoAllocator memory allocation failed!");
++
++      VNInfo *VNI = new (reinterpret_cast<VNInfo*>(Mem))
++        VNInfo(static_cast<unsigned>(valnos.size()), def);
++      assert(VNI && "VNInfo placement construction failed!");
++
+       valnos.push_back(VNI);
+       return VNI;
+     }
[email protected]@ -320,8 +326,15 @@
+     /// for the Value number.
+     VNInfo *createValueCopy(const VNInfo *orig,
+                             VNInfo::Allocator &VNInfoAllocator) {
+-      VNInfo *VNI =
+-        new (VNInfoAllocator) VNInfo((unsigned)valnos.size(), *orig);
++      size_t Size = sizeof(VNInfo) + valnos.size();
++      size_t Alignment = llvm::AlignOf<llvm::VNInfo>::Alignment;
++      void *Mem = VNInfoAllocator.Allocate(Size, Alignment);
++      assert(Mem && "VNInfoAllocator memory allocation failed!");
++
++      VNInfo *VNI = new (reinterpret_cast<VNInfo*>(Mem))
++        VNInfo(static_cast<unsigned>(valnos.size()), *orig);
++      assert(VNI && "VNInfo placement construction failed!");
++
+       valnos.push_back(VNI);
+       return VNI;
+     }
[email protected]@ -591,28 +604,26 @@
+ 
+   /// LiveInterval - This class represents the liveness of a register,
+   /// or stack slot.
+-  class LiveInterval : public LiveRange {
++  class LLVM_ALIGNAS(/*alignof(uint64_t)*/ 8) LiveInterval : public LiveRange {
+   public:
+     typedef LiveRange super;
+ 
+     /// A live range for subregisters. The LaneMask specifies which parts of the
+     /// super register are covered by the interval.
+     /// (@sa TargetRegisterInfo::getSubRegIndexLaneMask()).
+-    class SubRange : public LiveRange {
++    class LLVM_ALIGNAS(/*alignof(uint64_t)*/ 8) SubRange : public LiveRange {
+     public:
+       SubRange *Next;
+       LaneBitmask LaneMask;
+ 
+       /// Constructs a new SubRange object.
+-      SubRange(LaneBitmask LaneMask)
+-        : Next(nullptr), LaneMask(LaneMask) {
+-      }
++      explicit SubRange(LaneBitmask Mask = 0U)
++      : LiveRange(), Next(nullptr), LaneMask(Mask) { }
+ 
+       /// Constructs a new SubRange object by copying liveness from @p Other.
+-      SubRange(LaneBitmask LaneMask, const LiveRange &Other,
++      SubRange(LaneBitmask Mask, const LiveRange &Other,
+                BumpPtrAllocator &Allocator)
+-        : LiveRange(Other, Allocator), Next(nullptr), LaneMask(LaneMask) {
+-      }
++      : LiveRange(Other, Allocator), Next(nullptr), LaneMask(Mask) { }
+     };
+ 
+   private:
[email protected]@ -623,7 +634,7 @@
+     float weight;        // weight of this interval
+ 
+     LiveInterval(unsigned Reg, float Weight)
+-      : SubRanges(nullptr), reg(Reg), weight(Weight) {}
++    : LiveRange(), SubRanges(nullptr), reg(Reg), weight(Weight) { }
+ 
+     ~LiveInterval() {
+       clearSubRanges();
[email protected]@ -787,13 +798,14 @@
+     SlotIndex LastStart;
+     LiveRange::iterator WriteI;
+     LiveRange::iterator ReadI;
+-    SmallVector<LiveRange::Segment, 16> Spills;
++    std::vector<LiveRange::Segment> Spills;
+     void mergeSpills();
+ 
+   public:
+     /// Create a LiveRangeUpdater for adding segments to LR.
+     /// LR will temporarily be in an invalid state until flush() is called.
+-    LiveRangeUpdater(LiveRange *lr = nullptr) : LR(lr) {}
++    explicit LiveRangeUpdater(LiveRange *lr = nullptr)
++    : LR(lr), LastStart(), WriteI(), ReadI(), Spills() { }
+ 
+     ~LiveRangeUpdater() { flush(); }
+ 
+###
+--- lib/CodeGen/LiveInterval.cpp	2016-02-17 10:41:44.000000000 -0800
++++ lib/CodeGen/LiveInterval.cpp	2016-05-25 10:21:23.432898762 -0700
[email protected]@ -320,10 +320,16 @@
+ VNInfo *LiveRange::createDeadDef(SlotIndex Def,
+                                   VNInfo::Allocator &VNInfoAllocator) {
+   // Use the segment set, if it is available.
+-  if (segmentSet != nullptr)
+-    return CalcLiveRangeUtilSet(this).createDeadDef(Def, VNInfoAllocator);
++  if (segmentSet != nullptr) {
++    CalcLiveRangeUtilSet CLR(this);
++    VNInfo *VNI = CLR.createDeadDef(Def, VNInfoAllocator);
++    return VNI;
++  }
++
+   // Otherwise use the segment vector.
+-  return CalcLiveRangeUtilVector(this).createDeadDef(Def, VNInfoAllocator);
++  CalcLiveRangeUtilVector CLR(this);
++  VNInfo *VNI = CLR.createDeadDef(Def, VNInfoAllocator);
++  return VNI;
+ }
+ 
+ // overlaps - Return true if the intersection of the two live ranges is
[email protected]@ -740,10 +746,12 @@
+ 
+ void LiveRange::flushSegmentSet() {
+   assert(segmentSet != nullptr && "segment set must have been created");
+-  assert(
+-      segments.empty() &&
+-      "segment set can be used only initially before switching to the array");
+-  segments.append(segmentSet->begin(), segmentSet->end());
++  assert(segments.empty() &&
++         "segment set can be used only initially before "
++         "switching to the array");
++
++  segments.insert(segments.end(),
++                  segmentSet->begin(), segmentSet->end());
+   segmentSet = nullptr;
+   verify();
+ }
+###
+--- lib/CodeGen/LiveIntervalAnalysis.cpp	2016-01-07 17:16:35.000000000 -0800
++++ lib/CodeGen/LiveIntervalAnalysis.cpp	2016-05-25 08:48:39.699849409 -0700
[email protected]@ -185,12 +185,19 @@
+ }
+ #endif
+ 
+-LiveInterval* LiveIntervals::createInterval(unsigned reg) {
+-  float Weight = TargetRegisterInfo::isPhysicalRegister(reg) ?
++LiveInterval* LiveIntervals::createInterval(unsigned Reg) {
++  float Weight = TargetRegisterInfo::isPhysicalRegister(Reg) ?
+                   llvm::huge_valf : 0.0F;
+-  return new LiveInterval(reg, Weight);
+-}
++  void *Mem;
++  size_t Alignment = llvm::AlignOf<uint64_t>::Alignment;
++  if (posix_memalign(&Mem, Alignment, sizeof(LiveInterval)) != 0)
++    return nullptr;
++
++  (void) std::memset(Mem, 0, sizeof(LiveInterval));
+ 
++  LiveInterval *LI = new (Mem) LiveInterval(Reg, Weight);
++  return LI;
++}
+ 
+ /// computeVirtRegInterval - Compute the live interval of a virtual register,
+ /// based on defs and uses.
+###
+--- lib/CodeGen/MachineBasicBlock.cpp	2016-01-07 01:26:32.000000000 -0900
++++ lib/CodeGen/MachineBasicBlock.cpp	2016-07-07 10:45:17.893185995 -0800
[email protected]@ -40,12 +40,16 @@
+ #define DEBUG_TYPE "codegen"
+ 
+ MachineBasicBlock::MachineBasicBlock(MachineFunction &MF, const BasicBlock *B)
+-    : BB(B), Number(-1), xParent(&MF) {
+-  Insts.Parent = this;
++  : ilist_node_with_parent<MachineBasicBlock, MachineFunction>(),
++  BB(B), Number(-1), xParent(&MF),
++  Predecessors(), Successors(), Probs(), LiveIns(),
++  Alignment(0U), IsEHPad(false), AddressTaken(false),
++  IsEHFuncletEntry(false), IsCleanupFuncletEntry(false),
++  CachedMCSymbol(nullptr) {
++    Insts.Parent = this;
+ }
+ 
+-MachineBasicBlock::~MachineBasicBlock() {
+-}
++MachineBasicBlock::~MachineBasicBlock() { }
+ 
+ /// Return the MCSymbol for this basic block.
+ MCSymbol *MachineBasicBlock::getSymbol() const {
[email protected]@ -525,8 +529,9 @@
+                                      BranchProbability Prob) {
+   // Probability list is either empty (if successor list isn't empty, this means
+   // disabled optimization) or has the same size as successor list.
+-  if (!(Probs.empty() && !Successors.empty()))
++  if (Probs.empty() || (Probs.size() == Successors.size()))
+     Probs.push_back(Prob);
++
+   Successors.push_back(Succ);
+   Succ->addPredecessor(this);
+ }
+###.
+--- include/llvm/CodeGen/MachineBasicBlock.h	2015-12-13 00:26:17.000000000 -0900
++++ include/llvm/CodeGen/MachineBasicBlock.h	2016-07-07 10:24:28.207403130 -0800
[email protected]@ -125,7 +125,15 @@
+   mutable MCSymbol *CachedMCSymbol = nullptr;
+ 
+   // Intrusive list support
+-  MachineBasicBlock() {}
++  MachineBasicBlock()
++  : ilist_node_with_parent<MachineBasicBlock, MachineFunction>(),
++  Insts(), BB(nullptr), Number(-1), xParent(nullptr),
++  Predecessors(), Successors(), Probs(), LiveIns(),
++  Alignment(0U), IsEHPad(false), AddressTaken(false),
++  IsEHFuncletEntry(false), IsCleanupFuncletEntry(false),
++  CachedMCSymbol(nullptr) {
++    Insts.Parent = this;
++  }
+ 
+   explicit MachineBasicBlock(MachineFunction &MF, const BasicBlock *BB);
+ 
+###
+--- lib/CodeGen/AsmPrinter/AsmPrinter.cpp	2016-01-12 17:18:13.000000000 -0800
++++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp	2016-05-25 14:27:34.764865039 -0700
[email protected]@ -1614,6 +1614,7 @@
+ };
+ } // end namespace
+ 
++
+ /// EmitXXStructorList - Emit the ctor or dtor list taking into account the init
+ /// priority.
+ void AsmPrinter::EmitXXStructorList(const DataLayout &DL, const Constant *List,
[email protected]@ -1667,13 +1668,14 @@
+ 
+       KeySym = getSymbol(GV);
+     }
+-    MCSection *OutputSection =
+-        (isCtor ? Obj.getStaticCtorSection(S.Priority, KeySym)
+-                : Obj.getStaticDtorSection(S.Priority, KeySym));
+-    OutStreamer->SwitchSection(OutputSection);
+-    if (OutStreamer->getCurrentSection() != OutStreamer->getPreviousSection())
+-      EmitAlignment(Align);
+-    EmitXXStructor(DL, S.Func);
++
++    // Why is this even necessary?
++    // Constructors for global statics are emitted in
++    // clang/lib/CodeGen/DeclCXX.cpp
++    // Destructors for global statics register themselves with __cxa_atexit.
++    // I.e. they do not need any kind of additional special handling.
++    // The only thing this does is duplicate constructor calls for
++    // global static initializations.
+   }
+ }
+ 
+###
+--- lib/CodeGen/CodeGenPrepare.cpp	2016-01-22 13:26:38.000000000 -0500
++++ lib/CodeGen/CodeGenPrepare.cpp	2016-05-28 13:01:43.647551022 -0400
[email protected]@ -2445,59 +2445,67 @@
+ 
+ private:
+   /// The ordered list of actions made so far.
+-  SmallVector<std::unique_ptr<TypePromotionAction>, 16> Actions;
+-  typedef SmallVectorImpl<std::unique_ptr<TypePromotionAction>>::iterator CommitPt;
++  /// You cannot use a SmallVector here because of copy vs. move
++  /// semantics. You can't use a std::unique_ptr eiter, for the
++  /// same exact reasons.
++  std::vector<std::shared_ptr<TypePromotionAction> > Actions;
++  typedef std::vector<std::shared_ptr<TypePromotionAction>>::iterator CommitPt;
+ };
+ 
+ void TypePromotionTransaction::setOperand(Instruction *Inst, unsigned Idx,
+                                           Value *NewVal) {
+   Actions.push_back(
+-      make_unique<TypePromotionTransaction::OperandSetter>(Inst, Idx, NewVal));
++      std::make_shared<TypePromotionTransaction::OperandSetter>(Inst,
++                                                                Idx, NewVal));
+ }
+ 
+ void TypePromotionTransaction::eraseInstruction(Instruction *Inst,
+                                                 Value *NewVal) {
+   Actions.push_back(
+-      make_unique<TypePromotionTransaction::InstructionRemover>(Inst, NewVal));
++      std::make_shared<TypePromotionTransaction::InstructionRemover>(Inst,
++                                                                     NewVal));
+ }
+ 
+ void TypePromotionTransaction::replaceAllUsesWith(Instruction *Inst,
+                                                   Value *New) {
+-  Actions.push_back(make_unique<TypePromotionTransaction::UsesReplacer>(Inst, New));
++  Actions.push_back(
++    std::make_shared<TypePromotionTransaction::UsesReplacer>(Inst, New));
+ }
+ 
+ void TypePromotionTransaction::mutateType(Instruction *Inst, Type *NewTy) {
+-  Actions.push_back(make_unique<TypePromotionTransaction::TypeMutator>(Inst, NewTy));
++  Actions.push_back(
++    std::make_shared<TypePromotionTransaction::TypeMutator>(Inst, NewTy));
+ }
+ 
+ Value *TypePromotionTransaction::createTrunc(Instruction *Opnd,
+                                              Type *Ty) {
+-  std::unique_ptr<TruncBuilder> Ptr(new TruncBuilder(Opnd, Ty));
++  std::shared_ptr<TruncBuilder> Ptr(new TruncBuilder(Opnd, Ty));
+   Value *Val = Ptr->getBuiltValue();
+-  Actions.push_back(std::move(Ptr));
++  Actions.push_back(Ptr);
+   return Val;
+ }
+ 
+ Value *TypePromotionTransaction::createSExt(Instruction *Inst,
+                                             Value *Opnd, Type *Ty) {
+-  std::unique_ptr<SExtBuilder> Ptr(new SExtBuilder(Inst, Opnd, Ty));
++  std::shared_ptr<SExtBuilder> Ptr(new SExtBuilder(Inst, Opnd, Ty));
+   Value *Val = Ptr->getBuiltValue();
+-  Actions.push_back(std::move(Ptr));
++  Actions.push_back(Ptr);
+   return Val;
+ }
+ 
+ Value *TypePromotionTransaction::createZExt(Instruction *Inst,
+                                             Value *Opnd, Type *Ty) {
+-  std::unique_ptr<ZExtBuilder> Ptr(new ZExtBuilder(Inst, Opnd, Ty));
++  std::shared_ptr<ZExtBuilder> Ptr(new ZExtBuilder(Inst, Opnd, Ty));
+   Value *Val = Ptr->getBuiltValue();
+-  Actions.push_back(std::move(Ptr));
++  Actions.push_back(Ptr);
+   return Val;
+ }
+ 
+ void TypePromotionTransaction::moveBefore(Instruction *Inst,
+                                           Instruction *Before) {
+   Actions.push_back(
+-      make_unique<TypePromotionTransaction::InstructionMoveBefore>(Inst, Before));
++      std::make_shared<TypePromotionTransaction::InstructionMoveBefore>(Inst,
++                                                                        Before));
+ }
+ 
+ TypePromotionTransaction::ConstRestorationPt
[email protected]@ -2515,8 +2523,9 @@
+ void TypePromotionTransaction::rollback(
+     TypePromotionTransaction::ConstRestorationPt Point) {
+   while (!Actions.empty() && Point != Actions.back().get()) {
+-    std::unique_ptr<TypePromotionAction> Curr = Actions.pop_back_val();
++    std::shared_ptr<TypePromotionAction> Curr = Actions.back();
+     Curr->undo();
++    Actions.pop_back();
+   }
+ }
+ 
+###
+--- lib/CodeGen/Passes.cpp	2015-12-16 03:09:48.000000000 -0800
++++ lib/CodeGen/Passes.cpp	2016-05-13 17:38:47.747582295 -0700
[email protected]@ -31,9 +31,17 @@
+ #include "llvm/Transforms/Instrumentation.h"
+ #include "llvm/Transforms/Scalar.h"
+ #include "llvm/Transforms/Utils/SymbolRewriter.h"
+-
++#include "llvm/LinkAllPasses.h"
+ using namespace llvm;
+ 
++//===----------------------------------------------------------------------===//
++/// See the file ${top_srcdir}/include/llvm/LinkAllPasses.h for the
++/// explanation of this hack.
++namespace llvm {
++    ForcePassLinking* ForcePassLinking::FPL = new llvm::ForcePassLinking();
++} // namespace llvm
++//===----------------------------------------------------------------------===//
++
+ static cl::opt<bool> DisablePostRA("disable-post-ra", cl::Hidden,
+     cl::desc("Disable Post Regalloc"));
+ static cl::opt<bool> DisableBranchFold("disable-branch-fold", cl::Hidden,
+###
+--- lib/CodeGen/TargetLoweringObjectFileImpl.cpp	2015-11-17 22:02:15.000000000 -0800
++++ lib/CodeGen/TargetLoweringObjectFileImpl.cpp	2016-05-25 14:26:17.415867207 -0700
[email protected]@ -360,8 +360,10 @@
+   return DataRelROSection;
+ }
+ 
+-static MCSectionELF *getStaticStructorSection(MCContext &Ctx, bool UseInitArray,
+-                                              bool IsCtor, unsigned Priority,
++static MCSectionELF *getStaticStructorSection(MCContext &Ctx,
++                                              bool UseInitArray,
++                                              bool IsCtor,
++                                              unsigned Priority,
+                                               const MCSymbol *KeySym) {
+   std::string Name;
+   unsigned Type;
[email protected]@ -379,21 +381,34 @@
+       Type = ELF::SHT_FINI_ARRAY;
+       Name = ".fini_array";
+     }
++
+     if (Priority != 65535) {
+       Name += '.';
+-      Name += utostr(Priority);
++      Name += std::to_string(Priority);
+     }
+   } else {
+-    // The default scheme is .ctor / .dtor, so we have to invert the priority
+-    // numbering.
+-    if (IsCtor)
+-      Name = ".ctors";
+-    else
+-      Name = ".dtors";
++    if (Ctx.getObjectFileInfo()->getTargetTriple().getOS() ==
++        llvm::Triple::Solaris) {
++      // on Solaris we use .inift/.fini because the Solaris linker
++      // can't handle .ctors/.dtors.
++      if (IsCtor)
++        Name = ".init";
++      else
++        Name = ".fini";
++    } else {
++      // The default scheme is .ctor / .dtor, so we have to invert the priority
++      // numbering.
++      if (IsCtor)
++        Name = ".ctors";
++      else
++        Name = ".dtors";
++    }
++
+     if (Priority != 65535) {
+       Name += '.';
+-      Name += utostr(65535 - Priority);
++      Name += std::to_string(65535 - Priority);
+     }
++
+     Type = ELF::SHT_PROGBITS;
+   }
+ 
+###
+
--- a/components/llvm/patches/002-Makefile.patch	Thu Jul 28 16:15:45 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-# Solaris autoconf-based build.
-# https://llvm.org/bugs/show_bug.cgi?id=24641
---- tools/llvm-shlib/Makefile	2014-07-31 23:16:03.000000000 -0700
-+++ tools/llvm-shlib/Makefile	2015-06-07 11:01:59.791190596 -0700
[email protected]@ -71,7 +71,9 @@
- 
- ifeq ($(HOST_OS),SunOS)
-     # add -z allextract ahead of other libraries on Solaris
--    LLVMLibsOptions := -Wl,-z -Wl,allextract $(LLVMLibsOptions)
-+    LLVMLibsOptions := -Wl,-z -Wl,rescan -Wl,-z -Wl,allextract $(LLVMLibsOptions)
-+    LLVMLibsOptions += -Wl,-h -Wl,lib$(LIBRARYNAME)$(SHLIBEXT)
-+    LLVMLibsOptions += -Wl,-z -Wl,defaultextract -Wl,-z -Wl,defs
- endif
- 
- ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/patches/002-solaris-LLVM-libLLVMSupport.patch	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,5472 @@
+# 24314638 LLVM CommandLine subsystem is busted
+# 24314687 static initialization of optimization passes doesn't work as
+# intended
+# 3.9.X for upstream.
+--- include/llvm/Support/raw_ostream.h	2015-12-16 14:59:06.000000000 -0800
++++ include/llvm/Support/raw_ostream.h	2016-05-19 17:27:46.046422643 -0700
[email protected]@ -35,7 +35,7 @@
+ /// output to a stream.  It does not support seeking, reopening, rewinding, line
+ /// buffered disciplines etc. It is a simple buffer that outputs
+ /// a chunk at a time.
+-class raw_ostream {
++class LLVM_ALIGNAS(/*alignof(uint64_t)*/ 8) raw_ostream {
+ private:
+   void operator=(const raw_ostream &) = delete;
+   raw_ostream(const raw_ostream &) = delete;
+###
+--- lib/Support/raw_ostream.cpp	2016-01-11	15:33:03.000000000 -0800
++++ lib/Support/raw_ostream.cpp	2016-05-25	20:32:16.532306707 -0700
[email protected]@ -20,7 +20,9 @@
+ #include "llvm/Support/ErrorHandling.h"
+ #include "llvm/Support/FileSystem.h"
+ #include "llvm/Support/Format.h"
++#include "llvm/Support/ManagedStatic.h"
+ #include "llvm/Support/MathExtras.h"
++#include "llvm/Support/Mutex.h"
+ #include "llvm/Support/Process.h"
+ #include "llvm/Support/Program.h"
+ #include <cctype>
[email protected]@ -496,7 +498,7 @@
+   // Handle "-" as stdout. Note that when we do this, we consider ourself
+   // the owner of stdout. This means that we can do things like close the
+   // file descriptor when we're done and set the "binary" flag globally.
+-  if (Filename == "-") {
++  if (Filename == StringRef("-")) {
+     EC = std::error_code();
+     // If user requested binary then put stdout into binary mode if
+     // possible.
[email protected]@ -515,38 +517,61 @@
+ 
+ raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC,
+                                sys::fs::OpenFlags Flags)
+-    : raw_fd_ostream(getFD(Filename, EC, Flags), true) {}
++  : raw_pwrite_stream(true), FD(-1), ShouldClose(false),
++  Error(false), pos(static_cast<uint64_t>(-1)), SupportsSeeking(false) {
++    this->FD = getFD(Filename, EC, Flags);
++    if (this->FD < 0 ) {
++      ShouldClose = false;
++      return;
++    }
++
++  // Get the starting position.
++  off_t loc = ::lseek(this->FD, 0, SEEK_CUR);
++#ifdef LLVM_ON_WIN32
++  // MSVCRT's _lseek(SEEK_CUR) doesn't return -1 for pipes.
++  sys::fs::file_status Status;
++  std::error_code EC = status(FD, Status);
++  SupportsSeeking = !EC && Status.type() == sys::fs::file_type::regular_file;
++#else
++  SupportsSeeking = loc != static_cast<off_t>(-1);
++#endif
++  if (!SupportsSeeking)
++    pos = 0ULL;
++  else
++    pos = static_cast<uint64_t>(loc);
++}
+ 
+ /// FD is the file descriptor that this writes to.  If ShouldClose is true, this
+ /// closes the file when the stream is destroyed.
+ raw_fd_ostream::raw_fd_ostream(int fd, bool shouldClose, bool unbuffered)
+     : raw_pwrite_stream(unbuffered), FD(fd), ShouldClose(shouldClose),
+-      Error(false) {
+-  if (FD < 0 ) {
++  Error(false), pos(static_cast<uint64_t>(-1)), SupportsSeeking(false) {
++  if (this->FD < 0 ) {
+     ShouldClose = false;
+     return;
+   }
+ 
+   // Get the starting position.
+-  off_t loc = ::lseek(FD, 0, SEEK_CUR);
++  off_t loc = ::lseek(this->FD, 0, SEEK_CUR);
+ #ifdef LLVM_ON_WIN32
+   // MSVCRT's _lseek(SEEK_CUR) doesn't return -1 for pipes.
+   sys::fs::file_status Status;
+   std::error_code EC = status(FD, Status);
+   SupportsSeeking = !EC && Status.type() == sys::fs::file_type::regular_file;
+ #else
+-  SupportsSeeking = loc != (off_t)-1;
++  SupportsSeeking = loc != static_cast<off_t>(-1);
+ #endif
+   if (!SupportsSeeking)
+-    pos = 0;
++    pos = 0ULL;
+   else
+     pos = static_cast<uint64_t>(loc);
+ }
+ 
+ raw_fd_ostream::~raw_fd_ostream() {
+-  if (FD >= 0) {
++  if (this->FD >= 0) {
+     flush();
+-    if (ShouldClose && sys::Process::SafelyCloseFileDescriptor(FD))
++
++    if (ShouldClose && sys::Process::SafelyCloseFileDescriptor(this->FD))
+       error_detected();
+   }
+ 
[email protected]@ -585,7 +610,7 @@
+     if (ChunkSize > 32767 && ShouldWriteInChunks)
+         ChunkSize = 32767;
+ 
+-    ssize_t ret = ::write(FD, Ptr, ChunkSize);
++    ssize_t ret = ::write(this->FD, Ptr, ChunkSize);
+ 
+     if (ret < 0) {
+       // If it's a recoverable error, swallow it and retry the write.
[email protected]@ -617,11 +642,14 @@
+ }
+ 
+ void raw_fd_ostream::close() {
+-  assert(ShouldClose);
++  if (FD == -1) {
++    ShouldClose = false;
++    return;
++  }
++
+   ShouldClose = false;
+   flush();
+-  if (sys::Process::SafelyCloseFileDescriptor(FD))
+-    error_detected();
++  (void) sys::Process::SafelyCloseFileDescriptor(FD);
+   FD = -1;
+ }
+ 
[email protected]@ -715,30 +743,64 @@
+ //  outs(), errs(), nulls()
+ //===----------------------------------------------------------------------===//
+ 
++static raw_fd_ostream *SOUT = nullptr;
++static llvm::ManagedStatic<llvm::sys::SmartMutex<true> > SOutMutex;
++
++static raw_fd_ostream *SERR = nullptr;
++static llvm::ManagedStatic<llvm::sys::SmartMutex<true> > SErrMutex;
++
++static raw_null_ostream *SNULL = nullptr;
++static llvm::ManagedStatic<llvm::sys::SmartMutex<true> > SNullMutex;
++
+ /// outs() - This returns a reference to a raw_ostream for standard output.
+ /// Use it like: outs() << "foo" << "bar";
++__attribute__((noinline))
+ raw_ostream &llvm::outs() {
+   // Set buffer settings to model stdout behavior.
+   // Delete the file descriptor when the program exits, forcing error
+   // detection. If you don't want this behavior, don't use outs().
+-  std::error_code EC;
+-  static raw_fd_ostream S("-", EC, sys::fs::F_None);
+-  assert(!EC);
+-  return S;
++  // This makes absolutely no sense whatsoever. getFD returns STDOUT_FILENO
++  // anyway.
++
++  if (!SOUT) {
++    llvm::sys::SmartScopedLock<true> Lock(*SOutMutex);
++    if (!SOUT) {
++      SOUT = new raw_fd_ostream(STDOUT_FILENO, false, false);
++      assert(SOUT);
++    }
++  }
++
++  return *SOUT;
+ }
+ 
+ /// errs() - This returns a reference to a raw_ostream for standard error.
+ /// Use it like: errs() << "foo" << "bar";
++__attribute__((noinline))
+ raw_ostream &llvm::errs() {
+   // Set standard error to be unbuffered by default.
+-  static raw_fd_ostream S(STDERR_FILENO, false, true);
+-  return S;
++  if (!SERR) {
++    llvm::sys::SmartScopedLock<true> Lock(*SErrMutex);
++    if (!SERR) {
++      SERR = new raw_fd_ostream(STDERR_FILENO, false, true);
++      assert(SERR);
++    }
++  }
++
++  return *SERR;
+ }
+ 
+ /// nulls() - This returns a reference to a raw_ostream which discards output.
++__attribute__((noinline))
+ raw_ostream &llvm::nulls() {
+-  static raw_null_ostream S;
+-  return S;
++  if (!SNULL) {
++    llvm::sys::SmartScopedLock<true> Lock(*SNullMutex);
++    if (!SNULL) {
++      SNULL = new raw_null_ostream();
++      assert(SNULL);
++    }
++  }
++
++  return *SNULL;
+ }
+ 
+ 
+###
+--- include/llvm/Support/CommandLine.h	2015-11-17 10:00:52.000000000 -0900
++++ include/llvm/Support/CommandLine.h	2016-07-05 20:30:35.333194355 -0800
[email protected]@ -25,11 +25,13 @@
+ #include "llvm/ADT/StringMap.h"
+ #include "llvm/ADT/Twine.h"
+ #include "llvm/Support/Compiler.h"
++#include "llvm/Support/raw_ostream.h"
+ #include <cassert>
+ #include <climits>
+ #include <cstdarg>
+ #include <utility>
+ #include <vector>
++#include <type_traits>
+ 
+ namespace llvm {
+ 
[email protected]@ -111,7 +113,9 @@
+   // zero reserved for the unspecified value
+   ValueOptional = 0x01,  // The value can appear... or not
+   ValueRequired = 0x02,  // The value is required to appear!
+-  ValueDisallowed = 0x03 // A value may not be specified (for flags)
++  ValueDisallowed = 0x03,         // A value may not be specified (for flags)
++  ValuePositionalNoArgs = 0x04,   // Positional Argument, no additional args
++  ValuePositionalWithArgs = 0x05  // Positional Argument, with additional args
+ };
+ 
+ enum OptionHidden {   // Control whether -help shows this option
[email protected]@ -149,6 +153,43 @@
+ };
+ 
+ //===----------------------------------------------------------------------===//
++// Generic Filename Locations
++//
++struct GenericFilenameLocation {
++  GenericFilenameLocation() : Value("") { }
++  GenericFilenameLocation(const std::string &S) : Value(S) { }
++  GenericFilenameLocation(std::string &&S)
++    : Value(std::move(S)) { }
++
++  void operator=(const std::string &S) {
++    if (!S.empty())
++      Value = S;
++  }
++
++  void operator=(std::string &&S) {
++    if (!S.empty())
++      Value = std::move(S);
++  }
++
++  std::string Value;
++};
++
++struct GenericFilenameLocations {
++  GenericFilenameLocations() : Value() { }
++  GenericFilenameLocations(const std::string &S)
++    : Value() {
++      Value.push_back(S);
++    }
++
++  void operator=(const std::string &S) {
++    if (!S.empty())
++      Value.push_back(S);
++  }
++
++  std::vector<std::string> Value;
++};
++
++//===----------------------------------------------------------------------===//
+ // Option Category class
+ //
+ class OptionCategory {
[email protected]@ -176,6 +217,16 @@
+ class alias;
+ class Option {
+   friend class alias;
++  friend class OptionRegistry;
++
++protected:
++  /// RegisteredOptionList - This is the list of the command line options
++  /// that have statically constructed themselves.
++  static Option *RegisteredOptionList;
++
++  /// NumRegisteredOptions - The number of Options registered with the
++  /// RegisteredOptionList.
++  static unsigned NumRegisteredOptions;
+ 
+   // handleOccurrences - Overriden by subclasses to handle the value passed into
+   // an argument.  Should return true if there was an error processing the
[email protected]@ -191,51 +242,65 @@
+   // Out of line virtual function to provide home for the class.
+   virtual void anchor();
+ 
+-  int NumOccurrences; // The number of times specified
++  // The number of times specified
++  int NumOccurrences;
++
+   // Occurrences, HiddenFlag, and Formatting are all enum types but to avoid
+   // problems with signed enums in bitfields.
+-  unsigned Occurrences : 3; // enum NumOccurrencesFlag
++  unsigned Occurrences; // enum NumOccurrencesFlag
++
++  // This Option's position index in the RegisteredOptionList.
++  // -1 means this option hasn't been registered.
++  int OptionIndex;
++
+   // not using the enum type for 'Value' because zero is an implementation
+   // detail representing the non-value
+-  unsigned Value : 2;
+-  unsigned HiddenFlag : 2; // enum OptionHidden
+-  unsigned Formatting : 2; // enum FormattingFlags
+-  unsigned Misc : 3;
++  unsigned Value;
++
++  unsigned HiddenFlag; // enum OptionHidden
++  unsigned Formatting; // enum FormattingFlags
++  unsigned Misc;
+   unsigned Position;       // Position of last occurrence of the option
+   unsigned AdditionalVals; // Greater than 0 for multi-valued option.
++  Option *NextRegistered;
+ 
+ public:
+-  StringRef ArgStr;   // The argument string itself (ex: "help", "o")
+-  StringRef HelpStr;  // The descriptive text message for -help
+-  StringRef ValueStr; // String describing what the value of this option is
++  const char *ArgStr;   // The argument string itself (ex: "help", "o")
++  const char *HelpStr;  // The descriptive text message for -help
++  const char *ValueStr; // String describing what the value of this option is
+   OptionCategory *Category; // The Category this option belongs to
+   bool FullyInitialized;    // Has addArguemnt been called?
+ 
+   inline enum NumOccurrencesFlag getNumOccurrencesFlag() const {
+-    return (enum NumOccurrencesFlag)Occurrences;
++    return static_cast<enum NumOccurrencesFlag>(Occurrences);
+   }
++
+   inline enum ValueExpected getValueExpectedFlag() const {
+-    return Value ? ((enum ValueExpected)Value) : getValueExpectedFlagDefault();
++    return Value ?
++      static_cast<enum ValueExpected>(Value) : getValueExpectedFlagDefault();
+   }
++
+   inline enum OptionHidden getOptionHiddenFlag() const {
+-    return (enum OptionHidden)HiddenFlag;
++    return static_cast<enum OptionHidden>(HiddenFlag);
+   }
++
+   inline enum FormattingFlags getFormattingFlag() const {
+-    return (enum FormattingFlags)Formatting;
++    return static_cast<enum FormattingFlags>(Formatting);
+   }
++
+   inline unsigned getMiscFlags() const { return Misc; }
+   inline unsigned getPosition() const { return Position; }
+   inline unsigned getNumAdditionalVals() const { return AdditionalVals; }
+ 
+   // hasArgStr - Return true if the argstr != ""
+-  bool hasArgStr() const { return !ArgStr.empty(); }
++  bool hasArgStr() const { return ArgStr && *ArgStr != '\0'; }
+ 
+   //-------------------------------------------------------------------------===
+   // Accessor functions set by OptionModifiers
+   //
+-  void setArgStr(StringRef S);
+-  void setDescription(StringRef S) { HelpStr = S; }
+-  void setValueStr(StringRef S) { ValueStr = S; }
++  void setArgStr(const char *S);
++  void setDescription(const char *S) { HelpStr = S; }
++  void setValueStr(const char *S) { ValueStr = S; }
+   void setNumOccurrencesFlag(enum NumOccurrencesFlag Val) { Occurrences = Val; }
+   void setValueExpectedFlag(enum ValueExpected Val) { Value = Val; }
+   void setHiddenFlag(enum OptionHidden Val) { HiddenFlag = Val; }
[email protected]@ -245,16 +310,121 @@
+   void setCategory(OptionCategory &C) { Category = &C; }
+ 
+ protected:
++  Option() : NumOccurrences(0),
++  Occurrences(0),
++  OptionIndex(-1),
++  Value(0U),
++  HiddenFlag(0U),
++  Formatting(0U),
++  Misc(0U),
++  Position(0U),
++  AdditionalVals(0U),
++  NextRegistered(nullptr),
++  ArgStr(""),
++  HelpStr(""),
++  ValueStr(""),
++  Category(nullptr),
++  FullyInitialized(false) { }
++
+   explicit Option(enum NumOccurrencesFlag OccurrencesFlag,
+                   enum OptionHidden Hidden)
+-      : NumOccurrences(0), Occurrences(OccurrencesFlag), Value(0),
+-        HiddenFlag(Hidden), Formatting(NormalFormatting), Misc(0), Position(0),
+-        AdditionalVals(0), ArgStr(""), HelpStr(""), ValueStr(""),
+-        Category(&GeneralCategory), FullyInitialized(false) {}
++    : NumOccurrences(0),
++    Occurrences(OccurrencesFlag),
++    OptionIndex(-1),
++    Value(0U),
++    HiddenFlag(Hidden),
++    Formatting(NormalFormatting),
++    Misc(0U),
++    Position(0U),
++    AdditionalVals(0U),
++    NextRegistered(nullptr),
++    ArgStr(""),
++    HelpStr(""),
++    ValueStr(""),
++    Category(&GeneralCategory),
++    FullyInitialized(false) { }
+ 
+   inline void setNumAdditionalVals(unsigned n) { AdditionalVals = n; }
+ 
+ public:
++  Option(const Option &RHS)
++    : NumOccurrences(RHS.NumOccurrences),
++    Occurrences(RHS.Occurrences),
++    OptionIndex(RHS.OptionIndex),
++    Value(RHS.Value),
++    HiddenFlag(RHS.HiddenFlag),
++    Formatting(RHS.Formatting),
++    Misc(RHS.Misc),
++    Position(RHS.Position),
++    AdditionalVals(RHS.AdditionalVals),
++    NextRegistered(RHS.NextRegistered),
++    ArgStr(RHS.ArgStr),
++    HelpStr(RHS.HelpStr),
++    ValueStr(RHS.ValueStr),
++    Category(RHS.Category),
++    FullyInitialized(RHS.FullyInitialized)  { }
++
++  Option(Option &&RHS)
++    : NumOccurrences(std::move(RHS.NumOccurrences)),
++    Occurrences(std::move(RHS.Occurrences)),
++    OptionIndex(std::move(RHS.OptionIndex)),
++    Value(std::move(RHS.Value)),
++    HiddenFlag(std::move(RHS.HiddenFlag)),
++    Formatting(std::move(RHS.Formatting)),
++    Misc(std::move(RHS.Misc)),
++    Position(std::move(RHS.Position)),
++    AdditionalVals(std::move(RHS.AdditionalVals)),
++    NextRegistered(std::move(RHS.NextRegistered)),
++    ArgStr(std::move(RHS.ArgStr)),
++    HelpStr(std::move(RHS.HelpStr)),
++    ValueStr(std::move(RHS.ValueStr)),
++    Category(std::move(RHS.Category)),
++    FullyInitialized(std::move(RHS.FullyInitialized)) { }
++
++  Option &operator=(const Option &RHS) {
++    if (this != &RHS) {
++      NumOccurrences = RHS.NumOccurrences;
++      Occurrences = RHS.Occurrences;
++      OptionIndex = RHS.OptionIndex;
++      Value = RHS.Value;
++      HiddenFlag = RHS.HiddenFlag;
++      Formatting = RHS.Formatting;
++      Misc = RHS.Misc;
++      Position = RHS.Position;
++      AdditionalVals = RHS.AdditionalVals;
++      NextRegistered = RHS.NextRegistered;
++      ArgStr = RHS.ArgStr;
++      HelpStr = RHS.HelpStr;
++      ValueStr = RHS.ValueStr;
++      Category = RHS.Category;
++      FullyInitialized = RHS.FullyInitialized;
++    }
++
++    return *this;
++  }
++
++  const Option &operator=(Option &&RHS) {
++    if (this != &RHS) {
++      NumOccurrences = std::move(RHS.NumOccurrences);
++      Occurrences = std::move(RHS.Occurrences);
++      OptionIndex = RHS.OptionIndex;
++      Value = std::move(RHS.Value);
++      HiddenFlag = std::move(RHS.HiddenFlag);
++      Formatting = std::move(RHS.Formatting);
++      Misc = std::move(RHS.Misc);
++      Position = std::move(RHS.Position);
++      AdditionalVals = std::move(RHS.AdditionalVals);
++      NextRegistered = std::move(RHS.NextRegistered);
++      ArgStr = std::move(RHS.ArgStr);
++      HelpStr = std::move(RHS.HelpStr);
++      ValueStr = std::move(RHS.ValueStr);
++      Category = std::move(RHS.Category);
++      FullyInitialized = std::move(RHS.FullyInitialized);
++    }
++
++    return *this;
++  }
++
+   // addArgument - Register this argument with the commandline system.
+   //
+   void addArgument();
[email protected]@ -265,6 +435,32 @@
+   /// For testing purposes only.
+   void removeArgument();
+ 
++  static void registerOption(Option *O) {
++    assert(O && "Invalid argument!");
++
++    O->NextRegistered = Option::RegisteredOptionList;
++    Option::RegisteredOptionList = O;
++    O->OptionIndex = Option::NumRegisteredOptions;
++    ++Option::NumRegisteredOptions;
++    O->FullyInitialized = true;
++  }
++
++  static Option *getRegisteredOptionList() {
++    return Option::RegisteredOptionList;
++  }
++
++  static unsigned getNumRegisteredOptions() {
++    return Option::NumRegisteredOptions;
++  }
++
++  virtual Option *getNextRegisteredOption() const {
++    if ((OptionIndex == -1) ||
++        (OptionIndex >= static_cast<int>(Option::NumRegisteredOptions)))
++      return nullptr;
++
++    return NextRegistered;
++  }
++
+   // Return the width of the option tag for printing...
+   virtual size_t getOptionWidth() const = 0;
+ 
[email protected]@ -275,13 +471,17 @@
+ 
+   virtual void printOptionValue(size_t GlobalWidth, bool Force) const = 0;
+ 
+-  virtual void getExtraOptionNames(SmallVectorImpl<StringRef> &) {}
++  virtual void getExtraOptionNames(std::vector<const char*> &V) { }
+ 
+   // addOccurrence - Wrapper around handleOccurrence that enforces Flags.
+   //
+   virtual bool addOccurrence(unsigned pos, StringRef ArgName, StringRef Value,
+                              bool MultiArg = false);
+ 
++  // addOccurrence - Increment the NumOccurrences counter.
++  //
++  virtual void addOccurrence();
++
+   // Prints option name followed by message.  Always returns true.
+   bool error(const Twine &Message, StringRef ArgName = StringRef());
+ 
[email protected]@ -298,6 +498,7 @@
+ // desc - Modifier to set the description shown in the -help output...
+ struct desc {
+   const char *Desc;
++  desc() : Desc("") { }
+   desc(const char *Str) : Desc(Str) {}
+   void apply(Option &O) const { O.setDescription(Desc); }
+ };
[email protected]@ -306,6 +507,7 @@
+ // output...
+ struct value_desc {
+   const char *Desc;
++  value_desc() : Desc("") { }
+   value_desc(const char *Str) : Desc(Str) {}
+   void apply(Option &O) const { O.setValueStr(Desc); }
+ };
[email protected]@ -314,29 +516,37 @@
+ // the default constructor for the argument type does not give you what you
+ // want.  This is only valid on "opt" arguments, not on "list" arguments.
+ //
+-template <class Ty> struct initializer {
++template<typename Ty> struct initializer {
+   const Ty &Init;
+   initializer(const Ty &Val) : Init(Val) {}
++  initializer(const initializer &RHS) : Init(RHS.Init) { }
++  initializer(initializer &&RHS) : Init(RHS.Init) { }
+ 
+-  template <class Opt> void apply(Opt &O) const { O.setInitialValue(Init); }
++  template <typename Opt> void apply(Opt &O) const { O.setInitialValue(Init); }
+ };
+ 
+-template <class Ty> initializer<Ty> init(const Ty &Val) {
+-  return initializer<Ty>(Val);
++template <typename Ty>
++initializer<Ty> init(const Ty &Val) {
++  llvm::cl::initializer<Ty> I(Val);
++  return I;
+ }
+ 
+ // location - Allow the user to specify which external variable they want to
+ // store the results of the command line argument processing into, if they don't
+ // want to store it in the option itself.
+ //
+-template <class Ty> struct LocationClass {
++template <typename Ty> struct LocationClass {
+   Ty &Loc;
++
+   LocationClass(Ty &L) : Loc(L) {}
++  LocationClass(const LocationClass &RHS) : Loc(RHS.Loc) { }
++  LocationClass(LocationClass &&RHS) : Loc(RHS.Loc) { }
+ 
+-  template <class Opt> void apply(Opt &O) const { O.setLocation(O, Loc); }
++  template <typename Opt>
++  void apply(Opt &O) const { O.setLocation(O, Loc); }
+ };
+ 
+-template <class Ty> LocationClass<Ty> location(Ty &L) {
++template <typename Ty> LocationClass<Ty> location(Ty &L) {
+   return LocationClass<Ty>(L);
+ }
+ 
[email protected]@ -344,43 +554,62 @@
+ // to.
+ struct cat {
+   OptionCategory &Category;
+-  cat(OptionCategory &c) : Category(c) {}
+ 
+-  template <class Opt> void apply(Opt &O) const { O.setCategory(Category); }
++  cat(OptionCategory &C) : Category(C) { }
++  cat(const cat &RHS) : Category(RHS.Category) { }
++  virtual ~cat() { }
++
++  template<typename Opt>
++  void apply(Opt &O) const { O.setCategory(Category); }
+ };
+ 
+ //===----------------------------------------------------------------------===//
+ // OptionValue class
+ 
+ // Support value comparison outside the template.
+-struct GenericOptionValue {
++class GenericOptionValue {
++public:
+   virtual bool compare(const GenericOptionValue &V) const = 0;
+ 
+ protected:
+-  ~GenericOptionValue() = default;
+-  GenericOptionValue() = default;
+-  GenericOptionValue(const GenericOptionValue&) = default;
+-  GenericOptionValue &operator=(const GenericOptionValue &) = default;
++  virtual ~GenericOptionValue() { }
++  GenericOptionValue() { }
++  GenericOptionValue(const GenericOptionValue &RHS) { }
++  GenericOptionValue(GenericOptionValue &&RHS) { }
++  GenericOptionValue &operator=(const GenericOptionValue &RHS) {
++    return *this;
++  }
++
++  const GenericOptionValue &operator=(GenericOptionValue &&RHS) {
++    return *this;
++  }
+ 
+ private:
+   virtual void anchor();
+ };
+ 
+-template <class DataType> struct OptionValue;
++template<typename DataType, bool> class OptionValue;
+ 
+ // The default value safely does nothing. Option value printing is only
+ // best-effort.
+-template <class DataType, bool isClass>
+-struct OptionValueBase : public GenericOptionValue {
++template<typename DataType, bool isClass>
++class OptionValueBase : public GenericOptionValue {
++public:
+   // Temporary storage for argument passing.
+-  typedef OptionValue<DataType> WrapperType;
++  typedef OptionValue<DataType, false> WrapperType;
+ 
+   bool hasValue() const { return false; }
+ 
+-  const DataType &getValue() const { llvm_unreachable("no default value"); }
++  const DataType &getValue() const {
++    llvm::errs() << __PRETTY_FUNCTION__ << ": no default value!\n";
++    abort();
++  }
++
++  void setValue(const DataType &V) { }
+ 
+   // Some options may take their value from a different data type.
+-  template <class DT> void setValue(const DT & /*V*/) {}
++  template<typename DT>
++  void setValue(const DT &V) { }
+ 
+   bool compare(const DataType & /*V*/) const { return false; }
+ 
[email protected]@ -389,21 +618,55 @@
+   }
+ 
+ protected:
+-  ~OptionValueBase() = default;
++  virtual ~OptionValueBase() { }
++
++public:
++  OptionValueBase() : GenericOptionValue() { }
+ };
+ 
+ // Simple copy of the option value.
+-template <class DataType> class OptionValueCopy : public GenericOptionValue {
++template<typename DataType>
++class OptionValueCopy : public GenericOptionValue {
++protected:
+   DataType Value;
+   bool Valid;
+ 
+-protected:
+-  ~OptionValueCopy() = default;
+-  OptionValueCopy(const OptionValueCopy&) = default;
+-  OptionValueCopy &operator=(const OptionValueCopy&) = default;
+-
+ public:
+-  OptionValueCopy() : Valid(false) {}
++  OptionValueCopy<DataType>()
++  : GenericOptionValue(), Value(), Valid(false) { }
++
++  OptionValueCopy<DataType>(const OptionValueCopy<DataType> &RHS)
++  : GenericOptionValue(RHS), Value(RHS.Value), Valid(RHS.Valid) { }
++
++  OptionValueCopy<DataType>&
++  operator=(const OptionValueCopy<DataType> &RHS) {
++    if (this != &RHS) {
++      GenericOptionValue::operator=(RHS);
++      Value = RHS.Value;
++      Valid = RHS.Valid;
++    }
++
++    return *this;
++  }
++
++  const OptionValueCopy<DataType>&
++  operator=(OptionValueCopy<DataType> &&RHS) {
++    if (this != &RHS) {
++      GenericOptionValue::operator=(RHS);
++      Value = std::move(RHS.Value);
++      Valid = std::move(RHS.Valid);
++    }
++
++    return *this;
++  }
++
++  OptionValueCopy<DataType> &operator=(const DataType& V) {
++    Value = V;
++    Valid = true;
++    return *this;
++  }
++
++  ~OptionValueCopy<DataType>() { }
+ 
+   bool hasValue() const { return Valid; }
+ 
[email protected]@ -417,6 +680,12 @@
+     Value = V;
+   }
+ 
++  template<typename DT>
++  void setValue(const DT &V) {
++    Valid = true;
++    Value = V;
++  }
++
+   bool compare(const DataType &V) const { return Valid && (Value != V); }
+ 
+   bool compare(const GenericOptionValue &V) const override {
[email protected]@ -429,117 +698,178 @@
+ };
+ 
+ // Non-class option values.
+-template <class DataType>
+-struct OptionValueBase<DataType, false> : OptionValueCopy<DataType> {
++template<typename DataType>
++class OptionValueBase<DataType, false> : public OptionValueCopy<DataType> {
++public:
+   typedef DataType WrapperType;
+ 
+ protected:
+-  ~OptionValueBase() = default;
+-  OptionValueBase() = default;
+-  OptionValueBase(const OptionValueBase&) = default;
+-  OptionValueBase &operator=(const OptionValueBase&) = default;
++  virtual ~OptionValueBase<DataType, false>() { }
++
++  OptionValueBase<DataType, false>()
++  : OptionValueCopy<DataType>() { }
++
++  OptionValueBase<DataType, false>(
++    const OptionValueBase<DataType, false> &RHS)
++  : OptionValueCopy<DataType>(RHS) { }
++
++  OptionValueBase<DataType, false>&
++  operator=(const OptionValueBase<DataType, false> &RHS) {
++    if (this != &RHS)
++      OptionValueCopy<DataType>::operator=(RHS);
++
++    return *this;
++  }
++
++  const OptionValueBase<DataType, false>&
++  operator=(OptionValueBase<DataType, false> &&RHS) {
++    if (this != &RHS)
++      OptionValueCopy<DataType>::operator=(RHS);
++
++    return *this;
++  }
++
++  void setValue(const DataType& V) {
++    OptionValueCopy<DataType>::setValue(V);
++  }
++
++  template<typename DT>
++  void setValue(const DT &V) {
++    OptionValueCopy<DataType>::setValue(V);
++  }
+ };
+ 
+ // Top-level option class.
+-template <class DataType>
+-struct OptionValue final
+-    : OptionValueBase<DataType, std::is_class<DataType>::value> {
+-  OptionValue() = default;
++template<typename DataType, bool IsClass = std::is_class<DataType>::value>
++class OptionValue final :
++  public OptionValueBase<DataType, std::is_class<DataType>::value> {
++public:
++  OptionValue<DataType, IsClass>()
++  : OptionValueBase<DataType, IsClass>() { }
++
++  OptionValue<DataType, IsClass>(const OptionValue<DataType, IsClass> &RHS)
++  : OptionValueBase<DataType, IsClass>(RHS) { }
++
++  OptionValue<DataType, IsClass>&
++  operator=(const OptionValue<DataType, IsClass> &RHS) {
++    if (this != &RHS) {
++      OptionValueBase<DataType, IsClass>::operator=(RHS);
++    }
++
++    return *this;
++  }
++
++  virtual ~OptionValue<DataType, IsClass>() { }
++
++  OptionValue<DataType, IsClass>(const DataType &V)
++  : OptionValueBase<DataType, IsClass>() {
++    OptionValueBase<DataType, IsClass>::setValue(V);
++  }
++
++  void setValue(const DataType &V) {
++    OptionValueBase<DataType, IsClass>::setValue(V);
++  }
++
++  template<typename DT>
++  void setValue(const DT &V) {
++    OptionValueBase<DataType, IsClass>::setValue(V);
++  }
+ 
+-  OptionValue(const DataType &V) { this->setValue(V); }
+   // Some options may take their value from a different data type.
+-  template <class DT> OptionValue<DataType> &operator=(const DT &V) {
+-    this->setValue(V);
++  template<typename DT>
++  OptionValue<DataType, IsClass> &operator=(const DT &V) {
++    // this->setValue(V);
++    OptionValueBase<DataType, IsClass>::setValue(V);
+     return *this;
+   }
+ };
+ 
+ // Other safe-to-copy-by-value common option types.
+ enum boolOrDefault { BOU_UNSET, BOU_TRUE, BOU_FALSE };
++
+ template <>
+-struct OptionValue<cl::boolOrDefault> final
+-    : OptionValueCopy<cl::boolOrDefault> {
++class OptionValue<cl::boolOrDefault> final
++    : public OptionValueCopy<cl::boolOrDefault> {
++public:
+   typedef cl::boolOrDefault WrapperType;
+ 
+-  OptionValue() {}
++  OptionValue<cl::boolOrDefault>()
++  : OptionValueCopy<cl::boolOrDefault>() { }
++
++  OptionValue<cl::boolOrDefault>(const OptionValue<cl::boolOrDefault> &RHS)
++  : OptionValueCopy<cl::boolOrDefault>(RHS) { }
++
++  OptionValue<cl::boolOrDefault>(const cl::boolOrDefault &V)
++  : OptionValueCopy<cl::boolOrDefault>() {
++    this->setValue(V);
++  }
+ 
+-  OptionValue(const cl::boolOrDefault &V) { this->setValue(V); }
+   OptionValue<cl::boolOrDefault> &operator=(const cl::boolOrDefault &V) {
+     setValue(V);
+     return *this;
+   }
+ 
++  OptionValue<cl::boolOrDefault>&
++  operator=(const OptionValue<cl::boolOrDefault> &RHS) {
++    if (this != &RHS) {
++      OptionValueCopy<cl::boolOrDefault>::operator=(RHS);
++      this->setValue(RHS.getValue());
++    }
++
++    return *this;
++  }
++
++  virtual ~OptionValue<cl::boolOrDefault>() { }
++
+ private:
+   void anchor() override;
+ };
+ 
+ template <>
+-struct OptionValue<std::string> final : OptionValueCopy<std::string> {
++class OptionValue<std::string> final : public OptionValueCopy<std::string> {
++public:
+   typedef StringRef WrapperType;
+ 
+-  OptionValue() {}
++  OptionValue<std::string>() : OptionValueCopy<std::string>() { }
++
++  OptionValue<std::string>(const OptionValue<std::string> &RHS)
++  : OptionValueCopy<std::string>(RHS) { }
++
++  OptionValue<std::string>(const std::string &V) {
++    this->setValue(V);
++  }
++
++  OptionValue<std::string>(std::string &&V) {
++    this->setValue(V);
++  }
+ 
+-  OptionValue(const std::string &V) { this->setValue(V); }
+   OptionValue<std::string> &operator=(const std::string &V) {
++    OptionValueCopy<std::string>::operator=(V);
+     setValue(V);
+     return *this;
+   }
+ 
+-private:
+-  void anchor() override;
+-};
+-
+-//===----------------------------------------------------------------------===//
+-// Enum valued command line option
+-//
+-#define clEnumVal(ENUMVAL, DESC) #ENUMVAL, int(ENUMVAL), DESC
+-#define clEnumValN(ENUMVAL, FLAGNAME, DESC) FLAGNAME, int(ENUMVAL), DESC
+-#define clEnumValEnd (reinterpret_cast<void *>(0))
+-
+-// values - For custom data types, allow specifying a group of values together
+-// as the values that go into the mapping that the option handler uses.  Note
+-// that the values list must always have a 0 at the end of the list to indicate
+-// that the list has ended.
+-//
+-template <class DataType> class ValuesClass {
+-  // Use a vector instead of a map, because the lists should be short,
+-  // the overhead is less, and most importantly, it keeps them in the order
+-  // inserted so we can print our option out nicely.
+-  SmallVector<std::pair<const char *, std::pair<int, const char *>>, 4> Values;
+-  void processValues(va_list Vals);
+-
+-public:
+-  ValuesClass(const char *EnumName, DataType Val, const char *Desc,
+-              va_list ValueArgs) {
+-    // Insert the first value, which is required.
+-    Values.push_back(std::make_pair(EnumName, std::make_pair(Val, Desc)));
+-
+-    // Process the varargs portion of the values...
+-    while (const char *enumName = va_arg(ValueArgs, const char *)) {
+-      DataType EnumVal = static_cast<DataType>(va_arg(ValueArgs, int));
+-      const char *EnumDesc = va_arg(ValueArgs, const char *);
+-      Values.push_back(std::make_pair(enumName, // Add value to value map
+-                                      std::make_pair(EnumVal, EnumDesc)));
+-    }
++  const OptionValue<std::string> &operator=(std::string &&V) {
++    OptionValueCopy<std::string>::operator=(V);
++    setValue(V);
++    return *this;
+   }
+ 
+-  template <class Opt> void apply(Opt &O) const {
+-    for (size_t i = 0, e = Values.size(); i != e; ++i)
+-      O.getParser().addLiteralOption(Values[i].first, Values[i].second.first,
+-                                     Values[i].second.second);
++  OptionValue<std::string> &operator=(const OptionValue<std::string> &RHS) {
++    if (this != &RHS) {
++      OptionValueCopy<std::string>::operator=(RHS);
++      setValue(RHS.getValue());
+   }
+-};
+ 
+-template <class DataType>
+-ValuesClass<DataType> LLVM_END_WITH_NULL
+-values(const char *Arg, DataType Val, const char *Desc, ...) {
+-  va_list ValueArgs;
+-  va_start(ValueArgs, Desc);
+-  ValuesClass<DataType> Vals(Arg, Val, Desc, ValueArgs);
+-  va_end(ValueArgs);
+-  return Vals;
++    return *this;
+ }
+ 
++  virtual ~OptionValue<std::string>() { }
++
++private:
++  void anchor() override;
++};
++
+ //===----------------------------------------------------------------------===//
+ // parser class - Parameterizable parser for different data types.  By default,
+ // known data types (string, int, bool) have specialized parsers, that do what
[email protected]@ -556,20 +886,73 @@
+ protected:
+   class GenericOptionInfo {
+   public:
++    GenericOptionInfo() : Name(""), HelpStr("") { }
++
+     GenericOptionInfo(const char *name, const char *helpStr)
+         : Name(name), HelpStr(helpStr) {}
++
++    GenericOptionInfo(const GenericOptionInfo &RHS)
++      : Name(RHS.Name), HelpStr(RHS.HelpStr) { }
++
++    GenericOptionInfo(GenericOptionInfo &&RHS)
++      : Name(RHS.Name), HelpStr(RHS.HelpStr) { }
++
++    virtual ~GenericOptionInfo() { }
++
++    GenericOptionInfo &operator=(const GenericOptionInfo &RHS) {
++      if (this != &RHS) {
++        Name = RHS.Name;
++        HelpStr = RHS.HelpStr;
++      }
++
++      return *this;
++    }
++
++    const GenericOptionInfo &operator=(GenericOptionInfo &&RHS) {
++      if (this != &RHS) {
++        Name = std::move(RHS.Name);
++        HelpStr = std::move(RHS.HelpStr);
++      }
++
++      return *this;
++    }
++
+     const char *Name;
+     const char *HelpStr;
+   };
+ 
++  static Option *DefaultInvalidOption;
++
+ public:
+-  generic_parser_base(Option &O) : Owner(O) {}
++  generic_parser_base()
++  : Owner(generic_parser_base::DefaultInvalidOption) { }
++
++  generic_parser_base(Option &O) : Owner(&O) { }
++
++  generic_parser_base(const generic_parser_base &RHS)
++  : Owner(RHS.Owner) { }
++
++  generic_parser_base(generic_parser_base &&RHS)
++  : Owner(RHS.Owner) { }
++
++  virtual ~generic_parser_base() { }
++
++  generic_parser_base &operator=(const generic_parser_base &RHS) {
++    if (this != &RHS)
++      Owner = RHS.Owner;
++
++    return *this;
++  }
+ 
+-  virtual ~generic_parser_base() {} // Base class should have virtual-dtor
++  const generic_parser_base &operator=(generic_parser_base &&RHS) {
++    if (this != &RHS)
++      Owner = std::move(RHS.Owner);
++
++    return *this;
++  }
+ 
+   // getNumOptions - Virtual function implemented by generic subclass to
+   // indicate how many entries are in Values.
+-  //
+   virtual unsigned getNumOptions() const = 0;
+ 
+   // getOption - Return option name N.
[email protected]@ -597,19 +980,27 @@
+   // Template definition ensures that the option and default have the same
+   // DataType (via the same AnyOptionValue).
+   template <class AnyOptionValue>
+-  void printOptionDiff(const Option &O, const AnyOptionValue &V,
++  void printOptionDiff(const Option &O,
++                       const AnyOptionValue &V,
+                        const AnyOptionValue &Default,
+                        size_t GlobalWidth) const {
+     printGenericOptionDiff(O, V, Default, GlobalWidth);
+   }
+ 
+-  void initialize() {}
++  virtual bool isValid() const {
++    return Owner != DefaultInvalidOption;
++  }
++
++  virtual void initialize() { }
++  virtual void initialize(Option *O) { Owner = O; }
++  virtual void initialize(Option &O) { Owner = &O; }
+ 
+-  void getExtraOptionNames(SmallVectorImpl<StringRef> &OptionNames) {
++  virtual void
++  getExtraOptionNames(std::vector<const char*> &OptionNames) {
+     // If there has been no argstr specified, that means that we need to add an
+     // argument for every possible option.  This ensures that our options are
+     // vectored to us.
+-    if (!Owner.hasArgStr())
++    if (!Owner->hasArgStr())
+       for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
+         OptionNames.push_back(getOption(i));
+   }
[email protected]@ -626,7 +1017,7 @@
+     //
+     // If this is the case, we cannot allow a value.
+     //
+-    if (Owner.hasArgStr())
++    if (Owner->hasArgStr())
+       return ValueRequired;
+     else
+       return ValueDisallowed;
[email protected]@ -638,7 +1029,7 @@
+   unsigned findOption(const char *Name);
+ 
+ protected:
+-  Option &Owner;
++  Option *Owner;
+ };
+ 
+ // Default parser implementation - This implementation depends on having a
[email protected]@ -647,24 +1038,109 @@
+ // command line option for -help.  Because this is a simple mapping parser, the
+ // data type can be any unsupported type.
+ //
+-template <class DataType> class parser : public generic_parser_base {
++template<typename DataType>
++class parser : public generic_parser_base {
+ protected:
+   class OptionInfo : public GenericOptionInfo {
+   public:
+-    OptionInfo(const char *name, DataType v, const char *helpStr)
+-        : GenericOptionInfo(name, helpStr), V(v) {}
++    OptionInfo() : V() { }
++
++    OptionInfo(const char *Name, DataType DT, const char *HelpStr)
++      : GenericOptionInfo(Name, HelpStr), V(DT) { }
++
++    OptionInfo(const OptionInfo &RHS)
++      : GenericOptionInfo(RHS), V(RHS.V) { }
++
++    OptionInfo(OptionInfo &&RHS)
++      : GenericOptionInfo(RHS), V(RHS.V) { }
++
++    virtual ~OptionInfo() { }
++
++    OptionInfo &operator=(const OptionInfo &RHS) {
++      if (this != &RHS) {
++        GenericOptionInfo::operator=(RHS);
++        V = RHS.V;
++      }
++
++      return *this;
++    }
++
++    const OptionInfo &operator=(OptionInfo &&RHS) {
++      if (this != &RHS) {
++        GenericOptionInfo::operator=(RHS);
++        V = std::move(RHS.V);
++      }
++
++      return *this;
++    }
++
++    OptionInfo &operator=(const OptionValue<DataType> &RHS) {
++      V = RHS;
++      return *this;
++    }
++
++    const OptionInfo &operator=(OptionValue<DataType> &&RHS) {
++      V = std::move(RHS);
++      return *this;
++    }
++
+     OptionValue<DataType> V;
+   };
+-  SmallVector<OptionInfo, 8> Values;
++
++  std::vector<OptionInfo> Values;
+ 
+ public:
+-  parser(Option &O) : generic_parser_base(O) {}
++  parser<DataType>()
++  : generic_parser_base(), Values() { }
++
++  parser<DataType>(Option &O)
++  : generic_parser_base(O), Values() { }
++
++  parser<DataType>(const parser<DataType> &RHS)
++  : generic_parser_base(RHS), Values(RHS.Values) { }
++
++  parser<DataType>(parser<DataType> &&RHS)
++  : generic_parser_base(RHS), Values(RHS.Values) { }
++
++  virtual ~parser<DataType>() { }
++
++  parser<DataType> &operator=(const parser<DataType> &RHS) {
++    if (this != &RHS) {
++      generic_parser_base::operator=(RHS);
++      Values = RHS.Values;
++    }
++
++    return *this;
++  }
++
++  const parser<DataType> &operator=(parser<DataType> &&RHS) {
++    if (this != &RHS) {
++      generic_parser_base::operator=(RHS);
++      Values = std::move(RHS.Values);