| # Copyright 2026 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| load("//build_tools/bazel:build_defs.oss.bzl", "iree_cmake_extra_content") | |
| load("//build_tools/bazel:iree_bitcode_library.bzl", "iree_bitcode_library") | |
| load("//build_tools/embed_data:build_defs.bzl", "iree_c_embed_data") | |
| package( | |
| default_visibility = ["//visibility:public"], | |
| features = ["layering_check"], | |
| licenses = ["notice"], # Apache 2.0 | |
| ) | |
| iree_cmake_extra_content( | |
| content = """ | |
| if(NOT IREE_TARGET_BACKEND_LLVM_CPU) | |
| return() | |
| endif() | |
| """, | |
| inline = True, | |
| ) | |
| #===------------------------------------------------------------------------===# | |
| # UKernel bitcode files | |
| #===------------------------------------------------------------------------===# | |
| # | |
| # Each entry below compiles one .c file to one .bc file for a specific | |
| # (arch, features) tuple. Each .c file is named after the MMA intrinsic it | |
| # implements (lowercased, with `iree_uk_` prefix), matching the | |
| # verbatim-intrinsic convention used by the AMDGPU C ukernels. The bitcode | |
| # output name appends the build-side `<arch>_<features>` suffix so the | |
| # compiler-side lookup in `EmbeddedDataDirectory` can find the right bitcode | |
| # for a given target's feature set. See README.md for the design. | |
| X86_64_AVX512_BF16_COPTS = [ | |
| "-mavx512f", | |
| "-mavx512bf16", | |
| ] | |
| X86_64_AVX512_VNNI_COPTS = [ | |
| "-mavx512f", | |
| "-mavx512bw", | |
| "-mavx512vnni", | |
| ] | |
| # (stem, features, copts) for each x86_64 ukernel. `stem` is both the .c file | |
| # base name and the ukernel function name; `features` is the ISA-extension | |
| # suffix appended (as `_x86_64_<features>` to the library name and | |
| # `.x86_64_<features>.bc` to the output) for the EmbeddedDataDirectory lookup. | |
| X86_64_UKERNELS = [ | |
| ( | |
| "iree_uk_mma_x86_avx512bf16_1x16x2_f32_bf16", | |
| "avx512bf16", | |
| X86_64_AVX512_BF16_COPTS, | |
| ), | |
| ( | |
| "iree_uk_mma_x86_avx512vnni_16x16x2_i32_i8_casti16", | |
| "avx512vnni", | |
| X86_64_AVX512_VNNI_COPTS, | |
| ), | |
| ] | |
| [iree_bitcode_library( | |
| name = "%s_x86_64_%s" % (stem, features), | |
| srcs = ["%s.c" % stem], | |
| out = "%s.x86_64_%s.bc" % (stem, features), | |
| arch = "x86_64", | |
| copts = copts, | |
| internal_hdrs = ["common.h"], | |
| ) for (stem, features, copts) in X86_64_UKERNELS] | |
| #===------------------------------------------------------------------------===# | |
| # Embedded bitcode TOC | |
| #===------------------------------------------------------------------------===# | |
| iree_c_embed_data( | |
| name = "iree_uk_cpu_bitcode", | |
| srcs = [ | |
| ":%s.x86_64_%s.bc" % (stem, features) | |
| for (stem, features, copts) in X86_64_UKERNELS | |
| ], | |
| c_file_output = "iree_uk_cpu_bitcode.c", | |
| flatten = True, | |
| h_file_output = "iree_uk_cpu_bitcode.h", | |
| ) |