diff --git a/.github/workflows/sycl-linux-precommit.yml b/.github/workflows/sycl-linux-precommit.yml index 37c79b2640add..f3002412c0895 100644 --- a/.github/workflows/sycl-linux-precommit.yml +++ b/.github/workflows/sycl-linux-precommit.yml @@ -79,8 +79,27 @@ jobs: toolchain_artifact: sycl_linux_ubuntu22 + compat_read_exclude: + name: Read compatibility testing exclude list + runs-on: [Linux, build] + outputs: + FILTER: ${{ steps.result.outputs.FILTER }} + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: | + devops/ + - name: Register cleanup after job is finished + uses: ./devops/actions/cleanup + - id: result + shell: bash + run: | + # Transform to format expected by `llvm-lit --filter-out "pattern1|pattern2|..."`. + # First, remove comments/empty lines, then join lines with "|" as separator. + echo FILTER="$(grep -v '^#\|^\W*$' devops/compat_ci_exclude.sycl-rel-6_2 | paste -sd '|')" >> $GITHUB_OUTPUT + run_prebuilt_e2e_tests: - needs: [build, detect_changes] + needs: [build, detect_changes, compat_read_exclude] if: ${{ always() && !cancelled() && needs.build.outputs.build_conclusion == 'success' }} strategy: fail-fast: false @@ -134,13 +153,19 @@ jobs: target_devices: level_zero:gpu;opencl:gpu;opencl:cpu extra_lit_opts: --param test-preview-mode=True e2e_binaries_artifact: e2e_bin_preview + - name: ABI compatibility against sycl-rel-6_2 + runner: '["Linux", "pvc"]' + image: ghcr.io/intel/llvm/sycl_prebuilt_tests:sycl-rel-6_2 + target_devices: level_zero:gpu + extra_lit_opts: '--param test-preview-mode=False --filter-out "${{ needs.compat_read_exclude.outputs.FILTER }}"' + e2e_binaries_artifact: 'in-container' uses: ./.github/workflows/sycl-linux-run-tests.yml with: name: ${{ matrix.name }} runner: ${{ matrix.runner }} image: ${{ matrix.image }} - image_options: ${{ matrix.image_options }} + image_options: ${{ matrix.image_options || '-u 1001 --device=/dev/dri -v /dev/dri/by-path:/dev/dri/by-path --privileged --cap-add SYS_ADMIN' }} target_devices: ${{ matrix.target_devices }} extra_lit_opts: ${{ matrix.extra_lit_opts }} repo_ref: ${{ github.sha }} diff --git a/.github/workflows/sycl-linux-run-tests.yml b/.github/workflows/sycl-linux-run-tests.yml index d77be16d2227b..f37b5e59a54a6 100644 --- a/.github/workflows/sycl-linux-run-tests.yml +++ b/.github/workflows/sycl-linux-run-tests.yml @@ -62,8 +62,9 @@ on: description: | When set in modes other than `run-only` results in artifact upload. For `run-only` mode, if specified, means downloading pre-built - binaries from the artifact, otherwise they are expected to be part of - the container. + binaries from the artifact. If set to special value `in-container` + then the binaries are expected to be stored in the container image + instead of coming from an artifact. type: string default: '' required: False diff --git a/.github/workflows/sycl-windows-precommit.yml b/.github/workflows/sycl-windows-precommit.yml index 8caa7304747c4..b8f8c675151d2 100644 --- a/.github/workflows/sycl-windows-precommit.yml +++ b/.github/workflows/sycl-windows-precommit.yml @@ -25,6 +25,7 @@ on: - '.github/workflows/trivy.yml' - 'devops/containers/**' - 'devops/actions/build_container/**' + - 'devops/compat_ci_exclude.sycl-rel-6_2' - 'unified-runtime/examples/**' - 'unified-runtime/scripts/**' - 'unified-runtime/test/**' diff --git a/devops/actions/run-tests/e2e/action.yml b/devops/actions/run-tests/e2e/action.yml index 1457bbe264c2c..2b0564bd1bc2e 100644 --- a/devops/actions/run-tests/e2e/action.yml +++ b/devops/actions/run-tests/e2e/action.yml @@ -24,7 +24,7 @@ runs: using: "composite" steps: - name: Checkout E2E tests - if: ${{ !(inputs.testing_mode == 'run-only' && inputs.binaries_artifact == '') }} + if: ${{ !(inputs.testing_mode == 'run-only' && inputs.binaries_artifact == 'in-container') }} uses: actions/checkout@v4 with: path: llvm @@ -33,19 +33,19 @@ runs: llvm/utils/lit sycl/test-e2e - name: Download E2E Binaries - if: ${{ inputs.testing_mode == 'run-only' && inputs.binaries_artifact != '' }} + if: ${{ inputs.testing_mode == 'run-only' && inputs.binaries_artifact != 'in-container' }} uses: actions/download-artifact@v4 with: name: ${{ inputs.binaries_artifact }} - name: Extract E2E Binaries - if: ${{ inputs.testing_mode == 'run-only' && inputs.binaries_artifact != '' }} + if: ${{ inputs.testing_mode == 'run-only' && inputs.binaries_artifact != 'in-container' }} shell: bash run: | mkdir build-e2e tar -I 'zstd' -xf e2e_binaries.tar.zst -C build-e2e - name: Extract E2E tests from container image - if: ${{ inputs.testing_mode == 'run-only' && inputs.binaries_artifact == '' }} + if: ${{ inputs.testing_mode == 'run-only' && inputs.binaries_artifact == 'in-container' }} shell: bash run: | mkdir build-e2e llvm diff --git a/devops/compat_ci_exclude.sycl-rel-6_2 b/devops/compat_ci_exclude.sycl-rel-6_2 new file mode 100644 index 0000000000000..d34b3ab81ab12 --- /dev/null +++ b/devops/compat_ci_exclude.sycl-rel-6_2 @@ -0,0 +1,75 @@ +# Known OK: + +# https://github.com/intel/llvm/pull/18059 made property a no-op, so `FileCheck` +# fails, but that isn't an actual ABI break. +DiscardEvents/discard_events_accessors.cpp +DiscardEvents/discard_events_using_assert_ndebug.cpp +DiscardEvents/discard_events_usm.cpp +DiscardEvents/invalid_event.cpp +DiscardEvents/invalid_event_exceptions.cpp + +# https://github.com/intel/llvm/pull/18287 +# Throw exception instead of returning garbage +Basic/info.cpp + +# Likely OK, but need author to provide justification, get approval/confirmation +# from someone: + +# https://github.com/intel/llvm/pull/18565 +# This one should have probably be done in multiple PRs, first improving the +# test's CHECKs and then making an actual functional change. +# +# Based on the title, I'd expect to see reduction in number of ur*retain/release +# calls, but it only moves a few ur*release CHECKs, so I'll let the author +# update this explanation. +KernelAndProgram/disable-caching.cpp + +# https://github.com/intel/llvm/pull/18253 broke at least some of the pre-built +# E2E binaries, but do we really need to provide backward compatibility for +# binaries built with sanitizers? +Sanitizer + +# https://github.com/intel/llvm/pull/19238 +NonUniformGroups/opportunistic_group.cpp + +# https://github.com/intel/llvm/pull/17955, experimental extension +AsyncAlloc/device/async_alloc_from_pool.cpp +AsyncAlloc/device/async_alloc_zero_init.cpp +AsyncAlloc/device/ooo_queue_async_alloc_from_pool.cpp + +# Need more investigation by the author: + +# https://github.com/intel/llvm/pull/18314 +Assert/assert_in_kernels.cpp +Assert/assert_in_multiple_tus.cpp +Assert/assert_in_multiple_tus_one_ndebug.cpp +Assert/assert_in_one_kernel.cpp +Assert/assert_in_simultaneous_kernels.cpp +Assert/assert_in_simultaneously_multiple_tus.cpp +Assert/assert_in_simultaneously_multiple_tus_one_ndebug.cpp + +# https://github.com/intel/llvm/pull/17442 +KernelCompiler/opencl.cpp +KernelCompiler/opencl_cache_eviction.cpp +KernelCompiler/opencl_queries.cpp + +# https://github.com/intel/llvm/pull/18403 (pulldown, so probably offload-tools +# team should be looking into this) +DeviceImageDependencies/NewOffloadDriver/dynamic.cpp +DeviceImageDependencies/NewOffloadDriver/free_function_kernels.cpp +DeviceImageDependencies/NewOffloadDriver/math_device_lib.cpp +DeviceImageDependencies/NewOffloadDriver/objects.cpp +DeviceImageDependencies/NewOffloadDriver/singleDynamicLibrary.cpp +NewOffloadDriver/aot-gpu.cpp +NewOffloadDriver/buffer.cpp +NewOffloadDriver/multisource.cpp +NewOffloadDriver/spirv_device_obj_smoke.cpp +NewOffloadDriver/split-per-source-main.cpp +NewOffloadDriver/sycl-external-with-optional-features.cpp + +# https://github.com/intel/llvm/pull/18277 +InOrderEventsExt/get_last_event.cpp +InorderQueue/in_order_ext_oneapi_submit_barrier.cpp + +# https://github.com/intel/llvm/pull/19328 +Adapters/interop-level-zero-buffer-ownership.cpp