// Tests that execution providing no outputs is ok. // RUN: (iree-compile --iree-hal-target-backends=vmvx %s | \ // RUN: iree-run-module --device=local-sync --module=- --function=no_output) | \ // RUN: FileCheck --check-prefix=NO-OUTPUT %s // NO-OUTPUT-LABEL: EXEC @no_output func.func @no_output() { return } // ----- // Tests the default output printing to stdout. // RUN: (iree-compile --iree-hal-target-backends=vmvx %s | \ // RUN: iree-run-module --device=local-sync --module=- --function=default) | \ // RUN: FileCheck --check-prefix=OUTPUT-DEFAULT %s // OUTPUT-DEFAULT-LABEL: EXEC @default func.func @default() -> (i32, tensor, tensor) { // OUTPUT-DEFAULT: result[0]: i32=123 %0 = arith.constant 123 : i32 // OUTPUT-DEFAULT: result[1]: hal.buffer_view // OUTPUT-DEFAULT-NEXT: f32=4 %1 = arith.constant dense<4.0> : tensor // OUTPUT-DEFAULT: result[2]: hal.buffer_view // OUTPUT-DEFAULT-NEXT: 2x4xi32=[0 1 2 3][4 5 6 7] %2 = flow.tensor.constant dense<[[0,1,2,3],[4,5,6,7]]> : tensor<2x4xi32> -> tensor return %0, %1, %2 : i32, tensor, tensor } // ----- // Tests explicit output to npy files by producing a concatenated .npy and then // printing the results in python. This also verifies our npy files can be // parsed by numpy. // RUN: (iree-compile --iree-hal-target-backends=vmvx %s | \ // RUN: iree-run-module --device=local-sync --module=- --function=numpy \ // RUN: --output= \ // RUN: --output=@%t.npy \ // RUN: --output=+%t.npy) && \ // RUN: "%PYTHON" %S/echo_npy.py %t.npy | \ // RUN: FileCheck --check-prefix=OUTPUT-NUMPY %s func.func @numpy() -> (i32, tensor, tensor) { // Output skipped: %0 = arith.constant 123 : i32 // OUTPUT-NUMPY{LITERAL}: 4.0 %1 = arith.constant dense<4.0> : tensor // OUTPUT-NUMPY-NEXT{LITERAL}: [[0 1 2 3] // OUTPUT-NUMPY-NEXT{LITERAL}: [4 5 6 7]] %2 = flow.tensor.constant dense<[[0,1,2,3],[4,5,6,7]]> : tensor<2x4xi32> -> tensor return %0, %1, %2 : i32, tensor, tensor } // ----- // Tests output to binary files by round-tripping the output of a function into // another invocation reading from the binary files. Each output is written to // its own file (optimal for alignment/easier to inspect). // RUN: (iree-compile --iree-hal-target-backends=vmvx %s -o=%t.vmfb && \ // RUN: iree-run-module --device=local-sync \ // RUN: --module=%t.vmfb \ // RUN: --function=write_binary \ // RUN: --output=@%t.0.bin \ // RUN: --output=@%t.1.bin && \ // RUN: iree-run-module --device=local-sync \ // RUN: --module=%t.vmfb \ // RUN: --function=echo_binary \ // RUN: --input=f32=@%t.0.bin \ // RUN: --input=2x4xi32=@%t.1.bin) | \ // RUN: FileCheck --check-prefix=OUTPUT-BINARY %s // Tests output to binary files by round-tripping the output of a function into // another invocation reading from the binary files. The values are appended to // a single file and read from the single file. // RUN: (iree-compile --iree-hal-target-backends=vmvx %s -o=%t.vmfb && \ // RUN: iree-run-module --device=local-sync \ // RUN: --module=%t.vmfb \ // RUN: --function=write_binary \ // RUN: --output=@%t.bin \ // RUN: --output=+%t.bin && \ // RUN: iree-run-module --device=local-sync \ // RUN: --module=%t.vmfb \ // RUN: --function=echo_binary \ // RUN: --input=f32=@%t.bin \ // RUN: --input=2x4xi32=+%t.bin) | \ // RUN: FileCheck --check-prefix=OUTPUT-BINARY %s func.func @write_binary() -> (tensor, tensor) { %0 = arith.constant dense<4.0> : tensor %1 = flow.tensor.constant dense<[[0,1,2,3],[4,5,6,7]]> : tensor<2x4xi32> -> tensor return %0, %1 : tensor, tensor } func.func @echo_binary(%arg0: tensor, %arg1: tensor) -> (tensor, tensor) { // OUTPUT-BINARY{LITERAL}: f32=4 // OUTPUT-BINARY{LITERAL}: 2x4xi32=[0 1 2 3][4 5 6 7] return %arg0, %arg1 : tensor, tensor }