|  | # Copyright 2020 Google LLC | 
|  | # | 
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | # you may not use this file except in compliance with the License. | 
|  | # You may obtain a copy of the License at | 
|  | # | 
|  | #      https://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, software | 
|  | # distributed under the License is distributed on an "AS IS" BASIS, | 
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | # See the License for the specific language governing permissions and | 
|  | # limitations under the License. | 
|  |  | 
|  | # Tests for end-to-end IREE support starting from the XLA HLO dialect. | 
|  |  | 
|  | load("//iree:lit_test.bzl", "iree_lit_test_suite") | 
|  | load("//iree:build_defs.oss.bzl", "IREE_DRIVER_MODULES", "PLATFORM_VULKAN_DEPS") | 
|  |  | 
|  | package( | 
|  | default_visibility = ["//visibility:public"], | 
|  | features = ["layering_check"], | 
|  | licenses = ["notice"],  # Apache 2.0 | 
|  | ) | 
|  |  | 
|  | iree_lit_test_suite( | 
|  | name = "lit", | 
|  | srcs = glob( | 
|  | ["*.cpp"], | 
|  | exclude = [ | 
|  | "Bench*", | 
|  | ], | 
|  | ), | 
|  | data = [ | 
|  | # runtime libraries | 
|  | "@llvm-project//mlir:tools/libvulkan-runtime-wrappers.so", | 
|  | "runtime-support.so", | 
|  | # Tests. | 
|  | ":test-dot-prod", | 
|  | "test-mnist-jit", | 
|  | "test-simple-jit", | 
|  | "test-simple-jit-vulkan", | 
|  | "test-simple-mlir", | 
|  | "test-vector-transfers-jit", | 
|  | "test-matmul-vulkan", | 
|  | "test-vec-to-gpu", | 
|  | # FileChecker. | 
|  | "//iree/tools:IreeFileCheck", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-dot-prod", | 
|  | srcs = ["TestDotProdJIT.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "@llvm-project//llvm:Support", | 
|  | "@llvm-project//mlir:EDSC", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:SCFTransforms", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-vector-transfers-jit", | 
|  | srcs = ["TestVectorTransfersJIT.cpp"], | 
|  | deps = [ | 
|  | ":runtime-support.so", | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "@llvm-project//llvm:Support", | 
|  | "@llvm-project//mlir:EDSC", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:SCFTransforms", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-mnist-jit", | 
|  | srcs = ["TestMNISTJIT.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "@llvm-project//mlir:EDSC", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:SCFTransforms", | 
|  | # mlir_runner_utils with iostream needed for printMemRef atm | 
|  | "@llvm-project//mlir:mlir_runner_utils", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-simple-jit", | 
|  | srcs = ["TestSimpleJIT.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "@llvm-project//llvm:Support", | 
|  | "@llvm-project//mlir:EDSC", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:SCFTransforms", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-simple-jit-vulkan", | 
|  | srcs = ["TestSimpleJITVulkan.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "//iree/base:initializer", | 
|  | "@llvm-project//llvm:Support", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:Parser", | 
|  | "@llvm-project//mlir:SPIRVDialect", | 
|  | "@llvm-project//mlir:mlir_runner_utils", | 
|  | ] + PLATFORM_VULKAN_DEPS + IREE_DRIVER_MODULES, | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-matmul-vulkan", | 
|  | srcs = ["TestMatMulVulkan.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "//experimental/ModelBuilder:VulkanLaunchWrapper", | 
|  | "//iree/base:initializer", | 
|  | "//iree/compiler/Conversion/CodegenUtils", | 
|  | "//iree/compiler/Conversion/LinalgToSPIRV", | 
|  | "@llvm-project//llvm:Support", | 
|  | "@llvm-project//mlir:ExecutionEngine", | 
|  | "@llvm-project//mlir:ExecutionEngineUtils", | 
|  | "@llvm-project//mlir:GPUToSPIRVTransforms", | 
|  | "@llvm-project//mlir:GPUToVulkanTransforms", | 
|  | "@llvm-project//mlir:GPUTransforms", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:LLVMTransforms", | 
|  | "@llvm-project//mlir:LinalgOps", | 
|  | "@llvm-project//mlir:LinalgToLLVM", | 
|  | "@llvm-project//mlir:LinalgTransforms", | 
|  | "@llvm-project//mlir:Parser", | 
|  | "@llvm-project//mlir:Pass", | 
|  | "@llvm-project//mlir:SPIRVDialect", | 
|  | "@llvm-project//mlir:StandardToSPIRVConversions", | 
|  | "@llvm-project//mlir:Support", | 
|  | "@llvm-project//mlir:TargetLLVMIR", | 
|  | "@llvm-project//mlir:TransformUtils", | 
|  | "@llvm-project//mlir:VectorToLLVM", | 
|  | # mlir_runner_utils with iostream needed for printMemRef atm | 
|  | "@llvm-project//mlir:mlir_runner_utils", | 
|  | ] + PLATFORM_VULKAN_DEPS + IREE_DRIVER_MODULES, | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-vec-to-gpu", | 
|  | srcs = ["TestVectorToGPU.cpp"], | 
|  | tags = [ | 
|  | "noga", | 
|  | ], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "//experimental/ModelBuilder:VulkanLaunchWrapper", | 
|  | "//iree/base:initializer", | 
|  | "//iree/compiler/Conversion/CodegenUtils", | 
|  | "//iree/compiler/Conversion/LinalgToSPIRV", | 
|  | "@llvm-project//llvm:Support", | 
|  | "@llvm-project//mlir:GPUToVulkanTransforms", | 
|  | "@llvm-project//mlir:GPUTransforms", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:LLVMTransforms", | 
|  | "@llvm-project//mlir:LinalgOps", | 
|  | "@llvm-project//mlir:LinalgToLLVM", | 
|  | "@llvm-project//mlir:LinalgTransforms", | 
|  | "@llvm-project//mlir:Parser", | 
|  | "@llvm-project//mlir:Pass", | 
|  | "@llvm-project//mlir:SPIRVDialect", | 
|  | "@llvm-project//mlir:StandardToSPIRVConversions", | 
|  | "@llvm-project//mlir:TransformUtils", | 
|  | "@llvm-project//mlir:VectorOps", | 
|  | "@llvm-project//mlir:mlir_c_runner_utils", | 
|  | # mlir_runner_utils with iostream needed for printMemRef atm | 
|  | "@llvm-project//mlir:mlir_runner_utils", | 
|  | ] + PLATFORM_VULKAN_DEPS + IREE_DRIVER_MODULES, | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "bench-matmul-gpu", | 
|  | srcs = ["BenchMatMulVectorGPU.cpp"], | 
|  | tags = [ | 
|  | "noga", | 
|  | ], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "//experimental/ModelBuilder:VulkanLaunchWrapper", | 
|  | "//iree/base:initializer", | 
|  | "//iree/compiler/Conversion/CodegenUtils", | 
|  | "//iree/compiler/Conversion/LinalgToSPIRV", | 
|  | "@llvm-project//llvm:Support", | 
|  | "@llvm-project//mlir:GPUToVulkanTransforms", | 
|  | "@llvm-project//mlir:GPUTransforms", | 
|  | "@llvm-project//mlir:IR", | 
|  | "@llvm-project//mlir:LLVMTransforms", | 
|  | "@llvm-project//mlir:LinalgOps", | 
|  | "@llvm-project//mlir:LinalgToLLVM", | 
|  | "@llvm-project//mlir:LinalgTransforms", | 
|  | "@llvm-project//mlir:Parser", | 
|  | "@llvm-project//mlir:Pass", | 
|  | "@llvm-project//mlir:SPIRVDialect", | 
|  | "@llvm-project//mlir:StandardToSPIRVConversions", | 
|  | "@llvm-project//mlir:TransformUtils", | 
|  | "@llvm-project//mlir:VectorOps", | 
|  | "@llvm-project//mlir:mlir_c_runner_utils", | 
|  | # mlir_runner_utils with iostream needed for printMemRef atm | 
|  | "@llvm-project//mlir:mlir_runner_utils", | 
|  | ] + PLATFORM_VULKAN_DEPS + IREE_DRIVER_MODULES, | 
|  | ) | 
|  |  | 
|  | cc_binary( | 
|  | name = "test-simple-mlir", | 
|  | srcs = ["TestSimpleMLIR.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # Benchmarks. | 
|  |  | 
|  | # Matrix x Vector expressed in Vector dialect. | 
|  | cc_binary( | 
|  | name = "bench-matvec-vector-jit", | 
|  | srcs = ["BenchMatVecVectorJIT.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "@com_google_benchmark//:benchmark", | 
|  | "@llvm-project//mlir:EDSC", | 
|  | "@llvm-project//mlir:IR", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # Matrix x Matrix expressed in Vector dialect. | 
|  | cc_binary( | 
|  | name = "bench-matmul-vector-jit", | 
|  | srcs = ["BenchMatMulVectorJIT.cpp"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "@com_google_benchmark//:benchmark", | 
|  | "@llvm-project//mlir:EDSC", | 
|  | "@llvm-project//mlir:IR", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # Matrix x Matrix expressed in Vector dialect (using intrinsics). | 
|  | cc_binary( | 
|  | name = "bench-matmul-vector-column-major-llvm-intrinsics-jit", | 
|  | srcs = ["BenchMatMulVectorColumnMajorLLVMIntrinsicsJIT.cpp"], | 
|  | copts = ["-O3"], | 
|  | deps = [ | 
|  | "//experimental/ModelBuilder", | 
|  | "//experimental/ModelBuilder:ModelRunner", | 
|  | "@com_google_benchmark//:benchmark", | 
|  | "@llvm-project//mlir:EDSC", | 
|  | "@llvm-project//mlir:IR", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # Runtime support library (for printing vectors). | 
|  |  | 
|  | cc_binary( | 
|  | name = "runtime-support.so", | 
|  | linkshared = True, | 
|  | linkstatic = False, | 
|  | deps = [ | 
|  | "@llvm-project//mlir:mlir_c_runner_utils", | 
|  | ], | 
|  | ) |