[MLIR][Affine-loop-fusion] Fix a bug in affine-loop-fusion pass when there are...
[MLIR][Affine-loop-fusion] Fix a bug in affine-loop-fusion pass when there are non-affine operations When there is a mix of affine load/store and non-affine operations (e.g. std.load, std.store), affine-loop-fusion ignores the present of non-affine ops, thus changing the program semantics. E.g. we have a program of three affine loops operating on the same memref in which one of them uses std.load and std.store, as follows. ``` affine.for affine.store %1 affine.for std.load %1 std.store %1 affine.for affine.load %1 affine.store %1 ``` affine-loop-fusion will produce the following result which changed the program semantics: ``` affine.for std.load %1 std.store %1 affine.for affine.store %1 affine.load %1 affine.store %1 ``` This patch is to fix the above problem by checking non-affine users of the memref that are between the source and destination nodes of interest. Differential Revision: https://reviews.llvm.org/D82158
Loading
Please sign in to comment