1+ // RUN: mase-opt %s --emit-hls="hls-param=data_in,,in,,fixed,,(1,100),,(8,5);data_out,,out,,fixed,,(1,100),,(8,5);" | FileCheck %s
2+
3+ // CHECK: // =====================================
4+ // CHECK-NEXT: // Mase HLS Hardware
5+ // CHECK-NEXT: // Model: relu
6+ // CHECK-NEXT: // =====================================
7+ // CHECK-NEXT: #include <algorithm>
8+ // CHECK-NEXT: #include <ap_axi_sdata.h>
9+ // CHECK-NEXT: #include <ap_fixed.h>
10+ // CHECK-NEXT: #include <ap_int.h>
11+ // CHECK-NEXT: #include <hls_math.h>
12+ // CHECK-NEXT: #include <hls_stream.h>
13+ // CHECK-NEXT: #include <math.h>
14+ // CHECK-NEXT: #include <stdint.h>
15+ // CHECK-NEXT: #include <string.h>
16+ // CHECK-NEXT: using namespace std;
17+ // CHECK: void relu(ap_fixed<8, 5> data_in[1][100],ap_fixed<8, 5> data_out[1][100]) {
18+ // CHECK-NEXT: ap_fixed<8, 5> v0 = 0.000000;
19+ // CHECK-NEXT: ap_fixed<8, 5> v1;
20+ // CHECK-NEXT: bool v2;
21+ // CHECK-NEXT: ap_fixed<8, 5> v3;
22+ // CHECK-NEXT: b0:
23+ // CHECK-NEXT: for (int v4 = 0; v4 < 1; v4 += 1) {b1:
24+ // CHECK-NEXT: for (int v5 = 0; v5 < 100; v5 += 1) {b2:
25+ // CHECK-NEXT: v1 = data_in[0][v5];
26+ // CHECK-NEXT: v2 = v1 > v0;
27+ // CHECK-NEXT: v3 = v2 ? v1 : v0;
28+ // CHECK-NEXT: data_out[v4][v5] = v3;
29+ // CHECK-NEXT: }
30+ // CHECK-NEXT: }
31+ // CHECK-NEXT: }
32+ // CHECK-NEXT: module {
33+ // CHECK-NEXT: func.func @relu(%arg0: memref<1x100xf32>, %arg1: memref<1x100xf32>) {
34+ // CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32
35+ // CHECK-NEXT: affine.for %arg2 = 0 to 1 {
36+ // CHECK-NEXT: affine.for %arg3 = 0 to 100 {
37+ // CHECK-NEXT: %0 = affine.load %arg0[0, %arg3] : memref<1x100xf32>
38+ // CHECK-NEXT: %1 = arith.cmpf ugt, %0, %cst : f32
39+ // CHECK-NEXT: %2 = arith.select %1, %0, %cst : f32
40+ // CHECK-NEXT: affine.store %2, %arg1[%arg2, %arg3] : memref<1x100xf32>
41+ // CHECK-NEXT: }
42+ // CHECK-NEXT: }
43+ // CHECK-NEXT: return
44+ // CHECK-NEXT: }
45+ // CHECK-NEXT: }
46+
47+ func @relu (%arg0: memref <1 x100 xf32 >, %arg1: memref <1 x100 xf32 >) {
48+ %cst = arith.constant 0.000000e+00 : f32
49+ affine.for %arg2 = 0 to 1 {
50+ affine.for %arg3 = 0 to 100 {
51+ %0 = affine.load %arg0 [0 , %arg3 ] : memref <1 x100 xf32 >
52+ %1 = arith.cmpf ugt , %0 , %cst : f32
53+ %2 = select %1 , %0 , %cst : f32
54+ affine.store %2 , %arg1 [%arg2 , %arg3 ] : memref <1 x100 xf32 >
55+ }
56+ }
57+ return
58+ }
0 commit comments