| # Copyright 2021 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 | |
| import io | |
| import subprocess | |
| from iree.compiler import ir | |
| from iree.compiler import passmanager | |
| from iree.compiler.dialects import arith | |
| from iree.compiler.dialects import chlo | |
| from iree.compiler.dialects import mhlo | |
| from iree.compiler.dialects import iree as iree_dialect | |
| from iree.compiler.dialects import builtin | |
| from iree.compiler.dialects import std | |
| from iree.compiler.dialects import linalg | |
| from iree.compiler.dialects import linalg | |
| from iree.compiler.dialects import math | |
| from iree.compiler.dialects import memref | |
| from iree.compiler.dialects import shape | |
| from iree.compiler.dialects import tensor | |
| from iree.compiler.dialects import tosa | |
| from iree.compiler.dialects import vector | |
| from iree.compiler.api import driver | |
| # Test the compiler API. | |
| with ir.Context() as ctx: | |
| chlo.register_chlo_dialect(ctx) | |
| mhlo.register_mhlo_dialect(ctx) | |
| iree_dialect.register_dialect(ctx) | |
| input_module = ir.Module.parse(r""" | |
| builtin.module { | |
| builtin.func @fabs(%arg0: tensor<1x4xf32>, %arg1: tensor<4x1xf32>) -> tensor<4x4xf32> { | |
| %0 = chlo.broadcast_add %arg0, %arg1 : (tensor<1x4xf32>, tensor<4x1xf32>) -> tensor<4x4xf32> | |
| %1 = "mhlo.abs"(%0) : (tensor<4x4xf32>) -> tensor<4x4xf32> | |
| return %1 : tensor<4x4xf32> | |
| } | |
| } | |
| """) | |
| options = driver.CompilerOptions() | |
| options.set_input_dialect_mhlo() | |
| options.add_target_backend("cpu") | |
| pm = passmanager.PassManager() | |
| driver.build_iree_vm_pass_pipeline(options, pm) | |
| pm.run(input_module) | |
| print(input_module) | |
| bytecode_io = io.BytesIO() | |
| driver.translate_module_to_vm_bytecode(options, input_module, bytecode_io) | |
| print(f"Bytecode module len = {len(bytecode_io.getbuffer())}") | |
| # Check console scripts. | |
| subprocess.check_output(["ireec", "-help"]) | |
| subprocess.check_output(["iree-translate", "-help"]) |