1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| module { func.func @conv2d(%arg0: memref<?x64xi16>, %arg1: memref<?x3xi16>, %arg2: memref<?x32xi16>) attributes {llvm.linkage = #llvm.linkage<external>} { %c0_i32 = arith.constant 0 : i32 %c0 = arith.constant 0 : index %0 = aievec.upd %arg1[%c0, %c0] {index = 0 : i8, offset = 0 : i32} : memref<?x3xi16>, vector<16xi16> %c0_0 = arith.constant 0 : index %c32 = arith.constant 32 : index %c1 = arith.constant 1 : index scf.for %arg3 = %c0_0 to %c32 step %c1 { %c1_1 = arith.constant 1 : index %1 = arith.addi %arg3, %c1_1 : index %c2 = arith.constant 2 : index %2 = arith.addi %arg3, %c2 : index %c0_2 = arith.constant 0 : index %c32_3 = arith.constant 32 : index %c16 = arith.constant 16 : index %c32_4 = arith.constant 32 : index %3 = aievec.upd %arg0[%arg3, %c0_2] {index = 0 : i8, offset = 0 : i32} : memref<?x64xi16>, vector<32xi16> %4 = aievec.upd %arg0[%arg3, %c0_2], %3 {index = 1 : i8, offset = 256 : i32} : memref<?x64xi16>, vector<32xi16> %5 = aievec_aie1.mul %4, %0 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "0", zoffsets = "0", zoffsets_hi = "0", zstart = "0", zstep = "1"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %6 = aievec_aie1.mac %4, %0, %5 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "2", zoffsets = "0", zoffsets_hi = "0", zstart = "2", zstep = "13"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %7 = aievec.upd %arg0[%1, %c0_2] {index = 0 : i8, offset = 0 : i32} : memref<?x64xi16>, vector<32xi16> %8 = aievec.upd %arg0[%1, %c0_2], %7 {index = 1 : i8, offset = 256 : i32} : memref<?x64xi16>, vector<32xi16> %9 = aievec_aie1.mac %8, %0, %6 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "0", zoffsets = "0", zoffsets_hi = "0", zstart = "3", zstep = "1"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %10 = aievec_aie1.mac %8, %0, %9 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "2", zoffsets = "0", zoffsets_hi = "0", zstart = "5", zstep = "10"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %11 = aievec.upd %arg0[%2, %c0_2] {index = 0 : i8, offset = 0 : i32} : memref<?x64xi16>, vector<32xi16> %12 = aievec.upd %arg0[%2, %c0_2], %11 {index = 1 : i8, offset = 256 : i32} : memref<?x64xi16>, vector<32xi16> %13 = aievec_aie1.mac %12, %0, %10 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "0", zoffsets = "0", zoffsets_hi = "0", zstart = "6", zstep = "1"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %14 = aievec_aie1.mac %12, %0, %13 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "2", zoffsets = "0", zoffsets_hi = "0", zstart = "8", zstep = "7"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %15 = aievec.srs %14, %c0_i32 : vector<16xi48>, i32, vector<16xi16> vector.transfer_write %15, %arg2[%arg3, %c0_2] : vector<16xi16>, memref<?x32xi16> %c1_5 = arith.constant 1 : index %16 = arith.muli %c16, %c1_5 : index %17 = arith.addi %c0_2, %16 : index %18 = aievec.upd %arg0[%arg3, %17] {index = 0 : i8, offset = 0 : i32} : memref<?x64xi16>, vector<32xi16> %19 = aievec.upd %arg0[%arg3, %17], %18 {index = 1 : i8, offset = 256 : i32} : memref<?x64xi16>, vector<32xi16> %20 = aievec_aie1.mul %19, %0 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "0", zoffsets = "0", zoffsets_hi = "0", zstart = "0", zstep = "1"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %21 = aievec_aie1.mac %19, %0, %20 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "2", zoffsets = "0", zoffsets_hi = "0", zstart = "2", zstep = "13"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %22 = aievec.upd %arg0[%1, %17] {index = 0 : i8, offset = 0 : i32} : memref<?x64xi16>, vector<32xi16> %23 = aievec.upd %arg0[%1, %17], %22 {index = 1 : i8, offset = 256 : i32} : memref<?x64xi16>, vector<32xi16> %24 = aievec_aie1.mac %23, %0, %21 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "0", zoffsets = "0", zoffsets_hi = "0", zstart = "3", zstep = "1"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %25 = aievec_aie1.mac %23, %0, %24 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "2", zoffsets = "0", zoffsets_hi = "0", zstart = "5", zstep = "10"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %26 = aievec.upd %arg0[%2, %17] {index = 0 : i8, offset = 0 : i32} : memref<?x64xi16>, vector<32xi16> %27 = aievec.upd %arg0[%2, %17], %26 {index = 1 : i8, offset = 256 : i32} : memref<?x64xi16>, vector<32xi16> %28 = aievec_aie1.mac %27, %0, %25 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "0", zoffsets = "0", zoffsets_hi = "0", zstart = "6", zstep = "1"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %29 = aievec_aie1.mac %27, %0, %28 {xoffsets = "0x03020100", xoffsets_hi = "0x07060504", xsquare = "0x2110", xstart = "2", zoffsets = "0", zoffsets_hi = "0", zstart = "8", zstep = "7"} : vector<32xi16>, vector<16xi16>, vector<16xi48> %30 = aievec.srs %29, %c0_i32 : vector<16xi48>, i32, vector<16xi16> vector.transfer_write %30, %arg2[%arg3, %17] : vector<16xi16>, memref<?x32xi16> } return } }
|