Skip to content

Commit 43f8bdc

Browse files
kumasentoivanradanov
authored andcommitted
[FoldSCFIf] added more test cases
1 parent 295b090 commit 43f8bdc

File tree

5 files changed

+56
-9
lines changed

5 files changed

+56
-9
lines changed

tools/polymer/lib/Transforms/FoldSCFIf.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,8 @@ struct MemRefStoreInfo {
167167
};
168168
} // namespace
169169

170-
static void
171-
getMemRefStoreInfo(Block *block,
172-
SmallDenseMap<Value, MemRefStoreInfo> &storeInfo) {
170+
static void getMemRefStoreInfo(Block *block,
171+
MapVector<Value, MemRefStoreInfo> &storeInfo) {
173172
unsigned ord = 0;
174173
for (Operation &op : block->getOperations())
175174
if (isa<memref::StoreOp, mlir::AffineStoreOp>(op)) {
@@ -193,7 +192,7 @@ static LogicalResult liftStoreOps(scf::IfOp ifOp, FuncOp f, OpBuilder &b) {
193192
if (!hasMatchingStores({ifOp.thenBlock(), ifOp.elseBlock()}))
194193
return failure();
195194

196-
SmallDenseMap<Value, MemRefStoreInfo> storeInfo;
195+
MapVector<Value, MemRefStoreInfo> storeInfo;
197196
getMemRefStoreInfo(ifOp.thenBlock(), storeInfo);
198197

199198
SmallVector<Type> storeTypes(storeInfo.size());
@@ -244,6 +243,7 @@ static LogicalResult liftStoreOps(scf::IfOp ifOp, FuncOp f, OpBuilder &b) {
244243
cloneBlock(newIfOp.elseBlock(), ifOp.elseBlock());
245244

246245
b.setInsertionPointAfter(newIfOp);
246+
247247
for (auto &p : storeInfo) {
248248
Value memref;
249249
MemRefStoreInfo info;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: polymer-opt %s -fold-scf-if | FileCheck %s
2+
3+
func @foo(%A: memref<10xf32>, %i: index, %a: f32, %b: f32, %cond: i1) {
4+
scf.if %cond {
5+
affine.store %a, %A[%i] : memref<10xf32>
6+
} else {
7+
affine.store %b, %A[%i] : memref<10xf32>
8+
}
9+
10+
return
11+
}
12+
13+
// CHECK: func @foo(%[[A:.*]]: memref<10xf32>, %[[i:.*]]: index, %[[a:.*]]: f32, %[[b:.*]]: f32, %[[cond:.*]]: i1)
14+
// CHECK-NEXT: %[[v0:.*]] = select %[[cond]], %[[a]], %[[b]] : f32
15+
// CHECK-NEXT: affine.store %[[v0]], %[[A]][%[[i]]] : memref<10xf32>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// RUN: polymer-opt %s -fold-scf-if | FileCheck %s
2+
3+
func @foo(%A: memref<10xf32>, %B: memref<10xf32>, %a: f32, %b: f32, %cond: i1) {
4+
scf.if %cond {
5+
affine.store %a, %A[0] : memref<10xf32>
6+
} else {
7+
affine.store %b, %B[0] : memref<10xf32>
8+
}
9+
return
10+
}
11+
12+
// CHECK: func @foo(%[[A:.*]]: memref<10xf32>, %[[B:.*]]: memref<10xf32>, %[[a:.*]]: f32, %[[b:.*]]: f32, %[[cond:.*]]: i1)
13+
// CHECK-NEXT: %[[v0:.*]] = affine.load %[[B]][0] : memref<10xf32>
14+
// CHECK-NEXT: %[[v1:.*]] = affine.load %[[A]][0] : memref<10xf32>
15+
// CHECK-NEXT: %[[v2:.*]] = select %[[cond]], %[[a]], %[[v1]] : f32
16+
// CHECK-NEXT: %[[v3:.*]] = select %[[cond]], %[[v0]], %[[b]] : f32
17+
// CHECK-NEXT: affine.store %[[v2]], %[[A]][0] : memref<10xf32>
18+
// CHECK-NEXT: affine.store %[[v3]], %[[B]][0] : memref<10xf32>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// RUN: polymer-opt %s -fold-scf-if | FileCheck %s
2+
3+
func @foo(%A: memref<10xf32>, %a: f32, %cond: i1) {
4+
scf.if %cond {
5+
affine.store %a, %A[0] : memref<10xf32>
6+
}
7+
return
8+
}
9+
10+
// CHECK: func @foo(%[[A:.*]]: memref<10xf32>, %[[a:.*]]: f32, %[[cond:.*]]: i1)
11+
// CHECK-NEXT: %[[v0:.*]] = affine.load %[[A]][0] : memref<10xf32>
12+
// CHECK-NEXT: %[[v1:.*]] = select %[[cond]], %[[a]], %[[v0]] : f32
13+
// CHECK-NEXT: affine.store %[[v1]], %[[A]][0] : memref<10xf32>
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
// RUN: polymer-opt %s -fold-scf-if | FileCheck %s
22

3-
func @foo(%A: memref<10xf32>, %a: f32, %cond: i1) {
3+
func @foo(%A: memref<10xf32>, %a: f32, %b: f32, %cond: i1) {
44
scf.if %cond {
55
affine.store %a, %A[0] : memref<10xf32>
6+
} else {
7+
affine.store %b, %A[0] : memref<10xf32>
68
}
79
return
810
}
911

10-
// CHECK: func @foo(%[[A:.*]]: memref<10xf32>, %[[a:.*]]: f32, %[[cond:.*]]: i1)
11-
// CHECK-NEXT: %[[v0:.*]] = affine.load %[[A]][0] : memref<10xf32>
12-
// CHECK-NEXT: %[[v1:.*]] = select %[[cond]], %[[a]], %[[v0]] : f32
13-
// CHECK-NEXT: affine.store %[[v1]], %[[A]][0] : memref<10xf32>
12+
// CHECK: func @foo(%[[A:.*]]: memref<10xf32>, %[[a:.*]]: f32, %[[b:.*]]: f32, %[[cond:.*]]: i1)
13+
// CHECK-NEXT: %[[v0:.*]] = select %[[cond]], %[[a]], %[[b]] : f32
14+
// CHECK-NEXT: affine.store %[[v0]], %[[A]][0] : memref<10xf32>

0 commit comments

Comments
 (0)