xref: /llvm-project/mlir/test/Examples/mlir-opt/loop_fusion_default.mlir (revision 7f1968625a607fb49a2b9a67f3c8fb2892cf4839)
1*7f196862SJeremy Kun// RUN: mlir-opt --pass-pipeline="builtin.module(affine-loop-fusion)" %s | FileCheck %s
2*7f196862SJeremy Kun
3*7f196862SJeremy Kun
4*7f196862SJeremy Kun// CHECK-LABEL: @producer_consumer_fusion
5*7f196862SJeremy Kun// CHECK-COUNT-1: affine.for
6*7f196862SJeremy Kunmodule {
7*7f196862SJeremy Kun  func.func @producer_consumer_fusion(%arg0: memref<10xf32>, %arg1: memref<10xf32>) {
8*7f196862SJeremy Kun    %0 = memref.alloc() : memref<10xf32>
9*7f196862SJeremy Kun    %1 = memref.alloc() : memref<10xf32>
10*7f196862SJeremy Kun    %cst = arith.constant 0.000000e+00 : f32
11*7f196862SJeremy Kun    affine.for %arg2 = 0 to 10 {
12*7f196862SJeremy Kun      affine.store %cst, %0[%arg2] : memref<10xf32>
13*7f196862SJeremy Kun      affine.store %cst, %1[%arg2] : memref<10xf32>
14*7f196862SJeremy Kun    }
15*7f196862SJeremy Kun    affine.for %arg2 = 0 to 10 {
16*7f196862SJeremy Kun      %2 = affine.load %0[%arg2] : memref<10xf32>
17*7f196862SJeremy Kun      %3 = arith.addf %2, %2 : f32
18*7f196862SJeremy Kun      affine.store %3, %arg0[%arg2] : memref<10xf32>
19*7f196862SJeremy Kun    }
20*7f196862SJeremy Kun    affine.for %arg2 = 0 to 10 {
21*7f196862SJeremy Kun      %2 = affine.load %1[%arg2] : memref<10xf32>
22*7f196862SJeremy Kun      %3 = arith.mulf %2, %2 : f32
23*7f196862SJeremy Kun      affine.store %3, %arg1[%arg2] : memref<10xf32>
24*7f196862SJeremy Kun    }
25*7f196862SJeremy Kun    return
26*7f196862SJeremy Kun  }
27*7f196862SJeremy Kun}
28