summaryrefslogtreecommitdiffstats
path: root/mlir/test/Transforms/pipeline-data-transfer.mlir
blob: a866e0474c1753475ea2ffaf9eef0afcd6a75e94 (plain)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// RUN: mlir-opt %s -pipeline-data-transfer | FileCheck %s

// CHECK-LABEL: mlfunc @loop_nest_simple() {
// CHECK:       %c8 = constant 8 : affineint
// CHECK-NEXT:  %c0 = constant 0 : affineint
// CHECK-NEXT:  %0 = "foo"(%c0) : (affineint) -> affineint
// CHECK-NEXT:  for %i0 = 1 to 7 {
// CHECK-NEXT:    %1 = "foo"(%i0) : (affineint) -> affineint
// CHECK-NEXT:    %2 = affine_apply #map0(%i0)
// CHECK-NEXT:    %3 = "bar"(%2) : (affineint) -> affineint
// CHECK-NEXT:  }
// CHECK-NEXT:  %4 = affine_apply #map0(%c8)
// CHECK-NEXT:  %5 = "bar"(%4) : (affineint) -> affineint
// CHECK-NEXT:  return
mlfunc @loop_nest_simple() {
  for %i = 0 to 7 {
    %y = "foo"(%i) : (affineint) -> affineint
    %x = "bar"(%i) : (affineint) -> affineint
  }
  return
}

// CHECK-LABEL: mlfunc @loop_nest_dma() {
// CHECK:       %c8 = constant 8 : affineint
// CHECK-NEXT:  %c0 = constant 0 : affineint
// CHECK-NEXT:  %0 = affine_apply #map1(%c0)
// CHECK-NEXT:  %1 = "dma.enqueue"(%0) : (affineint) -> affineint
// CHECK-NEXT:  %2 = "dma.enqueue"(%0) : (affineint) -> affineint
// CHECK-NEXT:  for %i0 = 1 to 7 {
// CHECK-NEXT:    %3 = affine_apply #map1(%i0)
// CHECK-NEXT:    %4 = "dma.enqueue"(%3) : (affineint) -> affineint
// CHECK-NEXT:    %5 = "dma.enqueue"(%3) : (affineint) -> affineint
// CHECK-NEXT:    %6 = affine_apply #map0(%i0)
// CHECK-NEXT:    %7 = affine_apply #map1(%6)
// CHECK-NEXT:    %8 = "dma.wait"(%7) : (affineint) -> affineint
// CHECK-NEXT:    %9 = "compute1"(%7) : (affineint) -> affineint
// CHECK-NEXT:  }
// CHECK-NEXT:  %10 = affine_apply #map0(%c8)
// CHECK-NEXT:  %11 = affine_apply #map1(%10)
// CHECK-NEXT:  %12 = "dma.wait"(%11) : (affineint) -> affineint
// CHECK-NEXT:  %13 = "compute1"(%11) : (affineint) -> affineint
// CHECK-NEXT:  return
mlfunc @loop_nest_dma() {
  for %i = 0 to 7 {
    %pingpong = affine_apply (d0) -> (d0 mod 2) (%i)
    "dma.enqueue"(%pingpong) : (affineint) -> affineint
    "dma.enqueue"(%pingpong) : (affineint) -> affineint
    %pongping = affine_apply (d0) -> (d0 mod 2) (%i)
    "dma.wait"(%pongping) : (affineint) -> affineint
    "compute1"(%pongping) : (affineint) -> affineint
  }
  return
}

// CHECK-LABEL: mlfunc @loop_nest_bound_map(%arg0 : affineint) {
// CHECK:       %0 = affine_apply #map2()[%arg0]
// CHECK-NEXT:  %1 = "foo"(%0) : (affineint) -> affineint
// CHECK-NEXT:  %2 = "bar"(%0) : (affineint) -> affineint
// CHECK-NEXT:  for %i0 = #map3()[%arg0] to #map4()[%arg0] {
// CHECK-NEXT:    %3 = "foo"(%i0) : (affineint) -> affineint
// CHECK-NEXT:    %4 = "bar"(%i0) : (affineint) -> affineint
// CHECK-NEXT:    %5 = affine_apply #map0(%i0)
// CHECK-NEXT:    %6 = "foo_bar"(%5) : (affineint) -> affineint
// CHECK-NEXT:    %7 = "bar_foo"(%5) : (affineint) -> affineint
// CHECK-NEXT:  }
// CHECK-NEXT:  %8 = affine_apply #map5()[%arg0]
// CHECK-NEXT:  %9 = affine_apply #map0(%8)
// CHECK-NEXT:  %10 = "foo_bar"(%9) : (affineint) -> affineint
// CHECK-NEXT:  %11 = "bar_foo"(%9) : (affineint) -> affineint
// CHECK-NEXT:  return
mlfunc @loop_nest_bound_map(%N : affineint) {
  for %i = %N to ()[s0] -> (s0 + 7)()[%N] {
    "foo"(%i) : (affineint) -> affineint
    "bar"(%i) : (affineint) -> affineint
    "foo_bar"(%i) : (affineint) -> (affineint)
    "bar_foo"(%i) : (affineint) -> (affineint)
  }
  return
}
OpenPOWER on IntegriCloud