hanchenye-scalehls/test/EmitHLSCpp/test-tensor.mlir

36 lines
1.4 KiB
MLIR

// RUN: scalehls-translate -emit-hlscpp %s | FileCheck %s
func @test_tensor_expr(%arg0: tensor<16x8xi1>, %arg1: i1, %arg2: tensor<16x8xf32>, %arg3: tensor<16x8xf32>) -> tensor<16x8xf32> {
// CHECK: float [[VAL_0:.*]][16][8];
// CHECK: for (int iv0 = 0; iv0 < 16; ++iv0) {
// CHECK: for (int iv1 = 0; iv1 < 8; ++iv1) {
// CHECK: [[VAL_0:.*]][iv0][iv1] = [[ARG_0:.*]][iv0][iv1] ? [[ARG_2:.*]][iv0][iv1] : [[ARG_3:.*]][iv0][iv1];
// CHECK: }
// CHECK: }
%0 = arith.select %arg0, %arg2, %arg3 : tensor<16x8xi1>, tensor<16x8xf32>
// CHECK: [[VAL_1:.*]][iv0][iv1] = [[ARG_1:.*]] ? [[ARG_2:.*]][iv0][iv1] : [[ARG_3:.*]][iv0][iv1];
%1 = arith.select %arg1, %arg2, %arg3 : i1, tensor<16x8xf32>
// CHECK: [[VAL_2:.*]][iv0][iv1] = [[ARG_2:.*]][iv0][iv1] + [[VAL_1:.*]][iv0][iv1];
%2 = arith.addf %arg2, %1 : tensor<16x8xf32>
// CHECK-NOT: float [[VAL_3:.*]][16][8];
// CHECK: [[VAL_3:.*]][iv0][iv1] = abs([[VAL_2:.*]][iv0][iv1]);
%3 = math.abs %2 : tensor<16x8xf32>
return %3 : tensor<16x8xf32>
}
func @test_tensor_load_store(%arg0: memref<16x8xi32>) {
%0 = bufferization.to_tensor %arg0 : memref<16x8xi32>
// CHECK: for (int iv0 = 0; iv0 < 16; ++iv0) {
// CHECK: for (int iv1 = 0; iv1 < 8; ++iv1) {
// CHECK: [[ARG_0:.*]][iv0][iv1] = [[VAL_0:.*]][iv0][iv1];
// CHECK: }
// CHECK: }
memref.tensor_store %0, %arg0 : memref<16x8xi32>
return
}