|
26 | 26 | //
|
27 | 27 | // Make sure X += A * A => X += 1 in single loop.
|
28 | 28 | //
|
29 |
| -// |
30 | 29 | // CHECK-LABEL: func.func @sum_squares(
|
31 | 30 | // CHECK-SAME: %[[VAL_0:.*0]]: memref<?xindex>,
|
32 | 31 | // CHECK-SAME: %[[VAL_1:.*1]]: memref<?xindex>,
|
33 | 32 | // CHECK-SAME: %[[VAL_2:.*2]]: memref<?xf32>,
|
34 |
| -// CHECK-SAME: %[[VAL_3:.*3]]: !sparse_tensor.storage_specifier<#{{.*}}>) -> memref<f32> { |
| 33 | +// CHECK-SAME: %[[VAL_3:.*]]: !sparse_tensor.storage_specifier<#{{.*}}>) -> memref<f32> { |
35 | 34 | // CHECK-DAG: %[[VAL_4:.*]] = arith.constant 1.000000e+00 : f32
|
36 | 35 | // CHECK-DAG: %[[VAL_5:.*]] = arith.constant 1 : index
|
37 | 36 | // CHECK-DAG: %[[VAL_6:.*]] = arith.constant 0 : index
|
|
40 | 39 | // CHECK-DAG: %[[VAL_9:.*]] = arith.constant 0.000000e+00 : f32
|
41 | 40 | // CHECK: %[[VAL_10:.*]] = memref.alloc() {alignment = 64 : i64} : memref<f32>
|
42 | 41 | // CHECK: linalg.fill ins(%[[VAL_9]] : f32) outs(%[[VAL_10]] : memref<f32>)
|
43 |
| -// CHECK: %[[VAL_11:.*]] = memref.load %[[VAL_10]][] : memref<f32> |
44 |
| -// CHECK: %[[VAL_12:.*]] = scf.for %[[VAL_13:.*]] = %[[VAL_6]] to %[[VAL_8]] step %[[VAL_5]] iter_args(%[[VAL_14:.*]] = %[[VAL_11]]) -> (f32) { |
45 |
| -// CHECK: %[[VAL_15:.*]] = arith.muli %[[VAL_13]], %[[VAL_7]] : index |
46 |
| -// CHECK: %[[VAL_16:.*]] = scf.for %[[VAL_17:.*]] = %[[VAL_6]] to %[[VAL_7]] step %[[VAL_5]] iter_args(%[[VAL_18:.*]] = %[[VAL_14]]) -> (f32) { |
47 |
| -// CHECK: %[[VAL_19:.*]] = arith.addi %[[VAL_17]], %[[VAL_15]] : index |
48 |
| -// CHECK: %[[VAL_20:.*]] = memref.load %[[VAL_0]]{{\[}}%[[VAL_19]]] : memref<?xindex> |
49 |
| -// CHECK: %[[VAL_21:.*]] = arith.addi %[[VAL_19]], %[[VAL_5]] : index |
50 |
| -// CHECK: %[[VAL_22:.*]] = memref.load %[[VAL_0]]{{\[}}%[[VAL_21]]] : memref<?xindex> |
51 |
| -// CHECK: %[[VAL_23:.*]] = scf.for %[[VAL_24:.*]] = %[[VAL_20]] to %[[VAL_22]] step %[[VAL_5]] iter_args(%[[VAL_25:.*]] = %[[VAL_18]]) -> (f32) { |
52 |
| -// CHECK: %[[VAL_26:.*]] = arith.addf %[[VAL_25]], %[[VAL_4]] : f32 |
53 |
| -// CHECK: scf.yield %[[VAL_26]] : f32 |
| 42 | +// CHECK: %[[VAL_11:.*]] = sparse_tensor.storage_specifier.get %[[VAL_3]] |
| 43 | +// CHECK: %[[VAL_12:.*]] = memref.subview %[[VAL_0]][0] {{\[}}%[[VAL_11]]] [1] : memref<?xindex> to memref<?xindex> |
| 44 | +// CHECK: %[[VAL_13:.*]] = memref.load %[[VAL_10]][] : memref<f32> |
| 45 | +// CHECK: %[[VAL_14:.*]] = scf.for %[[VAL_15:.*]] = %[[VAL_6]] to %[[VAL_8]] step %[[VAL_5]] iter_args(%[[VAL_16:.*]] = %[[VAL_13]]) -> (f32) { |
| 46 | +// CHECK: %[[VAL_17:.*]] = arith.muli %[[VAL_15]], %[[VAL_7]] : index |
| 47 | +// CHECK: %[[VAL_18:.*]] = scf.for %[[VAL_19:.*]] = %[[VAL_6]] to %[[VAL_7]] step %[[VAL_5]] iter_args(%[[VAL_20:.*]] = %[[VAL_16]]) -> (f32) { |
| 48 | +// CHECK: %[[VAL_21:.*]] = arith.addi %[[VAL_19]], %[[VAL_17]] : index |
| 49 | +// CHECK: %[[VAL_22:.*]] = memref.load %[[VAL_12]]{{\[}}%[[VAL_21]]] : memref<?xindex> |
| 50 | +// CHECK: %[[VAL_23:.*]] = arith.addi %[[VAL_21]], %[[VAL_5]] : index |
| 51 | +// CHECK: %[[VAL_24:.*]] = memref.load %[[VAL_12]]{{\[}}%[[VAL_23]]] : memref<?xindex> |
| 52 | +// CHECK: %[[VAL_25:.*]] = scf.for %[[VAL_26:.*]] = %[[VAL_22]] to %[[VAL_24]] step %[[VAL_5]] iter_args(%[[VAL_27:.*]] = %[[VAL_20]]) -> (f32) { |
| 53 | +// CHECK: %[[VAL_28:.*]] = arith.addf %[[VAL_27]], %[[VAL_4]] : f32 |
| 54 | +// CHECK: scf.yield %[[VAL_28]] : f32 |
54 | 55 | // CHECK: } {"Emitted from" = "linalg.generic"}
|
55 |
| -// CHECK: scf.yield %[[VAL_23]] : f32 |
| 56 | +// CHECK: scf.yield %[[VAL_25]] : f32 |
56 | 57 | // CHECK: } {"Emitted from" = "linalg.generic"}
|
57 |
| -// CHECK: scf.yield %[[VAL_16]] : f32 |
| 58 | +// CHECK: scf.yield %[[VAL_18]] : f32 |
58 | 59 | // CHECK: } {"Emitted from" = "linalg.generic"}
|
59 |
| -// CHECK: memref.store %[[VAL_12]], %[[VAL_10]][] : memref<f32> |
| 60 | +// CHECK: memref.store %[[VAL_14]], %[[VAL_10]][] : memref<f32> |
60 | 61 | // CHECK: return %[[VAL_10]] : memref<f32>
|
61 | 62 | // CHECK: }
|
62 | 63 | //
|
@@ -99,25 +100,29 @@ func.func @sum_squares(%a: tensor<2x3x8xf32, #Sparse>) -> tensor<f32> {
|
99 | 100 | // CHECK-DAG: %[[VAL_9:.*]] = arith.constant 0.000000e+00 : f32
|
100 | 101 | // CHECK: %[[VAL_10:.*]] = memref.alloc() {alignment = 64 : i64} : memref<f32>
|
101 | 102 | // CHECK: linalg.fill ins(%[[VAL_9]] : f32) outs(%[[VAL_10]] : memref<f32>)
|
102 |
| -// CHECK: %[[VAL_11:.*]] = memref.load %[[VAL_10]][] : memref<f32> |
103 |
| -// CHECK: %[[VAL_12:.*]] = scf.for %[[VAL_13:.*]] = %[[VAL_6]] to %[[VAL_8]] step %[[VAL_5]] iter_args(%[[VAL_14:.*]] = %[[VAL_11]]) -> (f32) { |
104 |
| -// CHECK: %[[VAL_15:.*]] = arith.muli %[[VAL_13]], %[[VAL_7]] : index |
105 |
| -// CHECK: %[[VAL_16:.*]] = scf.for %[[VAL_17:.*]] = %[[VAL_6]] to %[[VAL_7]] step %[[VAL_5]] iter_args(%[[VAL_18:.*]] = %[[VAL_14]]) -> (f32) { |
106 |
| -// CHECK: %[[VAL_19:.*]] = arith.addi %[[VAL_17]], %[[VAL_15]] : index |
107 |
| -// CHECK: %[[VAL_20:.*]] = memref.load %[[VAL_0]]{{\[}}%[[VAL_19]]] : memref<?xindex> |
108 |
| -// CHECK: %[[VAL_21:.*]] = arith.addi %[[VAL_19]], %[[VAL_5]] : index |
109 |
| -// CHECK: %[[VAL_22:.*]] = memref.load %[[VAL_0]]{{\[}}%[[VAL_21]]] : memref<?xindex> |
110 |
| -// CHECK: %[[VAL_23:.*]] = scf.for %[[VAL_24:.*]] = %[[VAL_20]] to %[[VAL_22]] step %[[VAL_5]] iter_args(%[[VAL_25:.*]] = %[[VAL_18]]) -> (f32) { |
111 |
| -// CHECK: %[[VAL_26:.*]] = memref.load %[[VAL_1]]{{\[}}%[[VAL_24]]] : memref<?xindex> |
112 |
| -// CHECK: %[[VAL_27:.*]] = memref.load %[[VAL_4]]{{\[}}%[[VAL_13]], %[[VAL_17]], %[[VAL_26]]] : memref<2x3x8xf32> |
113 |
| -// CHECK: %[[VAL_28:.*]] = arith.addf %[[VAL_27]], %[[VAL_25]] : f32 |
114 |
| -// CHECK: scf.yield %[[VAL_28]] : f32 |
| 103 | +// CHECK: %[[VAL_11:.*]] = sparse_tensor.storage_specifier.get %[[VAL_3]] |
| 104 | +// CHECK: %[[VAL_12:.*]] = memref.subview %[[VAL_0]][0] {{\[}}%[[VAL_11]]] [1] : memref<?xindex> to memref<?xindex> |
| 105 | +// CHECK: %[[VAL_13:.*]] = sparse_tensor.storage_specifier.get %[[VAL_3]] |
| 106 | +// CHECK: %[[VAL_14:.*]] = memref.subview %[[VAL_1]][0] {{\[}}%[[VAL_13]]] [1] : memref<?xindex> to memref<?xindex> |
| 107 | +// CHECK: %[[VAL_15:.*]] = memref.load %[[VAL_10]][] : memref<f32> |
| 108 | +// CHECK: %[[VAL_16:.*]] = scf.for %[[VAL_17:.*]] = %[[VAL_6]] to %[[VAL_8]] step %[[VAL_5]] iter_args(%[[VAL_18:.*]] = %[[VAL_15]]) -> (f32) { |
| 109 | +// CHECK: %[[VAL_19:.*]] = arith.muli %[[VAL_17]], %[[VAL_7]] : index |
| 110 | +// CHECK: %[[VAL_20:.*]] = scf.for %[[VAL_21:.*]] = %[[VAL_6]] to %[[VAL_7]] step %[[VAL_5]] iter_args(%[[VAL_22:.*]] = %[[VAL_18]]) -> (f32) { |
| 111 | +// CHECK: %[[VAL_23:.*]] = arith.addi %[[VAL_21]], %[[VAL_19]] : index |
| 112 | +// CHECK: %[[VAL_24:.*]] = memref.load %[[VAL_12]]{{\[}}%[[VAL_23]]] : memref<?xindex> |
| 113 | +// CHECK: %[[VAL_25:.*]] = arith.addi %[[VAL_23]], %[[VAL_5]] : index |
| 114 | +// CHECK: %[[VAL_26:.*]] = memref.load %[[VAL_12]]{{\[}}%[[VAL_25]]] : memref<?xindex> |
| 115 | +// CHECK: %[[VAL_27:.*]] = scf.for %[[VAL_28:.*]] = %[[VAL_24]] to %[[VAL_26]] step %[[VAL_5]] iter_args(%[[VAL_29:.*]] = %[[VAL_22]]) -> (f32) { |
| 116 | +// CHECK: %[[VAL_30:.*]] = memref.load %[[VAL_14]]{{\[}}%[[VAL_28]]] : memref<?xindex> |
| 117 | +// CHECK: %[[VAL_31:.*]] = memref.load %[[VAL_4]]{{\[}}%[[VAL_17]], %[[VAL_21]], %[[VAL_30]]] : memref<2x3x8xf32> |
| 118 | +// CHECK: %[[VAL_32:.*]] = arith.addf %[[VAL_31]], %[[VAL_29]] : f32 |
| 119 | +// CHECK: scf.yield %[[VAL_32]] : f32 |
115 | 120 | // CHECK: } {"Emitted from" = "linalg.generic"}
|
116 |
| -// CHECK: scf.yield %[[VAL_23]] : f32 |
| 121 | +// CHECK: scf.yield %[[VAL_27]] : f32 |
117 | 122 | // CHECK: } {"Emitted from" = "linalg.generic"}
|
118 |
| -// CHECK: scf.yield %[[VAL_16]] : f32 |
| 123 | +// CHECK: scf.yield %[[VAL_20]] : f32 |
119 | 124 | // CHECK: } {"Emitted from" = "linalg.generic"}
|
120 |
| -// CHECK: memref.store %[[VAL_12]], %[[VAL_10]][] : memref<f32> |
| 125 | +// CHECK: memref.store %[[VAL_16]], %[[VAL_10]][] : memref<f32> |
121 | 126 | // CHECK: return %[[VAL_10]] : memref<f32>
|
122 | 127 | // CHECK: }
|
123 | 128 | //
|
|
0 commit comments