The pattern was previously only capable of storing into struct fields which are primitive types. If the struct contained a nested struct it immediately aborted the pattern rewrite.
This patch introduces the capability of recursively splitting stores into sub-aggregates as well. This is achieved by splitting an aggregate sized integer from the original store argument and letting repeated pattern applications further split it into field stores.
Additionally, the pattern is also capable of handling partial writes into aggregates, which is a pattern clang generates as well. Special care had to be taken to make sure no stores are created that weren't in the original code.
I guess there is a slight risk here that we may not be able to split the store into the nested array/struct?