From 67a70bd8163d14171fda467abccee49b2e31902a Mon Sep 17 00:00:00 2001 From: Siu Kwan Lam <1929845+sklam@users.noreply.github.com> Date: Mon, 1 Apr 2024 15:49:06 -0500 Subject: [PATCH 01/23] Update conda-recipe for llvm15 based on anaconda-recipes --- conda-recipes/llvmdev_llvm15/bld.bat | 44 +++++++ conda-recipes/llvmdev_llvm15/build.sh | 113 ++++++++++++++++++ .../llvmdev_llvm15/conda_build_config.yaml | 12 ++ conda-recipes/llvmdev_llvm15/meta.yaml | 69 +++++++++++ conda-recipes/llvmdev_llvm15/numba-3016.ll | 80 +++++++++++++ 5 files changed, 318 insertions(+) create mode 100644 conda-recipes/llvmdev_llvm15/bld.bat create mode 100644 conda-recipes/llvmdev_llvm15/build.sh create mode 100644 conda-recipes/llvmdev_llvm15/conda_build_config.yaml create mode 100644 conda-recipes/llvmdev_llvm15/meta.yaml create mode 100644 conda-recipes/llvmdev_llvm15/numba-3016.ll diff --git a/conda-recipes/llvmdev_llvm15/bld.bat b/conda-recipes/llvmdev_llvm15/bld.bat new file mode 100644 index 000000000..c8f209ae9 --- /dev/null +++ b/conda-recipes/llvmdev_llvm15/bld.bat @@ -0,0 +1,44 @@ +REM base on https://github.com/AnacondaRecipes/llvmdev-feedstock/blob/master/recipe/bld.bat +echo on + +mkdir build +cd build + +REM remove GL flag for now +set "CXXFLAGS=-MD" +set "CC=cl.exe" +set "CXX=cl.exe" + +cmake -G "Ninja" ^ + -DCMAKE_BUILD_TYPE="Release" ^ + -DCMAKE_PREFIX_PATH=%LIBRARY_PREFIX% ^ + -DCMAKE_INSTALL_PREFIX:PATH=%LIBRARY_PREFIX% ^ + -DLLVM_USE_INTEL_JITEVENTS=ON ^ + -DLLVM_ENABLE_LIBXML2=FORCE_ON ^ + -DLLVM_ENABLE_RTTI=ON ^ + -DLLVM_ENABLE_ZLIB=FORCE_ON ^ + -DLLVM_ENABLE_ZSTD=FORCE_ON ^ + -DLLVM_INCLUDE_BENCHMARKS=OFF ^ + -DLLVM_INCLUDE_DOCS=OFF ^ + -DLLVM_INCLUDE_EXAMPLES=OFF ^ + -DLLVM_INCLUDE_TESTS=ON ^ + -DLLVM_INCLUDE_UTILS=ON ^ + -DLLVM_INSTALL_UTILS=ON ^ + -DLLVM_UTILS_INSTALL_DIR=libexec\llvm ^ + -DLLVM_BUILD_LLVM_C_DYLIB=no ^ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly ^ + -DCMAKE_POLICY_DEFAULT_CMP0111=NEW ^ + -DLLVM_ENABLE_PROJECTS:STRING=lld + -DLLVM_ENABLE_ASSERTIONS=ON ^ + -DLLVM_ENABLE_DIA_SDK=OFF + %SRC_DIR%/llvm +if %ERRORLEVEL% neq 0 exit 1 + +cmake --build . +if %ERRORLEVEL% neq 0 exit 1 + +REM bin\opt -S -vector-library=SVML -mcpu=haswell -O3 %RECIPE_DIR%\numba-3016.ll | bin\FileCheck %RECIPE_DIR%\numba-3016.ll +REM if %ERRORLEVEL% neq 0 exit 1 + +cd ..\llvm\test +python ..\..\build\bin\llvm-lit.py -vv Transforms ExecutionEngine Analysis CodeGen/X86 diff --git a/conda-recipes/llvmdev_llvm15/build.sh b/conda-recipes/llvmdev_llvm15/build.sh new file mode 100644 index 000000000..f40ca03f6 --- /dev/null +++ b/conda-recipes/llvmdev_llvm15/build.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +# based on https://github.com/AnacondaRecipes/llvmdev-feedstock/blob/master/recipe/build.sh + +set -x + +# Make osx work like linux. +sed -i.bak "s/NOT APPLE AND ARG_SONAME/ARG_SONAME/g" llvm/cmake/modules/AddLLVM.cmake +sed -i.bak "s/NOT APPLE AND NOT ARG_SONAME/NOT ARG_SONAME/g" llvm/cmake/modules/AddLLVM.cmake + +mkdir build +cd build + +export CPU_COUNT=4 + +CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_ENABLE_PROJECTS=lld;libunwind" + +if [[ "$target_platform" == "linux-64" ]]; then + CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_USE_INTEL_JITEVENTS=ON" +fi + +if [[ "$CC_FOR_BUILD" != "" && "$CC_FOR_BUILD" != "$CC" ]]; then + CMAKE_ARGS="${CMAKE_ARGS} -DCROSS_TOOLCHAIN_FLAGS_NATIVE=-DCMAKE_C_COMPILER=$CC_FOR_BUILD;-DCMAKE_CXX_COMPILER=$CXX_FOR_BUILD;-DCMAKE_C_FLAGS=-O2;-DCMAKE_CXX_FLAGS=-O2;-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath,${BUILD_PREFIX}/lib;-DCMAKE_MODULE_LINKER_FLAGS=;-DCMAKE_SHARED_LINKER_FLAGS=;-DCMAKE_STATIC_LINKER_FLAGS=;-DLLVM_INCLUDE_BENCHMARKS=OFF;" + CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_HOST_TRIPLE=$(echo $HOST | sed s/conda/unknown/g) -DLLVM_DEFAULT_TARGET_TRIPLE=$(echo $HOST | sed s/conda/unknown/g)" +fi + +# disable -fno-plt due to https://bugs.llvm.org/show_bug.cgi?id=51863 due to some GCC bug +if [[ "$target_platform" == "linux-ppc64le" ]]; then + CFLAGS="$(echo $CFLAGS | sed 's/-fno-plt //g')" + CXXFLAGS="$(echo $CXXFLAGS | sed 's/-fno-plt //g')" + CMAKE_ARGS="${CMAKE_ARGS} -DFFI_INCLUDE_DIR=$PREFIX/include" + CMAKE_ARGS="${CMAKE_ARGS} -DFFI_LIBRARY_DIR=$PREFIX/lib" +fi + +if [[ $target_platform == osx-* ]]; then + CMAKE_ARGS="${CMAKE_ARGS} -DFFI_INCLUDE_DIR=${CONDA_BUILD_SYSROOT}/usr/include/ffi" + CMAKE_ARGS="${CMAKE_ARGS} -DFFI_LIBRARY_DIR=${CONDA_BUILD_SYSROOT}/usr/lib" + CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_BUILD_LLVM_C_DYLIB=ON" + CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_ENABLE_LIBCXX=ON" + CMAKE_ARGS="${CMAKE_ARGS} -DRUNTIMES_CMAKE_ARGS=-DCMAKE_INSTALL_RPATH=«loader_path/../lib" + CMAKE_ARGS="${CMAKE_ARGS} -DDEFAULT_SYSROOT=${CONDA_BUILD_SYSROOT}" +fi + +if [[ $target_platform == osx-arm64 ]]; then + CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_ENABLE_WERROR=FALSE" +fi + +cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_LIBRARY_PATH="${PREFIX}" \ + -DLLVM_ENABLE_LIBEDIT=OFF \ + -DLLVM_ENABLE_LIBXML2=OFF \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_TERMINFO=OFF \ + -DLLVM_ENABLE_ZLIB=FORCE_ON \ + -DLLVM_ENABLE_ZSTD=FORCE_ON \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_GO_TESTS=OFF \ + -DLLVM_INCLUDE_TESTS=ON \ + -DLLVM_INCLUDE_UTILS=ON \ + -DLLVM_INSTALL_UTILS=ON \ + -DLLVM_UTILS_INSTALL_DIR=libexec/llvm \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \ + -DLLVM_ENABLE_FFI=ON \ + -DLLVM_ENABLE_Z3_SOLVER=OFF \ + -DLLVM_OPTIMIZED_TABLEGEN=ON \ + -DCMAKE_POLICY_DEFAULT_CMP0111=NEW \ + ${CMAKE_ARGS} \ + -GNinja \ + ../llvm + + +ninja -j${CPU_COUNT} + +ninja install + +if [[ "${target_platform}" == "linux-64" || "${target_platform}" == "osx-64" ]]; then + export TEST_CPU_FLAG="-mcpu=haswell" +else + export TEST_CPU_FLAG="" +fi + +if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then + # bin/opt -S -vector-library=SVML $TEST_CPU_FLAG -O3 $RECIPE_DIR/numba-3016.ll | bin/FileCheck $RECIPE_DIR/numba-3016.ll || exit $? + + if [[ "$target_platform" == linux* ]]; then + ln -s $(which $CC) $BUILD_PREFIX/bin/gcc + + # These tests tests permission-based behaviour and probably fail because of some + # filesystem-related reason. They are sporadic failures and don't seem serious so they're excluded. + # Note that indents would introduce spaces into the environment variable + export LIT_FILTER_OUT='tools/llvm-ar/error-opening-permission.test|'\ +'tools/llvm-dwarfdump/X86/output.s|'\ +'tools/llvm-ifs/fail-file-write.test|'\ +'tools/llvm-ranlib/error-opening-permission.test' + fi + + if [[ "$target_platform" == osx-* ]]; then + # This failure seems like something to do with the output format of ls -lu + # and looks harmless + export LIT_FILTER_OUT='tools/llvm-objcopy/ELF/strip-preserve-atime.test' + fi + + ninja -j${CPU_COUNT} check-llvm + + cd ../llvm/test + ${PYTHON} ../../build/bin/llvm-lit -vv Transforms ExecutionEngine Analysis CodeGen/X86 +fi + diff --git a/conda-recipes/llvmdev_llvm15/conda_build_config.yaml b/conda-recipes/llvmdev_llvm15/conda_build_config.yaml new file mode 100644 index 000000000..81b7d08c3 --- /dev/null +++ b/conda-recipes/llvmdev_llvm15/conda_build_config.yaml @@ -0,0 +1,12 @@ +# Numba/llvmlite stack needs an older compiler for backwards compatability. +c_compiler_version: # [linux] + - 7 # [linux and (x86_64 or ppc64le)] + - 9 # [linux and aarch64] + +cxx_compiler_version: # [linux] + - 7 # [linux and (x86_64 or ppc64le)] + - 9 # [linux and aarch64] + +fortran_compiler_version: # [linux] + - 7 # [linux and (x86_64 or ppc64le)] + - 9 # [linux and aarch64] diff --git a/conda-recipes/llvmdev_llvm15/meta.yaml b/conda-recipes/llvmdev_llvm15/meta.yaml new file mode 100644 index 000000000..ef9aafb0f --- /dev/null +++ b/conda-recipes/llvmdev_llvm15/meta.yaml @@ -0,0 +1,69 @@ +{% set shortversion = "15.0" %} +{% set version = "15.0.7" %} +{% set sha256_llvm = "8b5fcb24b4128cf04df1b0b9410ce8b1a729cb3c544e6da885d234280dedeac6" %} +{% set build_number = "0" %} + +package: + name: llvmdev + version: {{ version }} + +source: + - url: https://github.com/llvm/llvm-project/releases/download/llvmorg-{{ version.replace(".rc", "-rc") }}/llvm-project-{{ version.replace(".rc", "rc") }}.src.tar.xz + sha256: {{ sha256_llvm }} + # patches: + # - ../llvm14-clear-gotoffsetmap.patch + # - ../llvm14-remove-use-of-clonefile.patch + # - ../llvm14-svml.patch + +build: + number: {{ build_number }} + script_env: + - PY_VCRUNTIME_REDIST + ignore_run_exports: + # Is static-linked + - xar + +requirements: + build: + - {{ compiler('cxx') }} + - cmake + - ninja + - python >=3 + - libcxx {{ cxx_compiler_version }} # [osx] + - patch # [not win] + - m2-patch # [win] + - git # [(linux and x86_64)] + + host: + - libcxx {{ cxx_compiler_version }} # [osx] + - libffi # [unix] + # libxml2 supports a windows-only feature, see https://github.com/llvm/llvm-project/blob/llvmorg-17.0.6/llvm/include/llvm/WindowsManifest/WindowsManifestMerger.h + - libxml2 # [win] + - zlib + - zstd + +test: + files: + - numba-3016.ll + commands: + - $PREFIX/bin/llvm-config --libs # [not win] + - $PREFIX/bin/llc -version # [not win] + + - if not exist %LIBRARY_INC%\\llvm\\Pass.h exit 1 # [win] + - if not exist %LIBRARY_LIB%\\LLVMSupport.lib exit 1 # [win] + + - test -f $PREFIX/include/llvm/Pass.h # [unix] + - test -f $PREFIX/lib/libLLVMSupport.a # [unix] + + - test -f $PREFIX/lib/libLLVMCore.a # [not win] + + # LLD tests + - ld.lld --version # [unix] + - lld-link /? # [win] + +about: + home: http://llvm.org/ + dev_url: https://github.com/llvm-mirror/llvm + license: NCSA + license_file: llvm/LICENSE.TXT + summary: Development headers and libraries for LLVM diff --git a/conda-recipes/llvmdev_llvm15/numba-3016.ll b/conda-recipes/llvmdev_llvm15/numba-3016.ll new file mode 100644 index 000000000..1a9b3ecf8 --- /dev/null +++ b/conda-recipes/llvmdev_llvm15/numba-3016.ll @@ -0,0 +1,80 @@ +; Regression test for llvmdev-feedstock#52 and numba#3016 + +; Generated from C code: int a[1<<10],b[1<<10]; void foo() { int i=0; for(i=0; i<1<<10; i++) { b[i]=sin(a[i]); }} +; compiled: -fvectorize -fveclib=SVML -O -S -mavx -mllvm -disable-llvm-optzns -emit-llvm + +; RUN: opt -vector-library=SVML -mcpu=haswell -O3 -S < %s | FileCheck %s +; CHECK: call {{.*}}__svml_sin4_ha( +; CHECK-NOT: call {{.*}}__svml_sin4( +; CHECK-NOT: call {{.*}}__svml_sin8 + +source_filename = "svml-3016.c" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-linux-gnu" + +@a = common dso_local global [1024 x i32] zeroinitializer, align 16 +@b = common dso_local global [1024 x i32] zeroinitializer, align 16 + +; Function Attrs: nounwind uwtable +define dso_local void @foo() #0 { + %1 = alloca i32, align 4 + %2 = bitcast i32* %1 to i8* + call void @llvm.lifetime.start.p0i8(i64 4, i8* %2) #3 + store i32 0, i32* %1, align 4, !tbaa !2 + store i32 0, i32* %1, align 4, !tbaa !2 + br label %3 + +;