Setting MODGCC4_VER might work locally but you can't do it this way for 
anything that gets committed, it will create a conflict in bulk builds. The 
main advantage of having multiple gcc versions is that an arch can be held back 
if it doesn't work with the latest version, this shouldn't be a problem for 
LLVM.

On 24 January 2016 03:13:47 GMT+00:00, Juan Francisco Cantero Hurtado 
<i...@juanfra.info> wrote:
>On Sun, Jan 24, 2016 at 12:07:03AM +0000, Stuart Henderson wrote:
>> I wouldn't say that this works well with gcc. I would recommend
>against keeping multiple versions of a port without a good and specific
>reason.
>
>In the gcc case, the latest version is imported, people works on their
>ports and when everything works fine with the latest version, this is
>promoted as the default version and the older version is deleted. If
>some of my ports are broken, I can change MODGCC4_VER and to work
>individually in one port without to break other packages which I use
>but I don't know how to help to fix the problems.
>
>In addition to that, I would like various versions of llvm (not just
>clang) because more and more interpreters/compilers depend of llvm and
>we can't have updated packages because for any reason we can't update
>llvm due to some conflict with other packages. (example: rubinius
>deletion or people wasting their time trying to build an updated llvm
>during the first attemps to port rust)
>
>That said, I'm obviously not going to maintain llvm and others will do
>the hard work, so my request is just a hope and not a red line or
>something similar :)
>
>> 
>> 
>> On 23 January 2016 22:16:16 GMT+00:00, Juan Francisco Cantero Hurtado
><i...@juanfra.info> wrote:
>> >Can you modify the structure of devel/llvm/ to something like
>> >devel/llvm/version/? With lang/gcc works pretty well, we can work
>with
>> >the latest version while the ports tree uses the stable version by
>> >default.
>> >
>> >
>> >On Sat, Jan 23, 2016 at 07:39:22PM +0100, Pascal Stumpf wrote:
>> >> So here's an updated diff for LLVM 3.7.1.  With landry@'s recent
>> >commit,
>> >> xulrunner is no longer a showstopper.
>> >> 
>> >> 
>> >> Index: Makefile
>> >>
>===================================================================
>> >> RCS file: /cvs/ports/devel/llvm/Makefile,v
>> >> retrieving revision 1.108
>> >> diff -u -p -r1.108 Makefile
>> >> --- Makefile      24 Aug 2015 07:45:56 -0000      1.108
>> >> +++ Makefile      23 Jan 2016 18:38:51 -0000
>> >> @@ -8,14 +8,17 @@ DPB_PROPERTIES = parallel
>> >>  
>> >>  COMMENT =        modular, fast C/C++/ObjC compiler, static analyzer and
>> >tools
>> >>  
>> >> -LLVM_V = 3.5
>> >> -DISTNAME =       llvm-${LLVM_V}.20140228
>> >> -REVISION =       35
>> >> +LLVM_V = 3.7.1
>> >> +DISTNAME =       llvm-${LLVM_V}.src
>> >> +PKGNAME =        llvm-${LLVM_V}
>> >>  CATEGORIES =     devel
>> >> -MASTER_SITES =   http://comstyle.com/source/
>> >> +DISTFILES =      llvm-${LLVM_V}.src${EXTRACT_SUFX} \
>> >> +         cfe-${LLVM_V}.src${EXTRACT_SUFX}
>> >> +MASTER_SITES =   http://www.llvm.org/releases/${LLVM_V}/
>> >>  EXTRACT_SUFX =   .tar.xz
>> >>  
>> >> -SHARED_LIBS =    clang           1.0
>> >> +SHARED_LIBS =    clang           2.0 \
>> >> +         LTO             0.0
>> >>  
>> >>  # packager notes in http://llvm.org/docs/Packaging.html
>> >>  HOMEPAGE =       http://www.llvm.org/
>> >> @@ -25,15 +28,21 @@ MAINTAINER=   Brad Smith <b...@comstyle.co
>> >>  # BSD
>> >>  PERMIT_PACKAGE_CDROM =   Yes
>> >>  
>> >> -WANTLIB =        c m pthread stdc++ z
>> >> +WANTLIB =        c m pthread z
>> >>  
>> >>  MODULES =        devel/cmake \
>> >> -         lang/python
>> >> +         lang/python \
>> >> +         gcc4
>> >>  
>> >> -TEST_DEPENDS =   devel/dejagnu \
>> >> -         shells/bash
>> >> +MODGCC4_LANGS = c c++
>> >> +MODGCC4_ARCHS = *
>> >> +
>> >> +TEST_DEPENDS =           devel/dejagnu \
>> >> +                 shells/bash \
>> >> +                 lang/gcc/${MODGCC4_VERSION},-c++
>> >>  BUILD_DEPENDS += textproc/py-sphinx
>> >> -RUN_DEPENDS +=           devel/gtest
>> >> +RUN_DEPENDS +=           devel/gtest \
>> >> +                 lang/gcc/${MODGCC4_VERSION},-c++
>> >>  
>> >>  SEPARATE_BUILD = Yes
>> >>  CONFIGURE_ARGS = -DLLVM_ENABLE_FFI:Bool=False \
>> >> @@ -47,22 +56,34 @@ CONFIGURE_ARGS =      -DLLVM_ENABLE_FFI:Bool=
>> >>  # introduced when PIE was enabled
>> >>  .if ${MACHINE_ARCH} == "powerpc"
>> >>  CONFIGURE_ARGS +=        -DCMAKE_EXE_LINKER_FLAGS="-Wl,--relax -nopie"
>> >> +CONFIGURE_ARGS +=        -DCMAKE_SHARED_LINKER_FLAGS="-Wl,--relax
>-nopie"
>> >>  .endif
>> >>  
>> >>  TEST_TARGET =            check
>> >>  
>> >> +# XXX sync
>> >> +GCC_VER =                4.9.3
>> >> +.if ${MACHINE_ARCH} == "amd64"
>> >> +GCC_CONFIG =             x86_64-unknown-openbsd${OSREV}
>> >> +.else
>> >> +GCC_CONFIG =             ${MACHINE_ARCH}-unknown-openbsd${OSREV}
>> >> +.endif
>> >>  CLANG_INCLUDE_PATH =     lib/clang/${LLVM_V}/include
>> >> -SUBST_VARS +=            CLANG_INCLUDE_PATH LLVM_V
>> >> +SUBST_VARS +=            CLANG_INCLUDE_PATH LLVM_V GCC_VER GCC_CONFIG
>> >> +
>> >> +post-extract:
>> >> + mv ${WRKDIR}/cfe-${LLVM_V}.src ${WRKSRC}/tools/clang
>> >>  
>> >>  pre-configure:
>> >> - @${SUBST_CMD} ${WRKSRC}/tools/clang/tools/scan-build/scan-build
>> >> + @${SUBST_CMD} ${WRKSRC}/tools/clang/tools/scan-build/scan-build
>\
>> >> +         ${WRKSRC}/tools/clang/lib/Driver/ToolChains.cpp
>> >> + @${SUBST_CMD} ${WRKSRC}/tools/clang/tools/scan-build/scan-build
>\
>> >> +         ${WRKSRC}/tools/clang/lib/Driver/Tools.cpp
>> >>   -@ln -s ${MODPY_BIN} ${WRKDIR}/bin/python
>> >>  
>> >>  post-build:
>> >>   cd ${WRKSRC}/docs && make -f Makefile.sphinx man
>> >> - pod2man --release=CVS --center="LLVM" \
>> >> -     ${WRKSRC}/tools/clang/docs/tools/clang.pod \
>> >> -     ${WRKSRC}/docs/_build/man/clang.1
>> >> + cd ${WRKSRC}/tools/clang/docs && make -f Makefile.sphinx man
>> >>  
>> >>  post-install:
>> >>   ${INSTALL_SCRIPT}
>> >${WRKSRC}/tools/clang/tools/scan-build/ccc-analyzer \
>> >> @@ -75,7 +96,10 @@ post-install:
>> >>       ${PREFIX}/man/man1
>> >>   ${INSTALL_DATA}
>${WRKSRC}/tools/clang/tools/scan-build/scan-build.1
>> >\
>> >>       ${PREFIX}/man/man1
>> >> - # lit is not installed anymore
>> >> + ${INSTALL_DATA} ${WRKSRC}/tools/clang/docs/_build/man/clang.1 \
>> >> +     ${PREFIX}/man/man1
>> >> + # lit and FileCheck are not installed
>> >>   @rm ${PREFIX}/man/man1/lit.1
>> >> + @rm ${PREFIX}/man/man1/FileCheck.1
>> >>  
>> >>  .include <bsd.port.mk>
>> >> Index: distinfo
>> >>
>===================================================================
>> >> RCS file: /cvs/ports/devel/llvm/distinfo,v
>> >> retrieving revision 1.13
>> >> diff -u -p -r1.13 distinfo
>> >> --- distinfo      18 Apr 2014 09:30:48 -0000      1.13
>> >> +++ distinfo      23 Jan 2016 18:38:51 -0000
>> >> @@ -1,2 +1,4 @@
>> >> -SHA256 (llvm-3.5.20140228.tar.xz) =
>> >vBFmbVEiY2CQZf7Boqcebh+s+ejpfpoZ8vY5c3cxgXw=
>> >> -SIZE (llvm-3.5.20140228.tar.xz) = 17945548
>> >> +SHA256 (cfe-3.7.1.src.tar.xz) =
>> >VuIWTHwqF3LV7So+V0hf9z/wbJff8S7b7qGsxEErBnQ=
>> >> +SHA256 (llvm-3.7.1.src.tar.xz) =
>> >vneU7QzsQtbGgsqONRdTW1RVWj3vq+yDVU28dNtUWtU=
>> >> +SIZE (cfe-3.7.1.src.tar.xz) = 9110616
>> >> +SIZE (llvm-3.7.1.src.tar.xz) = 14592544
>> >> Index: patches/patch-CMakeLists_txt
>> >>
>===================================================================
>> >> RCS file: patches/patch-CMakeLists_txt
>> >> diff -N patches/patch-CMakeLists_txt
>> >> --- patches/patch-CMakeLists_txt  18 Apr 2014 09:30:48 -0000      1.4
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,15 +0,0 @@
>> >> -$OpenBSD: patch-CMakeLists_txt,v 1.4 2014/04/18 09:30:48 brad Exp
>$
>> >> -
>> >> -Don't confuse scripts who want the version with appended 'svn'
>goo.
>> >> -
>> >> ---- CMakeLists.txt.orig  Sun Mar  2 21:57:43 2014
>> >> -+++ CMakeLists.txt       Sun Mar  2 22:13:02 2014
>> >> -@@ -29,7 +29,7 @@ set(LLVM_VERSION_MAJOR 3)
>> >> - set(LLVM_VERSION_MINOR 5)
>> >> - 
>> >> - if (NOT PACKAGE_VERSION)
>> >> --  set(PACKAGE_VERSION
>> >"${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}svn")
>> >> -+  set(PACKAGE_VERSION
>> >"${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}")
>> >> - endif()
>> >> - 
>> >> - option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files
>in
>> >the 'install' target." OFF)
>> >> Index: patches/patch-Makefile_config_in
>> >>
>===================================================================
>> >> RCS file: /cvs/ports/devel/llvm/patches/patch-Makefile_config_in,v
>> >> retrieving revision 1.8
>> >> diff -u -p -r1.8 patch-Makefile_config_in
>> >> --- patches/patch-Makefile_config_in      18 Apr 2014 09:30:48
>-0000  1.8
>> >> +++ patches/patch-Makefile_config_in      23 Jan 2016 18:38:51 -0000
>> >> @@ -1,7 +1,7 @@
>> >>  $OpenBSD: patch-Makefile_config_in,v 1.8 2014/04/18 09:30:48 brad
>> >Exp $
>> >> ---- Makefile.config.in.orig      Sun Feb 16 19:19:46 2014
>> >> -+++ Makefile.config.in   Sun Feb 16 19:28:35 2014
>> >> -@@ -99,11 +99,11 @@ endif
>> >> +--- Makefile.config.in.orig      Wed Aug 12 19:12:16 2015
>> >> ++++ Makefile.config.in   Tue Sep  8 21:53:49 2015
>> >> +@@ -106,11 +106,11 @@ endif
>> >>   PROJ_bindir     := $(PROJ_prefix)/bin
>> >>   PROJ_libdir     := $(PROJ_prefix)/lib
>> >>   PROJ_datadir    := $(PROJ_prefix)/share
>> >> Index: patches/patch-cmake_modules_AddLLVM_cmake
>> >>
>===================================================================
>> >> RCS file: patches/patch-cmake_modules_AddLLVM_cmake
>> >> diff -N patches/patch-cmake_modules_AddLLVM_cmake
>> >> --- /dev/null     1 Jan 1970 00:00:00 -0000
>> >> +++ patches/patch-cmake_modules_AddLLVM_cmake     23 Jan 2016 18:38:51
>> >-0000
>> >> @@ -0,0 +1,12 @@
>> >> +$OpenBSD$
>> >> +--- cmake/modules/AddLLVM.cmake.orig     Fri Sep 11 17:38:23 2015
>> >> ++++ cmake/modules/AddLLVM.cmake  Fri Sep 11 17:39:48 2015
>> >> +@@ -178,7 +178,7 @@ function(add_link_opts target_name)
>> >> +       elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
>> >> +         set_property(TARGET ${target_name} APPEND_STRING
>PROPERTY
>> >> +                      LINK_FLAGS " -Wl,-z
>> >-Wl,discard-unused=sections")
>> >> +-      elseif(NOT WIN32 AND NOT LLVM_LINKER_IS_GOLD)
>> >> ++      elseif(NOT WIN32 AND NOT LLVM_LINKER_IS_GOLD AND NOT
>> >${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
>> >> +         # Object files are compiled with
>-ffunction-data-sections.
>> >> +         # Versions of bfd ld < 2.23.1 have a bug in
>--gc-sections
>> >that breaks
>> >> +         # tools that use plugins. Always pass --gc-sections once
>we
>> >require
>> >> Index: patches/patch-cmake_modules_HandleLLVMOptions_cmake
>> >>
>===================================================================
>> >> RCS file:
>>
>>/cvs/ports/devel/llvm/patches/patch-cmake_modules_HandleLLVMOptions_cmake,v
>> >> retrieving revision 1.1
>> >> diff -u -p -r1.1 patch-cmake_modules_HandleLLVMOptions_cmake
>> >> --- patches/patch-cmake_modules_HandleLLVMOptions_cmake   18 Apr
>2014
>> >09:30:48 -0000      1.1
>> >> +++ patches/patch-cmake_modules_HandleLLVMOptions_cmake   23 Jan
>2016
>> >18:38:51 -0000
>> >> @@ -1,49 +1,13 @@
>> >> -$OpenBSD: patch-cmake_modules_HandleLLVMOptions_cmake,v 1.1
>> >2014/04/18 09:30:48 brad Exp $
>> >> ---- cmake/modules/HandleLLVMOptions.cmake.orig   Sat Feb  8
>15:05:05
>> >2014
>> >> -+++ cmake/modules/HandleLLVMOptions.cmake        Sat Feb  8 15:05:17
>2014
>> >> -@@ -7,45 +7,6 @@ include(AddLLVMDefinitions)
>> >> - include(CheckCCompilerFlag)
>> >> - include(CheckCXXCompilerFlag)
>> >> - 
>> >> --if(NOT LLVM_FORCE_USE_OLD_TOOLCHAIN)
>> >> --  if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
>> >> --    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
>> >> --      message(FATAL_ERROR "Host GCC version must be at least
>4.7!")
>> >> --    endif()
>> >> --  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
>> >> --    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.1)
>> >> --      message(FATAL_ERROR "Host Clang version must be at least
>> >3.1!")
>> >> --    endif()
>> >> --
>> >> --    # Also test that we aren't using too old of a version of
>> >libstdc++ with the
>> >> --    # Clang compiler. This is tricky as there is no real way to
>> >check the
>> >> --    # version of libstdc++ directly. Instead we test for a known
>> >bug in
>> >> --    # libstdc++4.6 that is fixed in libstdc++4.7.
>> >> --    if(NOT LLVM_ENABLE_LIBCXX)
>> >> --      set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
>> >> --      set(OLD_CMAKE_REQUIRED_LIBRARIES
>${CMAKE_REQUIRED_LIBRARIES})
>> >> --      set(CMAKE_REQUIRED_FLAGS "-std=c++0x")
>> >> --      if (ANDROID)
>> >> --        set(CMAKE_REQUIRED_LIBRARIES "atomic")
>> >> --      endif()
>> >> --      check_cxx_source_compiles("
>> >> --#include <atomic>
>> >> --std::atomic<float> x(0.0f);
>> >> --int main() { return (float)x; }"
>> >> --        LLVM_NO_OLD_LIBSTDCXX)
>> >> --      if(NOT LLVM_NO_OLD_LIBSTDCXX)
>> >> --        message(FATAL_ERROR "Host Clang must be able to find
>> >libstdc++4.7 or newer!")
>> >> --      endif()
>> >> --      set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
>> >> --      set(CMAKE_REQUIRED_LIBRARIES
>${OLD_CMAKE_REQUIRED_LIBRARIES})
>> >> --    endif()
>> >> --  elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
>> >> --    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17.0)
>> >> --      message(FATAL_ERROR "Host Visual Studio must be at least
>2012
>> >(MSVC 17.0)")
>> >> --    endif()
>> >> --  endif()
>> >> --endif()
>> >> --
>> >> - if( LLVM_ENABLE_ASSERTIONS )
>> >> -   # MSVC doesn't like _DEBUG on release builds. See PR 4379.
>> >> -   if( NOT MSVC )
>> >> +$OpenBSD$
>> >> +--- cmake/modules/HandleLLVMOptions.cmake.orig   Wed Sep  9
>14:34:05
>> >2015
>> >> ++++ cmake/modules/HandleLLVMOptions.cmake        Wed Sep  9 14:34:55
>2015
>> >> +@@ -132,7 +132,8 @@ endif()
>> >> + # Pass -Wl,-z,defs. This makes sure all symbols are defined.
>> >Otherwise a DSO
>> >> + # build might work on ELF but fail on MachO/COFF.
>> >> + if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR WIN32 OR CYGWIN
>OR
>> >> +-        ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") AND
>> >> ++        ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR
>> >> ++        ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") AND
>> >> +    NOT LLVM_USE_SANITIZER)
>> >> +   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}
>> >-Wl,-z,defs")
>> >> + endif()
>> >> Index: patches/patch-include_llvm_CodeGen_SelectionDAGISel_h
>> >>
>===================================================================
>> >> RCS file: patches/patch-include_llvm_CodeGen_SelectionDAGISel_h
>> >> diff -N patches/patch-include_llvm_CodeGen_SelectionDAGISel_h
>> >> --- patches/patch-include_llvm_CodeGen_SelectionDAGISel_h 24 Aug
>2015
>> >07:45:56 -0000      1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,59 +0,0 @@
>> >> -$OpenBSD: patch-include_llvm_CodeGen_SelectionDAGISel_h,v 1.1
>> >2015/08/24 07:45:56 ajacoutot Exp $
>> >> -
>> >> -r219009
>> >> -[ISel] Keep matching state consistent when folding during X86
>> >address match
>> >> -
>> >> -In the X86 backend, matching an address is initiated by the
>'addr'
>> >complex
>> >> -pattern and its friends.  During this process we may reassociate
>> >and-of-shift
>> >> -into shift-of-and (FoldMaskedShiftToScaledMask) to allow folding
>of
>> >the
>> >> -shift into the scale of the address.
>> >> -
>> >> -However as demonstrated by the testcase, this can trigger CSE of
>not
>> >only the
>> >> -shift and the AND which the code is prepared for but also the
>> >underlying load
>> >> -node.  In the testcase this node is sitting in the RecordedNode
>and
>> >MatchScope
>> >> -data structures of the matcher and becomes a deleted node upon
>CSE. 
>> >Returning
>> >> -from the complex pattern function, we try to access it again
>hitting
>> >an assert
>> >> -because the node is no longer a load even though this was checked
>> >before.
>> >> -
>> >> -Now obviously changing the DAG this late is bending the rules but
>I
>> >think it
>> >> -makes sense somewhat.  Outside of addresses we prefer
>and-of-shift
>> >because it
>> >> -may lead to smaller immediates (FoldMaskAndShiftToScale is an
>even
>> >better
>> >> -example because it create a non-canonical node).  We currently
>don't
>> >recognize
>> >> -addresses during DAGCombiner where arguably this canonicalization
>> >should be
>> >> -performed.  On the other hand, having this in the matcher allows
>us
>> >to cover
>> >> -all the cases where an address can be used in an instruction.
>> >> -
>> >> -I've also talked a little bit to Dan Gohman on llvm-dev who added
>> >the RAUW for
>> >> -the new shift node in FoldMaskedShiftToScaledMask.  This RAUW is
>> >responsible
>> >> -for initiating the recursive CSE on users
>> >>
>>
>>-(http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-September/076903.html)
>> >but it
>> >> -is not strictly necessary since the shift is hooked into the
>visited
>> >user.  Of
>> >> -course it's safer to keep the DAG consistent at all times (e.g.
>for
>> >accurate
>> >> -number of uses, etc.).
>> >> -
>> >> -So rather than changing the fundamentals, I've decided to
>continue
>> >along the
>> >> -previous patches and detect the CSE.  This patch installs a very
>> >targeted
>> >> -DAGUpdateListener for the duration of a complex-pattern match and
>> >updates the
>> >> -matching state accordingly.  (Previous patches used HandleSDNode
>to
>> >detect the
>> >> -CSE but that's not practical here).  The listener is only
>installed
>> >on X86.
>> >> -
>> >> -I tested that there is no measurable overhead due to this while
>> >running
>> >> -through the spec2k BC files with llc.  The only thing we pay for
>is
>> >the
>> >> -creation of the listener.  The callback never ever triggers in
>> >spec2k since
>> >> -this is a corner case.
>> >> -
>> >> ---- include/llvm/CodeGen/SelectionDAGISel.h.orig Tue Aug  4
>22:44:44
>> >2015
>> >> -+++ include/llvm/CodeGen/SelectionDAGISel.h      Tue Aug  4 22:46:22
>2015
>> >> -@@ -238,6 +238,12 @@ class SelectionDAGISel : public
>> >MachineFunctionPass { 
>> >> -                            const unsigned char *MatcherTable,
>> >> -                            unsigned TableSize);
>> >> - 
>> >> -+  /// \brief Return true if complex patterns for this target can
>> >mutate the
>> >> -+  /// DAG.
>> >> -+  virtual bool ComplexPatternFuncMutatesDAG() const {
>> >> -+    return false;
>> >> -+  }
>> >> -+
>> >> - private:
>> >> - 
>> >> -   // Calls to these functions are generated by tblgen.
>> >> Index: patches/patch-include_llvm_CodeGen_SelectionDAG_h
>> >>
>===================================================================
>> >> RCS file: patches/patch-include_llvm_CodeGen_SelectionDAG_h
>> >> diff -N patches/patch-include_llvm_CodeGen_SelectionDAG_h
>> >> --- patches/patch-include_llvm_CodeGen_SelectionDAG_h     15 Nov 2014
>> >03:26:40 -0000      1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,30 +0,0 @@
>> >> -$OpenBSD: patch-include_llvm_CodeGen_SelectionDAG_h,v 1.1
>2014/11/15
>> >03:26:40 brad Exp $
>> >> -
>> >> -r221709  
>> >> -Totally forget deallocated SDNodes in SDDbgInfo.
>> >> -
>> >> -What would happen before that commit is that the SDDbgValues
>> >associated with
>> >> -a deallocated SDNode would be marked Invalidated, but SDDbgInfo
>> >would keep
>> >> -a map entry keyed by the SDNode pointer pointing to this list of
>> >invalidated
>> >> -SDDbgNodes. As the memory gets reused, the list might get wrongly
>> >associated
>> >> -with another new SDNode. As the SDDbgValues are cloned when they
>are
>> >transfered,
>> >> -this can lead to an exponential number of SDDbgValues being
>produced
>> >during
>> >> -DAGCombine like in http://llvm.org/bugs/show_bug.cgi?id=20893
>> >> -
>> >> -Note that the previous behavior wasn't really buggy as the
>> >invalidation made
>> >> -sure that the SDDbgValues won't be used. This commit can be
>> >considered a
>> >> -memory optimization and as such is really hard to validate in a
>> >unit-test.
>> >> -
>> >> ---- include/llvm/CodeGen/SelectionDAG.h.orig     Fri Nov 14 21:08:36
>> >2014
>> >> -+++ include/llvm/CodeGen/SelectionDAG.h  Fri Nov 14 21:09:49 2014
>> >> -@@ -126,6 +126,10 @@ class SDDbgInfo { (public)
>> >> -       DbgValMap[Node].push_back(V);
>> >> -   }
>> >> - 
>> >> -+  /// \brief Invalidate all DbgValues attached to the node and
>> >remove
>> >> -+  /// it from the Node-to-DbgValues map.
>> >> -+  void erase(const SDNode *Node);
>> >> -+
>> >> -   void clear() {
>> >> -     DbgValMap.clear();
>> >> -     DbgValues.clear();
>> >> Index: patches/patch-include_llvm_Config_config_h_cmake
>> >>
>===================================================================
>> >> RCS file: patches/patch-include_llvm_Config_config_h_cmake
>> >> diff -N patches/patch-include_llvm_Config_config_h_cmake
>> >> --- patches/patch-include_llvm_Config_config_h_cmake      26 Jul 2014
>> >09:27:29 -0000      1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,16 +0,0 @@
>> >> -$OpenBSD: patch-include_llvm_Config_config_h_cmake,v 1.1
>2014/07/26
>> >09:27:29 pascal Exp $
>> >> -
>> >> -r213966
>> >> -Fix arc4random detection.
>> >> -
>> >> ---- include/llvm/Config/config.h.cmake.orig      Wed Jul  9 15:45:23
>2014
>> >> -+++ include/llvm/Config/config.h.cmake   Wed Jul  9 15:59:51 2014
>> >> -@@ -34,7 +34,7 @@
>> >> - #undef GCC_INSTALL_PREFIX
>> >> - 
>> >> - /* Define to 1 if you have the `arc4random' function. */
>> >> --#cmakedefine HAVE_ARC4RANDOM
>> >> -+#cmakedefine HAVE_DECL_ARC4RANDOM ${HAVE_DECL_ARC4RANDOM}
>> >> - 
>> >> - /* Define to 1 if you have the `backtrace' function. */
>> >> - #cmakedefine HAVE_BACKTRACE ${HAVE_BACKTRACE}
>> >> Index: patches/patch-include_llvm_Support_ELF_h
>> >>
>===================================================================
>> >> RCS file: patches/patch-include_llvm_Support_ELF_h
>> >> diff -N patches/patch-include_llvm_Support_ELF_h
>> >> --- patches/patch-include_llvm_Support_ELF_h      11 Sep 2014 17:54:13
>> >-0000       1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,19 +0,0 @@
>> >> -$OpenBSD: patch-include_llvm_Support_ELF_h,v 1.1 2014/09/11
>17:54:13
>> >brad Exp $
>> >> -
>> >> -r213427
>> >> -[PowerPC] 32-bit ELF PIC support
>> >> -
>> >> -This adds initial support for PPC32 ELF PIC (Position Independent
>> >Code; the
>> >> --fPIC variety), thus rectifying a long-standing deficiency in the
>> >PowerPC
>> >> -backend.
>> >> -
>> >> ---- include/llvm/Support/ELF.h.orig      Sun Jul 27 00:01:21 2014
>> >> -+++ include/llvm/Support/ELF.h   Sun Jul 27 00:02:18 2014
>> >> -@@ -437,6 +437,7 @@ enum {
>> >> -   R_PPC_GOT16_LO              = 15,
>> >> -   R_PPC_GOT16_HI              = 16,
>> >> -   R_PPC_GOT16_HA              = 17,
>> >> -+  R_PPC_PLTREL24              = 18,
>> >> -   R_PPC_REL32                 = 26,
>> >> -   R_PPC_TLS                   = 67,
>> >> -   R_PPC_DTPMOD32              = 68,
>> >> Index: patches/patch-include_llvm_Target_TargetInstrInfo_h
>> >>
>===================================================================
>> >> RCS file: patches/patch-include_llvm_Target_TargetInstrInfo_h
>> >> diff -N patches/patch-include_llvm_Target_TargetInstrInfo_h
>> >> --- patches/patch-include_llvm_Target_TargetInstrInfo_h   18 Sep
>2014
>> >20:19:27 -0000      1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,32 +0,0 @@
>> >> -$OpenBSD: patch-include_llvm_Target_TargetInstrInfo_h,v 1.1
>> >2014/09/18 20:19:27 brad Exp $
>> >> -
>> >> -r217801
>> >> -Fix a lot of confusion around inserting nops on empty functions.
>> >> -
>> >> -On MachO, and MachO only, we cannot have a truly empty function
>> >since that
>> >> -breaks the linker logic for atomizing the section.
>> >> -
>> >> -When we are emitting a frame pointer, the presence of an
>unreachable
>> >will
>> >> -create a cfi instruction pointing past the last instruction. This
>is
>> >perfectly
>> >> -fine. The FDE information encodes the pc range it applies to. If
>> >some tool
>> >> -cannot handle this, we should explicitly say which bug we are
>> >working around
>> >> -and only work around it when it is actually relevant (not for ELF
>> >for example).
>> >> -
>> >> -Given the unreachable we could omit the .cfi_def_cfa_register,
>but
>> >then
>> >> -again, we could also omit the entire function prologue if we
>wanted
>> >to.
>> >> -
>> >> ---- include/llvm/Target/TargetInstrInfo.h.orig   Mon Sep 15
>16:00:35
>> >2014
>> >> -+++ include/llvm/Target/TargetInstrInfo.h        Mon Sep 15 16:01:15
>2014
>> >> -@@ -661,10 +661,8 @@ class TargetInstrInfo : public MCInstrInfo {
>> >(public)
>> >> -                           MachineBasicBlock::iterator MI) const;
>> >> - 
>> >> - 
>> >> --  /// getNoopForMachoTarget - Return the noop instruction to use
>> >for a noop.
>> >> --  virtual void getNoopForMachoTarget(MCInst &NopInst) const {
>> >> --    // Default to just using 'nop' string.
>> >> --  }
>> >> -+  /// Return the noop instruction to use for a noop.
>> >> -+  virtual void getNoopForMachoTarget(MCInst &NopInst) const;
>> >> - 
>> >> - 
>> >> -   /// isPredicated - Returns true if the instruction is already
>> >predicated.
>> >> Index: patches/patch-lib_Analysis_IVUsers_cpp
>> >>
>===================================================================
>> >> RCS file: patches/patch-lib_Analysis_IVUsers_cpp
>> >> diff -N patches/patch-lib_Analysis_IVUsers_cpp
>> >> --- patches/patch-lib_Analysis_IVUsers_cpp        10 Jul 2014 22:46:37
>> >-0000       1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,45 +0,0 @@
>> >> -$OpenBSD: patch-lib_Analysis_IVUsers_cpp,v 1.1 2014/07/10
>22:46:37
>> >brad Exp $
>> >> -
>> >> -r203719
>> >> -PR17473: Don't normalize an expression during postinc
>transformation
>> >unless it's
>> >> -invertible.
>> >> -
>> >> ---- lib/Analysis/IVUsers.cpp.orig        Sun Mar  2 21:57:38 2014
>> >> -+++ lib/Analysis/IVUsers.cpp     Sat Jun 14 03:56:54 2014
>> >> -@@ -186,15 +186,34 @@ bool IVUsers::AddUsersImpl(Instruction *I,
>> >> - 
>> >> -     if (AddUserToIVUsers) {
>> >> -       // Okay, we found a user that we cannot reduce.
>> >> --      IVUses.push_back(new IVStrideUse(this, User, I));
>> >> --      IVStrideUse &NewUse = IVUses.back();
>> >> -+      IVStrideUse &NewUse = AddUser(User, I);
>> >> -       // Autodetect the post-inc loop set, populating
>> >NewUse.PostIncLoops.
>> >> -       // The regular return value here is discarded; instead of
>> >recording
>> >> -       // it, we just recompute it when we need it.
>> >> -+      const SCEV *OriginalISE = ISE;
>> >> -       ISE = TransformForPostIncUse(NormalizeAutodetect,
>> >> -                                    ISE, User, I,
>> >> -                                    NewUse.PostIncLoops,
>> >> -                                    *SE, *DT);
>> >> -+
>> >> -+      // PostIncNormalization effectively simplifies the
>expression
>> >under
>> >> -+      // pre-increment assumptions. Those assumptions (no
>wrapping)
>> >might not
>> >> -+      // hold for the post-inc value. Catch such cases by making
>> >sure the
>> >> -+      // transformation is invertible.
>> >> -+      if (OriginalISE != ISE) {
>> >> -+        const SCEV *DenormalizedISE =
>> >> -+          TransformForPostIncUse(Denormalize, ISE, User, I,
>> >> -+              NewUse.PostIncLoops, *SE, *DT);
>> >> -+
>> >> -+        // If we normalized the expression, but denormalization
>> >doesn't give the
>> >> -+        // original one, discard this user.
>> >> -+        if (OriginalISE != DenormalizedISE) {
>> >> -+          DEBUG(dbgs() << "   DISCARDING (NORMALIZATION ISN'T
>> >INVERTIBLE): "
>> >> -+                       << *ISE << '\n');
>> >> -+          IVUses.pop_back();
>> >> -+          return false;
>> >> -+        }
>> >> -+      }
>> >> -       DEBUG(if (SE->getSCEV(I) != ISE)
>> >> -               dbgs() << "   NORMALIZED TO: " << *ISE << '\n');
>> >> -     }
>> >> Index: patches/patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp
>> >>
>===================================================================
>> >> RCS file: patches/patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp
>> >> diff -N patches/patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp
>> >> --- patches/patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp   18 Sep
>2014
>> >20:19:27 -0000      1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,68 +0,0 @@
>> >> -$OpenBSD: patch-lib_CodeGen_AsmPrinter_AsmPrinter_cpp,v 1.1
>> >2014/09/18 20:19:27 brad Exp $
>> >> -
>> >> -r217801
>> >> -Fix a lot of confusion around inserting nops on empty functions.
>> >> -
>> >> -On MachO, and MachO only, we cannot have a truly empty function
>> >since that
>> >> -breaks the linker logic for atomizing the section.
>> >> -
>> >> -When we are emitting a frame pointer, the presence of an
>unreachable
>> >will
>> >> -create a cfi instruction pointing past the last instruction. This
>is
>> >perfectly
>> >> -fine. The FDE information encodes the pc range it applies to. If
>> >some tool
>> >> -cannot handle this, we should explicitly say which bug we are
>> >working around
>> >> -and only work around it when it is actually relevant (not for ELF
>> >for example).
>> >> -
>> >> -Given the unreachable we could omit the .cfi_def_cfa_register,
>but
>> >then
>> >> -again, we could also omit the entire function prologue if we
>wanted
>> >to.
>> >> -
>> >> -r217899
>> >> -Add back a fallback case for targets that do not or cannot
>implement
>> >getNoopForMachoTarget().
>> >> -
>> >> ---- lib/CodeGen/AsmPrinter/AsmPrinter.cpp.orig   Sun Mar  2
>21:57:42
>> >2014
>> >> -+++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp        Tue Sep 16 22:33:35
>2014
>> >> -@@ -739,14 +739,12 @@ void AsmPrinter::EmitFunctionBody() {
>> >> - 
>> >> -   // Print out code for the function.
>> >> -   bool HasAnyRealCode = false;
>> >> --  const MachineInstr *LastMI = 0;
>> >> -   for (MachineFunction::const_iterator I = MF->begin(), E =
>> >MF->end();
>> >> -        I != E; ++I) {
>> >> -     // Print a label for the basic block.
>> >> -     EmitBasicBlockStart(I);
>> >> -     for (MachineBasicBlock::const_iterator II = I->begin(), IE =
>> >I->end();
>> >> -          II != IE; ++II) {
>> >> --      LastMI = II;
>> >> - 
>> >> -       // Print the assembly for the instruction.
>> >> -       if (!II->isLabel() && !II->isImplicitDef() &&
>!II->isKill()
>> >&&
>> >> -@@ -807,24 +805,18 @@ void AsmPrinter::EmitFunctionBody() {
>> >> -     }
>> >> -   }
>> >> - 
>> >> --  // If the last instruction was a prolog label, then we have a
>> >situation where
>> >> --  // we emitted a prolog but no function body. This results in
>the
>> >ending prolog
>> >> --  // label equaling the end of function label and an invalid
>"row"
>> >in the
>> >> --  // FDE. We need to emit a noop in this situation so that the
>> >FDE's rows are
>> >> --  // valid.
>> >> --  bool RequiresNoop = LastMI && LastMI->isPrologLabel();
>> >> --
>> >> -   // If the function is empty and the object file uses
>> >.subsections_via_symbols,
>> >> -   // then we need to emit *something* to the function body to
>> >prevent the
>> >> -   // labels from collapsing together.  Just emit a noop.
>> >> --  if ((MAI->hasSubsectionsViaSymbols() && !HasAnyRealCode) ||
>> >RequiresNoop) {
>> >> -+  if ((MAI->hasSubsectionsViaSymbols() && !HasAnyRealCode)) {
>> >> -     MCInst Noop;
>> >> -     TM.getInstrInfo()->getNoopForMachoTarget(Noop);
>> >> --    if (Noop.getOpcode()) {
>> >> --      OutStreamer.AddComment("avoids zero-length function");
>> >> -+    OutStreamer.AddComment("avoids zero-length function");
>> >> -+
>> >> -+    // Targets can opt-out of emitting the noop here by leaving
>the
>> >opcode
>> >> -+    // unspecified.
>> >> -+    if (Noop.getOpcode())
>> >> -       OutStreamer.EmitInstruction(Noop, getSubtargetInfo());
>> >> --    } else  // Target not mc-ized yet.
>> >> --      OutStreamer.EmitRawText(StringRef("\tnop\n"));
>> >> -   }
>> >> - 
>> >> -   const Function *F = MF->getFunction();
>> >> Index: patches/patch-lib_CodeGen_SelectionDAG_LegalizeTypes_h
>> >>
>===================================================================
>> >> RCS file: patches/patch-lib_CodeGen_SelectionDAG_LegalizeTypes_h
>> >> diff -N patches/patch-lib_CodeGen_SelectionDAG_LegalizeTypes_h
>> >> --- patches/patch-lib_CodeGen_SelectionDAG_LegalizeTypes_h        14 Aug
>> >2014 01:08:09 -0000 1.1
>> >> +++ /dev/null     1 Jan 1970 00:00:00 -0000
>> >> @@ -1,21 +0,0 @@
>> >> -$OpenBSD: patch-lib_CodeGen_SelectionDAG_LegalizeTypes_h,v 1.1
>> >2014/08/14 01:08:09 brad Exp $
>> >> -
>> >> -r211435
>> >> -Legalizer: Add support for splitting insert_subvectors.
>> >> -
>> >> -We handle this by spilling the whole thing to the stack and doing
>> >the
>> >> -insertion as a store.
>> >> -
>> >> -PR19492. This happens in real code because the vectorizer creates
>> >v2i128 when AVX is
>> >> -enabled.
>> >> -
>> >> ---- lib/CodeGen/SelectionDAG/LegalizeTypes.h.orig        Thu Jul 17
>> >01:03:52 2014
>> >> -+++ lib/CodeGen/SelectionDAG/LegalizeTypes.h     Thu Jul 17 01:04:56
>> >2014
>> >> -@@ -570,6 +570,7 @@ class LLVM_LIBRARY_VISIBILITY
>DAGTypeLegalizer {
>> >(priv
>> >> -   void SplitVecRes_BUILD_VECTOR(SDNode *N, SDValue &Lo, SDValue
>> >&Hi);
>> >> -   void SplitVecRes_CONCAT_VECTORS(SDNode *N, SDValue &Lo,
>SDValue
>> >&Hi);
>> >> -   void SplitVecRes_EXTRACT_SUBVECTOR(SDNode *N, SDValue &Lo,
>> >SDValue &Hi);
>> >> -+  void SplitVecRes_INSERT_SUBVECTOR(SDNode *N, SDValue &Lo,
>SDValue
>> >&Hi);
>> >> -   void SplitVecRes_FPOWI(SDNode *N, SDValue &Lo, SDValue &Hi);
>> >> -   void SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDValue &Lo,
>> >SDValue &Hi);
>> >> -   void SplitVecRes_LOAD(LoadSDNode *N, SDValue &Lo, SDValue
>&Hi);
>> >> Index:
>patches/patch-lib_CodeGen_SelectionDAG_LegalizeVectorTypes_cpp
>> >>
>===================================================================
>> >> RCS file:
>> >patches/patch-lib

-- 
Sent from a phone, please excuse the formatting.

Reply via email to