llvm-project
03e570bd - [mlir][spirv] Fix control of nested sibling constructs in the deserializer (#225920)

Commit
2 days ago
[mlir][spirv] Fix control of nested sibling constructs in the deserializer (#225920) When the deserializer structurizes an outer loop or selection, updateMergeInfo re-keys the blockMergeInfo entries of the nested constructs from the old blocks to the cloned ones. It erases the old entry first and then reads it->second.control through the erased iterator. blockMergeInfo is a MapVector, so the erase shifts the next entry into that slot and the nested construct is re-created with its sibling's control. With two sibling loops inside an outer loop, the first one marked DontUnroll and the second Unroll, the round trip comes back with both marked Unroll. Same thing for two sibling selections with Flatten and DontFlatten. If the erased entry was the last one the read is past the end of the vector. Copy the control value out of the entry before erasing it, like loc already is. Adds round-trip tests with two sibling loops and two sibling selections. Fixes #218853
Author
Parents
Loading