[llvm] r220462 - Add llvm-go tool.

Eric Christopher echristo at gmail.com
Tue Nov 25 17:33:30 PST 2014


On Tue Nov 25 2014 at 5:13:44 PM David Blaikie <dblaikie at gmail.com> wrote:

> On Wed, Oct 22, 2014 at 7:33 PM, Peter Collingbourne <peter at pcc.me.uk>
> wrote:
>
>> Author: pcc
>> Date: Wed Oct 22 21:33:23 2014
>> New Revision: 220462
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=220462&view=rev
>> Log:
>> Add llvm-go tool.
>>
>> This tool lets us build LLVM components within the tree by setting up a
>> $GOPATH that resembles a tree fetched in the normal way with "go get".
>>
>> It is intended that components such as the Go frontend will be built
>> in-tree
>> using this tool.
>>
>> Differential Revision: http://reviews.llvm.org/D5902
>>
>> Added:
>>     llvm/trunk/tools/llvm-go/
>>     llvm/trunk/tools/llvm-go/CMakeLists.txt
>>     llvm/trunk/tools/llvm-go/Makefile
>>     llvm/trunk/tools/llvm-go/llvm-go.go
>> Modified:
>>     llvm/trunk/bindings/go/build.sh
>>     llvm/trunk/cmake/config-ix.cmake
>>     llvm/trunk/test/Bindings/Go/go.test
>>
> Anyone else seeing a failure with this test?
>
> ******************** TEST 'LLVM :: Bindings/Go/go.test' FAILED ********************
> Script:
> --
> .../llvm/build/clang/debug/split/notypes/nostandalone/./bin/llvm-go test llvm.org/llvm/bindings/go/llvm
> --
> Exit Code: 1
>
> Command Output (stdout):
> --
> llvm.test: .../llvm/src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:279: void llvm::RuntimeDyldELF::
>
> resolveX86_64Relocati
> on(const llvm::SectionEntry &, uint64_t, uint64_t, uint32_t, int64_t, uint64_t): Assertion `(Type == ELF::R_X86_64_32 && (Value <= (4294967295U))) || (Type ==
> ELF::R_X86_64_32S && ((int64_t)Value <= (2147483647) && (int64_t)Value >= (-2147483647-1)))' failed.
> SIGABRT: abort
> PC=0x7f1d88da3bb9
> ...
>
>
>

Yeah, basically the JIT doesn't work with the default memory manager and
small code model. I'm fixing the bindings to use the default jit
compilation model for now.

I'll probably blather with Lang about the other.

-eric


>     llvm/trunk/test/CMakeLists.txt
>>     llvm/trunk/test/lit.cfg
>>     llvm/trunk/tools/CMakeLists.txt
>>     llvm/trunk/tools/Makefile
>>
>> Modified: llvm/trunk/bindings/go/build.sh
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/go/build.sh?rev=220462&r1=220461&r2=220462&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/bindings/go/build.sh (original)
>> +++ llvm/trunk/bindings/go/build.sh Wed Oct 22 21:33:23 2014
>> @@ -1,36 +1,5 @@
>>  #!/bin/sh -xe
>>
>> -llvm_components="\
>> -all-targets \
>> -analysis \
>> -asmparser \
>> -asmprinter \
>> -bitreader \
>> -bitwriter \
>> -codegen \
>> -core \
>> -debuginfo \
>> -executionengine \
>> -instrumentation \
>> -interpreter \
>> -ipo \
>> -irreader \
>> -linker \
>> -mc \
>> -mcjit \
>> -objcarcopts \
>> -option \
>> -profiledata \
>> -scalaropts \
>> -support \
>> -target \
>> -"
>> -
>> -if [ "$1" = "--print-components" ] ; then
>> -  echo $llvm_components
>> -  exit 0
>> -fi
>> -
>>  gollvmdir=$(dirname "$0")/llvm
>>
>>  workdir=$gollvmdir/workdir
>> @@ -41,12 +10,14 @@ mkdir -p $llvm_builddir
>>
>>  cmake_flags="../../../../.. $@"
>>  llvm_config="$llvm_builddir/bin/llvm-config"
>> +llvm_go="$llvm_builddir/bin/llvm-go"
>>
>>  if test -n "`which ninja`" ; then
>>    # If Ninja is available, we can speed up the build by building only the
>>    # required subset of LLVM.
>>    (cd $llvm_builddir && cmake -G Ninja $cmake_flags)
>> -  ninja -C $llvm_builddir llvm-config
>> +  ninja -C $llvm_builddir llvm-config llvm-go
>> +  llvm_components="$($llvm_go print-components)"
>>    llvm_buildtargets="$($llvm_config --libs $llvm_components | sed -e
>> 's/-l//g')"
>>    ninja -C $llvm_builddir $llvm_buildtargets FileCheck
>>  else
>> @@ -54,14 +25,7 @@ else
>>    make -C $llvm_builddir -j4
>>  fi
>>
>> +$llvm_go print-config > $gollvmdir/llvm_config.go
>> +
>>  llvm_version="$($llvm_config --version)"
>> -llvm_cflags="$($llvm_config --cppflags)"
>> -llvm_ldflags="$($llvm_config --ldflags) $($llvm_config --libs
>> $llvm_components) $($llvm_config --system-libs)"
>> -if [ $(uname) != "Darwin" ]; then
>> -  # OS X doesn't like -rpath with cgo. See:
>> -  # https://code.google.com/p/go/issues/detail?id=7293
>> -  llvm_ldflags="-Wl,-rpath,$($llvm_config --libdir) $llvm_ldflags"
>> -fi
>> -sed -e "s#@LLVM_CFLAGS@#$llvm_cflags#g; s#@LLVM_LDFLAGS@#$llvm_ldflags#g"
>> $gollvmdir/llvm_config.go.in > \
>> -  $gollvmdir/llvm_config.go
>>  printf "package llvm\n\nconst Version = \"%s\"\n" "$llvm_version" >
>> $gollvmdir/version.go
>>
>> Modified: llvm/trunk/cmake/config-ix.cmake
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=220462&r1=220461&r2=220462&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/cmake/config-ix.cmake (original)
>> +++ llvm/trunk/cmake/config-ix.cmake Wed Oct 22 21:33:23 2014
>> @@ -493,16 +493,20 @@ else()
>>  endif()
>>
>>  set(LLVM_BINDINGS "")
>> -find_program(GO_EXECUTABLE NAMES go DOC "go executable")
>> -if(GO_EXECUTABLE STREQUAL "GO_EXECUTABLE-NOTFOUND")
>> +if(WIN32)
>>    message(STATUS "Go bindings disabled.")
>>  else()
>> -  execute_process(COMMAND ${GO_EXECUTABLE} run
>> ${CMAKE_SOURCE_DIR}/bindings/go/conftest.go
>> -                  RESULT_VARIABLE GO_CONFTEST)
>> -  if(GO_CONFTEST STREQUAL "0")
>> -    set(LLVM_BINDINGS "${LLVM_BINDINGS} go")
>> -    message(STATUS "Go bindings enabled.")
>> +  find_program(GO_EXECUTABLE NAMES go DOC "go executable")
>> +  if(GO_EXECUTABLE STREQUAL "GO_EXECUTABLE-NOTFOUND")
>> +    message(STATUS "Go bindings disabled.")
>>    else()
>> -    message(STATUS "Go bindings disabled, need at least Go 1.2.")
>> +    execute_process(COMMAND ${GO_EXECUTABLE} run
>> ${CMAKE_SOURCE_DIR}/bindings/go/conftest.go
>> +                    RESULT_VARIABLE GO_CONFTEST)
>> +    if(GO_CONFTEST STREQUAL "0")
>> +      set(LLVM_BINDINGS "${LLVM_BINDINGS} go")
>> +      message(STATUS "Go bindings enabled.")
>> +    else()
>> +      message(STATUS "Go bindings disabled, need at least Go 1.2.")
>> +    endif()
>>    endif()
>>  endif()
>>
>> Modified: llvm/trunk/test/Bindings/Go/go.test
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/Go/go.test?rev=220462&r1=220461&r2=220462&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/Bindings/Go/go.test (original)
>> +++ llvm/trunk/test/Bindings/Go/go.test Wed Oct 22 21:33:23 2014
>> @@ -1,8 +1,3 @@
>> -; RUN: cd %S/../../../bindings/go/llvm && \
>> -; RUN: env CGO_CPPFLAGS="$(llvm-config --cppflags)" \
>> -; RUN:     CGO_CXXFLAGS=-std=c++11 \
>> -; RUN:     CGO_LDFLAGS="$(llvm-config --ldflags --libs --system-libs \
>> -; RUN:                                $(../build.sh --print-components))
>> $CGO_LDFLAGS" \
>> -; RUN:     %go test -tags byollvm .
>> +; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm
>>
>>  ; REQUIRES: shell
>>
>> Modified: llvm/trunk/test/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CMakeLists.txt?rev=220462&r1=220461&r2=220462&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CMakeLists.txt (original)
>> +++ llvm/trunk/test/CMakeLists.txt Wed Oct 22 21:33:23 2014
>> @@ -30,8 +30,9 @@ set(LLVM_TEST_DEPENDS
>>            llvm-cov
>>            llvm-diff
>>            llvm-dis
>> -          llvm-extract
>>            llvm-dwarfdump
>> +          llvm-extract
>> +          llvm-go
>>            llvm-link
>>            llvm-lto
>>            llvm-mc
>>
>> Modified: llvm/trunk/test/lit.cfg
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lit.cfg?rev=220462&r1=220461&r2=220462&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/lit.cfg (original)
>> +++ llvm/trunk/test/lit.cfg Wed Oct 22 21:33:23 2014
>> @@ -200,6 +200,7 @@ for pattern in [r"\bbugpoint\b(?!-)",
>>                  r"\bllvm-dis\b",
>>                  r"\bllvm-dwarfdump\b",
>>                  r"\bllvm-extract\b",
>> +                r"\bllvm-go\b",
>>                  r"\bllvm-link\b",
>>                  r"\bllvm-lto\b",
>>                  r"\bllvm-mc\b",
>>
>> Modified: llvm/trunk/tools/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/CMakeLists.txt?rev=220462&r1=220461&r2=220462&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/CMakeLists.txt (original)
>> +++ llvm/trunk/tools/CMakeLists.txt Wed Oct 22 21:33:23 2014
>> @@ -52,6 +52,8 @@ add_llvm_tool_subdirectory(llvm-c-test)
>>  add_llvm_tool_subdirectory(obj2yaml)
>>  add_llvm_tool_subdirectory(yaml2obj)
>>
>> +add_llvm_tool_subdirectory(llvm-go)
>> +
>>  if(NOT CYGWIN AND LLVM_ENABLE_PIC)
>>    add_llvm_tool_subdirectory(lto)
>>    add_llvm_tool_subdirectory(llvm-lto)
>>
>> Modified: llvm/trunk/tools/Makefile
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/Makefile?rev=220462&r1=220461&r2=220462&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/Makefile (original)
>> +++ llvm/trunk/tools/Makefile Wed Oct 22 21:33:23 2014
>> @@ -74,4 +74,8 @@ ifneq ($(ENABLE_SHARED),1)
>>    endif
>>  endif
>>
>> +ifneq (,$(filter go,$(BINDINGS_TO_BUILD)))
>> +  PARALLEL_DIRS += llvm-go
>> +endif
>> +
>>  include $(LEVEL)/Makefile.common
>>
>> Added: llvm/trunk/tools/llvm-go/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-go/CMakeLists.txt?rev=220462&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-go/CMakeLists.txt (added)
>> +++ llvm/trunk/tools/llvm-go/CMakeLists.txt Wed Oct 22 21:33:23 2014
>> @@ -0,0 +1,9 @@
>> +if(LLVM_BINDINGS MATCHES "go")
>> +  set(binpath ${CMAKE_BINARY_DIR}/bin/llvm-go${CMAKE_EXECUTABLE_SUFFIX})
>> +  add_custom_command(OUTPUT ${binpath}
>> +    COMMAND ${GO_EXECUTABLE} build -o ${binpath} llvm-go.go
>> +    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/llvm-go.go
>> +    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
>> +    COMMENT "Building Go executable llvm-go")
>> +  add_custom_target(llvm-go ALL DEPENDS ${binpath})
>> +endif()
>>
>> Added: llvm/trunk/tools/llvm-go/Makefile
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-go/Makefile?rev=220462&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-go/Makefile (added)
>> +++ llvm/trunk/tools/llvm-go/Makefile Wed Oct 22 21:33:23 2014
>> @@ -0,0 +1,16 @@
>> +##===- tools/llvm-go/Makefile ------------------------------*- Makefile
>> -*-===##
>> +#
>> +#                     The LLVM Compiler Infrastructure
>> +#
>> +# This file is distributed under the University of Illinois Open Source
>> +# License. See LICENSE.TXT for details.
>> +#
>>
>> +##===----------------------------------------------------------------------===##
>> +
>> +LEVEL := ../..
>> +include $(LEVEL)/Makefile.common
>> +
>> +all:: $(ToolDir)/llvm-go$(EXEEXT)
>> +
>> +$(ToolDir)/llvm-go$(EXEEXT): $(PROJ_SRC_DIR)/llvm-go.go
>> +       $(GO) build -o $@ $<
>>
>> Added: llvm/trunk/tools/llvm-go/llvm-go.go
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-go/llvm-go.go?rev=220462&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-go/llvm-go.go (added)
>> +++ llvm/trunk/tools/llvm-go/llvm-go.go Wed Oct 22 21:33:23 2014
>> @@ -0,0 +1,261 @@
>> +//===-- llvm-go.go - go tool wrapper for LLVM
>> -----------------------------===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +//
>> +// This tool lets us build LLVM components within the tree by setting up
>> a
>> +// $GOPATH that resembles a tree fetched in the normal way with "go get".
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +
>> +package main
>> +
>> +import (
>> +       "fmt"
>> +       "io/ioutil"
>> +       "os"
>> +       "os/exec"
>> +       "path/filepath"
>> +       "runtime"
>> +       "strings"
>> +)
>> +
>> +type pkg struct {
>> +       llvmpath, pkgpath string
>> +}
>> +
>> +var packages = []pkg{
>> +       {"bindings/go/llvm", "llvm.org/llvm/bindings/go/llvm"},
>> +}
>> +
>> +type compilerFlags struct {
>> +       cpp, cxx, ld string
>> +}
>> +
>> +var components = []string{
>> +       "all-targets",
>> +       "analysis",
>> +       "asmparser",
>> +       "asmprinter",
>> +       "bitreader",
>> +       "bitwriter",
>> +       "codegen",
>> +       "core",
>> +       "debuginfo",
>> +       "executionengine",
>> +       "instrumentation",
>> +       "interpreter",
>> +       "ipo",
>> +       "irreader",
>> +       "linker",
>> +       "mc",
>> +       "mcjit",
>> +       "objcarcopts",
>> +       "option",
>> +       "profiledata",
>> +       "scalaropts",
>> +       "support",
>> +       "target",
>> +}
>> +
>> +func llvmConfig(args ...string) string {
>> +       configpath := os.Getenv("LLVM_CONFIG")
>> +       if configpath == "" {
>> +               // strip llvm-go, add llvm-config
>> +               configpath = os.Args[0][:len(os.Args[0])-7] +
>> "llvm-config"
>> +       }
>> +
>> +       cmd := exec.Command(configpath, args...)
>> +       out, err := cmd.Output()
>> +       if err != nil {
>> +               panic(err.Error())
>> +       }
>> +
>> +       outstr := string(out)
>> +       outstr = strings.TrimSuffix(outstr, "\n")
>> +       return strings.Replace(outstr, "\n", " ", -1)
>> +}
>> +
>> +func llvmFlags() compilerFlags {
>> +       ldflags := llvmConfig(append([]string{"--ldflags", "--libs",
>> "--system-libs"}, components...)...)
>> +       if runtime.GOOS != "darwin" {
>> +               // OS X doesn't like -rpath with cgo. See:
>> +               // https://code.google.com/p/go/issues/detail?id=7293
>> +               ldflags = "-Wl,-rpath," + llvmConfig("--libdir") + " " +
>> ldflags
>> +       }
>> +       return compilerFlags{
>> +               cpp: llvmConfig("--cppflags"),
>> +               cxx: "-std=c++11",
>> +               ld:  ldflags,
>> +       }
>> +}
>> +
>> +func addTag(args []string, tag string) []string {
>> +       args = append([]string{}, args...)
>> +       addedTag := false
>> +       for i, a := range args {
>> +               if strings.HasPrefix(a, "-tags=") {
>> +                       args[i] = a + " " + tag
>> +                       addedTag = true
>> +               } else if a == "-tags" && i+1 < len(args) {
>> +                       args[i+1] = args[i+1] + " " + tag
>> +                       addedTag = true
>> +               }
>> +       }
>> +       if !addedTag {
>> +               args = append([]string{args[0], "-tags", tag},
>> args[1:]...)
>> +       }
>> +       return args
>> +}
>> +
>> +func printComponents() {
>> +       fmt.Println(strings.Join(components, " "))
>> +}
>> +
>> +func printConfig() {
>> +       flags := llvmFlags()
>> +
>> +       fmt.Printf(`// +build !byollvm
>> +
>> +// This file is generated by llvm-go, do not edit.
>> +
>> +package llvm
>> +
>> +/*
>> +#cgo CPPFLAGS: %s
>> +#cgo CXXFLAGS: %s
>> +#cgo LDFLAGS: %s
>> +*/
>> +import "C"
>> +
>> +type (run_build_sh int)
>> +`, flags.cpp, flags.cxx, flags.ld)
>> +}
>> +
>> +func runGoWithLLVMEnv(args []string, cc, cxx, cppflags, cxxflags,
>> ldflags string) {
>> +       args = addTag(args, "byollvm")
>> +
>> +       srcdir := llvmConfig("--src-root")
>> +
>> +       tmpgopath, err := ioutil.TempDir("", "gopath")
>> +       if err != nil {
>> +               panic(err.Error())
>> +       }
>> +
>> +       for _, p := range packages {
>> +               path := filepath.Join(tmpgopath, "src", p.pkgpath)
>> +               err := os.MkdirAll(filepath.Dir(path), os.ModePerm)
>> +               if err != nil {
>> +                       panic(err.Error())
>> +               }
>> +
>> +               err = os.Symlink(filepath.Join(srcdir, p.llvmpath), path)
>> +               if err != nil {
>> +                       panic(err.Error())
>> +               }
>> +       }
>> +
>> +       newgopathlist := []string{tmpgopath}
>> +       newgopathlist = append(newgopathlist,
>> filepath.SplitList(os.Getenv("GOPATH"))...)
>> +       newgopath := strings.Join(newgopathlist,
>> string(filepath.ListSeparator))
>> +
>> +       flags := llvmFlags()
>> +
>> +       newenv := []string{
>> +               "CC=" + cc,
>> +               "CXX=" + cxx,
>> +               "CGO_CPPFLAGS=" + flags.cpp + " " + cppflags,
>> +               "CGO_CXXFLAGS=" + flags.cxx + " " + cxxflags,
>> +               "CGO_LDFLAGS=" + flags.ld + " " + ldflags,
>> +               "GOPATH=" + newgopath,
>> +       }
>> +       for _, v := range os.Environ() {
>> +               if !strings.HasPrefix(v, "CC=") &&
>> +                       !strings.HasPrefix(v, "CXX=") &&
>> +                       !strings.HasPrefix(v, "CGO_CPPFLAGS=") &&
>> +                       !strings.HasPrefix(v, "CGO_CXXFLAGS=") &&
>> +                       !strings.HasPrefix(v, "CGO_LDFLAGS=") &&
>> +                       !strings.HasPrefix(v, "GOPATH=") {
>> +                       newenv = append(newenv, v)
>> +               }
>> +       }
>> +
>> +       gocmdpath, err := exec.LookPath("go")
>> +       if err != nil {
>> +               panic(err.Error())
>> +       }
>> +
>> +       proc, err := os.StartProcess(gocmdpath, append([]string{"go"},
>> args...),
>> +               &os.ProcAttr{
>> +                       Env:   newenv,
>> +                       Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},
>> +               })
>> +       if err != nil {
>> +               panic(err.Error())
>> +       }
>> +       ps, err := proc.Wait()
>> +       if err != nil {
>> +               panic(err.Error())
>> +       }
>> +
>> +       os.RemoveAll(tmpgopath)
>> +
>> +       if !ps.Success() {
>> +               os.Exit(1)
>> +       }
>> +}
>> +
>> +func usage() {
>> +       fmt.Println(`Usage: llvm-go subcommand [flags]
>> +
>> +Available subcommands: build get install run test print-components
>> print-config`)
>> +       os.Exit(0)
>> +}
>> +
>> +func main() {
>> +       cc := os.Getenv("CC")
>> +       cxx := os.Getenv("CXX")
>> +       cppflags := os.Getenv("CGO_CPPFLAGS")
>> +       cxxflags := os.Getenv("CGO_CXXFLAGS")
>> +       ldflags := os.Getenv("CGO_LDFLAGS")
>> +
>> +       args := os.Args[1:]
>> +       DONE: for {
>> +               switch {
>> +               case len(args) == 0:
>> +                       usage()
>> +               case strings.HasPrefix(args[0], "cc="):
>> +                       cc = args[0][3:]
>> +                       args = args[1:]
>> +               case strings.HasPrefix(args[0], "cxx="):
>> +                       cxx = args[0][4:]
>> +                       args = args[1:]
>> +               case strings.HasPrefix(args[0], "cppflags="):
>> +                       cppflags = args[0][9:]
>> +                       args = args[1:]
>> +               case strings.HasPrefix(args[0], "cxxflags="):
>> +                       cxxflags = args[0][9:]
>> +                       args = args[1:]
>> +               case strings.HasPrefix(args[0], "ldflags="):
>> +                       ldflags = args[0][8:]
>> +                       args = args[1:]
>> +               default:
>> +                       break DONE
>> +               }
>> +       }
>> +
>> +       switch args[0] {
>> +       case "build", "get", "install", "run", "test":
>> +               runGoWithLLVMEnv(args, cc, cxx, cppflags, cxxflags,
>> ldflags)
>> +       case "print-components":
>> +               printComponents()
>> +       case "print-config":
>> +               printConfig()
>> +       default:
>> +               usage()
>> +       }
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141126/b92d5bd1/attachment.html>


More information about the llvm-commits mailing list