Skip to content

Commit 8b8f453

Browse files
committed
pushing slice over another == fuse
1 parent 452d35f commit 8b8f453

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

core/src/optim/slice.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,18 @@ impl super::TypedPass for PushSliceUp {
3131
continue;
3232
}
3333
if let Some(me) = node.op_as::<Slice>() {
34-
let my_len = &node.outputs[0].fact.shape[me.axis];
35-
let slice_len = &succ.outputs[0].fact.shape[slice.axis];
36-
if !(my_len.clone() - slice_len).prove_strict_positive() {
37-
continue;
34+
if me.axis == slice.axis {
35+
let start = me.start.clone() + &slice.start;
36+
let len = slice.end.clone() - &slice.start;
37+
let end = start.clone() + len;
38+
let new = Slice { axis, start, end };
39+
return TypedModelPatch::fuse_with_next(model, node, new).map(Some);
40+
} else {
41+
let my_len = &node.outputs[0].fact.shape[me.axis];
42+
let slice_len = &succ.outputs[0].fact.shape[slice.axis];
43+
if !(my_len.clone() - slice_len).prove_strict_positive() {
44+
continue;
45+
}
3846
}
3947
}
4048
let boundaries =

0 commit comments

Comments
 (0)