Testing

Tests are an important part on preventing regressions and covering new feature functionality. There are multiple ways to run CIR tests.

Unit tests

The more aggresive (slower) one:

$ ninja check-all 

CIR specific test targets using ninja:

$ ninja check-clang-cir $ ninja check-clang-cir-codegen 

Using lit from build directory:

$ cd build-release $ ./bin/llvm-lit -a ../../clang/test/CIR 

LLVM Test Suite

We often evaluate and monitor ClangIR support against singlesource, multisource and spec benchmarks. See the benchmark results page for more information.

How to build and run

  • Build a release version of ClangIR with assertions enabled (prevents some false positives).

  • Cherry-pick this git commit for extra CMake flags that enable ClangIR.

  • Create a build directory and build the tests with the release version of ClangIR:
    cd <path-to>/test-suite rm -rf ./build && mkdir build && cd build cmake --no-warn-unused-cli ../ \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER=<path-to-clangir-build>/bin/clang \ -DCMAKE_CXX_COMPILER=<path-to-clangir-build>/bin/clang++ \ -C=../cmake/caches/O3.cmake \ -DTEST_SUITE_SUBDIRS=SingleSource \ # MultiSource, External/SPEC/CINT2017rate, External/SPEC/CFP2017rate -DTEST_SUITE_CLANGIR_ENABLE=ON 
  • For SPEC extra setup is also needed.

  • Build tests (-k ensures it won’t stop if a test fails to compile):
    make -j -k 
  • In the build directory, run the tests with:
    lit -v . 

Generating a comparison Table

  • Patch the utils/compare.py tool with:
    002-generate-clangir-comparison-table.patch

  • Build the binaries and collect results for 15 runs of both baseline and ClangIR tests:
     # Set TEST_SUITE_CLANGIR_ENABLE=OFF to get the baseline tests. for i in {1..15}; do lit -v -o "baseline_$i.json" .; done; for i in {1..15}; do lit -v -o "clangir_$i.json" .; done; 
  • Create the comparison table using the patched utils/compare.py:
    utils/compare.py \ --lhs-name baseline --rhs-name clangir --minimal-names \ --merge-average --all -m compile_time -m exec_time \ --csv-output results.csv \ baseline_1.json ... baseline_15.json vs clangir_1.json ... clangir_15.json