I found another CSE problem with a different operation:
func.func @masked_reduce_minf_f32(%arg0: vector<16xf32>, %mask : vector<16xi1>) -> (f32,f32) {
%2 = vector.reduction <minnumf>, %arg0 : vector<16xf32> into f32
%0 = vector.mask %mask { vector.reduction <minnumf>, %arg0 : vector<16xf32> into f32 } : vector<16xi1> -> f32
return %0, %2 : f32, f32
}
If you run CSE, you get this:
func.func @masked_reduce_minf_f32(%arg0: vector<16xf32>, %arg1: vector<16xi1>) -> (f32, f32) {
%0 = vector.reduction <minnumf>, %arg0 : vector<16xf32> into f32
%1 = vector.mask %arg1 { vector.yield %0 : f32 } : vector<16xi1> -> f32
return %1, %0 : f32, f32
}