[llvm] [RISCV][WIP] Let RA do the CSR saves. (PR #90819)
Mikhail Gudim via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 30 12:20:19 PDT 2024
https://github.com/mgudim updated https://github.com/llvm/llvm-project/pull/90819
>From 08efec00da8c994357746a24b06f06cb4688a44a Mon Sep 17 00:00:00 2001
From: Mikhail Gudim <mgudim at ventanamicro.com>
Date: Wed, 30 Oct 2024 10:49:13 -0700
Subject: [PATCH] setup CI
---
.gitlab-ci.yml | 96 ++++++++++++++++++++++++++++
Makefile | 169 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 265 insertions(+)
create mode 100644 .gitlab-ci.yml
create mode 100644 Makefile
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000000000..5b236d33c9d277
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,96 @@
+# image should be available on the server
+image:
+ name: gitlab.dc1.ventanamicro.com:5005/toolchain/llvm
+ entrypoint: [""]
+
+stages:
+ - build
+ - test
+ - deploy
+
+# TODO: split this up into several jobs. To do this,
+# need to figure out how to pass files from one job to another.
+build-test-benchmark:
+ tags:
+ - toolchain
+ stage: build
+ except:
+ variables:
+ - $CI_COMMIT_MESSAGE =~ /Merge.+branch\s(.*)\sinto(.*)/
+ script:
+ - echo "Hello, $GITLAB_USER_LOGIN!"
+ - whoami
+ - pwd
+
+ # check that we can execute riscv64 with the plugin
+ - cp $TEST_RISCV64 .
+ - (export USE_QEMU_PLUGIN="1"; export QEMU_CPU="veyron-v2"; ./test-riscv64.elf)
+ - ls
+
+ - export BRANCH_NAME=$CI_COMMIT_BRANCH
+ # check that needed volumes are mounter correctly
+ - export CCACHE_DIR=/mnt/ccache/llvm
+ - export ARTIFACTS_DIR=/mnt/artifacts/llvm
+ - ls $CCACHE_DIR
+ - ls $ARTIFACTS_DIR
+
+ # check that ccache is actually working
+ - ccache -s -v
+
+ - export STAGING_DIR=$ARTIFACTS_DIR/staging/$CI_COMMIT_BRANCH
+ - rm -rf $STAGING_DIR
+ - mkdir -p $STAGING_DIR
+
+ - cp -r /mnt/spec2017 $STAGING_DIR/
+ - export SPEC_DIR=$STAGING_DIR/spec2017
+
+ - export BUILD_DIR=$STAGING_DIR/build
+ - export INSTALL_DIR=$STAGING_DIR/install
+
+ - make prepare
+ - make configure_llvm
+ # TODO: run tests
+ - make install_llvm
+
+ # run benchmarks with test workload
+ - make clean_spec
+ - make run_spec_test
+ #- make check_spec_logs
+
+ # run benchmarks with train workload
+ - make clean_spec
+ - make run_spec_train
+ - make check_spec_logs
+
+ # MKDIR_CP is defined by the docker container
+ - $MKDIR_CP -listOfPaths $(ls $SPEC_DIR/cpu2017/benchspec/CPU/*/build/*/*.out) -pathPrefix $STAGING_DIR
+ - $MKDIR_CP -listOfPaths $(ls $SPEC_DIR/cpu2017/benchspec/CPU/*/run/*/*.collect) -pathPrefix $STAGING_DIR
+ - python3 $PARSE_BENCHMARK_DATA -pathToSpec $SPEC_DIR/cpu2017 -pathToOutput $STAGING_DIR/parsedBenchmarkData.json
+
+ # Baseline has to be first in the -listOfJsonFiles
+ #- python3 $REPORT -listOfJsonFiles parsedBenchmarkData.json -dashBoardFile $ARTIFACTS_DIR/dashboard.csv | tee report.txt
+ - python3 $REPORT -listOfJsonFiles $ARTIFACTS_DIR/commited/baseline/parsedBenchmarkData.json $STAGING_DIR/parsedBenchmarkData.json -dashBoardFile $ARTIFACTS_DIR/dashboard.csv | tee report.txt
+
+
+update-baseline:
+ tags:
+ - toolchain
+ stage: deploy
+ script:
+ - export ARTIFACTS_DIR=/mnt/artifacts/llvm
+ - export BRANCH_NAME=$(python3 $EXTRACT_BRANCH_NAME_FROM_COMMIT_MESSAGE -commitMessage "$CI_COMMIT_MESSAGE")
+ - export STAGING_DIR=$ARTIFACTS_DIR/staging/$BRANCH_NAME
+ - export INSTALL_DIR=$STAGING_DIR/install
+ - make package_llvm
+ - mv $STAGING_DIR/ventana-llvm.deb $ARTIFACTS_DIR/latest_build/ventana-llvm.deb
+ - rm -rf $STAGING_DIR/build
+ - rm -rf $STAGING_DIR/install
+ - rm -rf $STAGING_DIR/spec2017
+
+ # GET_THIS_COMMIT_NUM is defined by the docker container
+ - python3 $UPDATE_ARTIFACTS -artifactsDir $ARTIFACTS_DIR -branchToCommit=$(python3 $EXTRACT_BRANCH_NAME_FROM_COMMIT_MESSAGE -commitMessage "$CI_COMMIT_MESSAGE") -commitNo=$(python3 $GET_THIS_COMMIT_NUM -commitedDir $ARTIFACTS_DIR/commited)
+
+ only:
+ variables:
+ - $CI_COMMIT_MESSAGE =~ /Merge.+branch\s(.*)\sinto(.*)/
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000000000..237db518e7a934
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,169 @@
+TOP = $(PWD)
+SHELL := /bin/bash
+
+prepare:
+ rm -rf $(BUILD_DIR)
+ rm -rf $(INSTALL_DIR)
+ mkdir -p $(BUILD_DIR)
+ mkdir -p $(INSTALL_DIR)
+ dpkg --extract /mnt/artifacts/gcc/latest_build/ventana-gcc.deb $(INSTALL_DIR)
+
+configure_llvm:
+ cd $(BUILD_DIR); \
+ cmake $(TOP)/llvm \
+ -G Ninja \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLLVM_ENABLE_ASSERTIONS=ON \
+ -DCMAKE_C_COMPILER=$(CC) \
+ -DCMAKE_CXX_COMPILER=$(CXX) \
+ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \
+ -DCMAKE_CXX_FLAGS="-stdlib=libc++" \
+ -DLLVM_USE_LINKER=lld \
+ -DBUILD_SHARED_LIBS=ON \
+ -DLLVM_TARGETS_TO_BUILD="RISCV" \
+ -DLLVM_ENABLE_PROJECTS="clang;lld" \
+ -DLLVM_OPTIMIZED_TABLEGEN=ON \
+ -DLLVM_PARALLEL_LINK_JOBS=1 \
+ -DCMAKE_INSTALL_PREFIX=$(INSTALL_DIR) \
+ -DLLVM_FORCE_VC_REPOSITORY="blah_blah" \
+ -DLLVM_BINUTILS_INCDIR=$(INSTALL_DIR)/x86_64-pc-linux-gnu/riscv64-linux-gnu/include
+
+configure_llvm_native_riscv64_flang_build:
+ rm -rf $(BUILD_DIR)
+ mkdir -p $(BUILD_DIR)
+ mkdir -p $(INSTALL_DIR)
+ cd $(BUILD_DIR); \
+ cmake $(TOP)/llvm \
+ -G Ninja \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLLVM_ENABLE_ASSERTIONS=ON \
+ -DLLVM_TARGETS_TO_BUILD="host" \
+ -DLLVM_ENABLE_PROJECTS="clang;mlir;flang;openmp" \
+ -DCMAKE_C_COMPILER=gcc \
+ -DCMAKE_CXX_COMPILER=g++ \
+ -DLLVM_PARALLEL_LINK_JOBS=1 \
+ -DCMAKE_INSTALL_PREFIX=$(INSTALL_DIR) \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt"
+
+install_llvm:
+ cd $(BUILD_DIR); cmake --build . --target install
+
+package_llvm:
+ mkdir -p $(INSTALL_DIR)/DEBIAN
+ echo -e "\
+Package: ventanta-llvm \n\
+Version: 1.0 \n\
+Section: utils \n\
+Priority: optional \n\
+Architecture: all \n\
+Maintainer: Ventana Micro Systems \n\
+Description: LLVM, $(BRANCH_NAME) \n\
+" > $(INSTALL_DIR)/DEBIAN/control
+ dpkg-deb --root-owner-group --build $(INSTALL_DIR)
+ mv $(STAGING_DIR)/install.deb $(STAGING_DIR)/ventana-llvm.deb
+
+MCPU=veyron-v1
+
+
+# -mllvm -riscv-enable-save-csr-in-ra=true \
+# -mllvm -min-weight-ratio-needed-to-evict-hint=7.5 \
+
+SPEC_OPTIMIZE_FLAGS="\
+ --sysroot=$(INSTALL_DIR) \
+ -mcpu=$(MCPU) \
+ -O3 \
+ -frecord-command-line \
+"
+SPEC_LD_FLAGS="\
+ -fuse-ld=$(INSTALL_DIR)/riscv64-linux-gnu/bin/ld.bfd \
+ -static \
+"
+# SPEC_DIR is defined in gitlab-ci.yml
+#
+define runSpecBenchmark
+ cd $(SPEC_DIR)/cpu2017; \
+ (\
+ source shrc; \
+ export USE_QEMU_PLUGIN="1"; \
+ export QEMU_CPU="$(MCPU)"; \
+ runcpu \
+ --config=llvm-linux-riscv-ventana.cfg \
+ --define label=$(BRANCH_NAME) \
+ --define llvm_bin_dir="$(INSTALL_DIR)/bin" \
+ --define optimize_flags=$(SPEC_OPTIMIZE_FLAGS) \
+ --define ld_flags=$(SPEC_LD_FLAGS) \
+ --action=validate \
+ --size=$(2) \
+ $(1) \
+ )
+endef
+
+
+run_spec_test:
+ $(call runSpecBenchmark,500.perlbench_r,test) & \
+ $(call runSpecBenchmark,502.gcc_r,test) & \
+ $(call runSpecBenchmark,505.mcf_r,test) & \
+ $(call runSpecBenchmark,508.namd_r,test) & \
+ $(call runSpecBenchmark,510.parest_r,test) & \
+ $(call runSpecBenchmark,511.povray_r,test) & \
+ $(call runSpecBenchmark,519.lbm_r,test) & \
+ $(call runSpecBenchmark,520.omnetpp_r,test) & \
+ $(call runSpecBenchmark,523.xalancbmk_r,test) & \
+ $(call runSpecBenchmark,525.x264_r,test) & \
+ $(call runSpecBenchmark,526.blender_r,test) & \
+ $(call runSpecBenchmark,531.deepsjeng_r,test) & \
+ $(call runSpecBenchmark,538.imagick_r,test) & \
+ $(call runSpecBenchmark,541.leela_r,test) & \
+ $(call runSpecBenchmark,544.nab_r,test) & \
+ $(call runSpecBenchmark,557.xz_r,test) & \
+ wait
+
+run_spec_train:
+ $(call runSpecBenchmark,500.perlbench_r,train) & \
+ $(call runSpecBenchmark,502.gcc_r,train) & \
+ $(call runSpecBenchmark,505.mcf_r,train) & \
+ $(call runSpecBenchmark,508.namd_r,train) & \
+ $(call runSpecBenchmark,510.parest_r,train) & \
+ $(call runSpecBenchmark,511.povray_r,train) & \
+ $(call runSpecBenchmark,519.lbm_r,train) & \
+ $(call runSpecBenchmark,520.omnetpp_r,train) & \
+ $(call runSpecBenchmark,523.xalancbmk_r,train) & \
+ $(call runSpecBenchmark,525.x264_r,train) & \
+ $(call runSpecBenchmark,526.blender_r,train) & \
+ $(call runSpecBenchmark,531.deepsjeng_r,train) & \
+ $(call runSpecBenchmark,538.imagick_r,train) & \
+ $(call runSpecBenchmark,541.leela_r,train) & \
+ $(call runSpecBenchmark,544.nab_r,train) & \
+ $(call runSpecBenchmark,557.xz_r,train) & \
+ wait
+
+check_spec_logs:
+ cd $(SPEC_DIR); \
+ python3 spec.py \
+ --specCPU2017Path=cpu2017 \
+ --checkSpecLogs \
+ --benchmarksList="\
+500.perlbench_r,\
+502.gcc_r,\
+505.mcf_r,\
+508.namd_r,\
+510.parest_r,\
+511.povray_r,\
+519.lbm_r,\
+520.omnetpp_r,\
+523.xalancbmk_r,\
+525.x264_r,\
+526.blender_r,\
+531.deepsjeng_r,\
+538.imagick_r,\
+541.leela_r,\
+544.nab_r,\
+557.xz_r\
+"
+
+clean_spec:
+ rm -rf $(SPEC_DIR)/cpu2017/benchspec/C*/*/run
+ rm -rf $(SPEC_DIR)/cpu2017/benchspec/C*/*/build
+ rm -rf $(SPEC_DIR)/cpu2017/benchspec/C*/*/exe
+ rm -rf $(SPEC_DIR)/cpu2017/result/*
+ rm -rf $(SPEC_DIR)/cpu2017/tmp/*
More information about the llvm-commits
mailing list