While playing around with optimization sets in LLVM, it occurs to me that the order in which optimizations are run matters greatly since, in general,
A(B(src)) is not equal to
B are some optimization of type
source -> source and
src is of type
Are there optimizations for which that property holds? Are there projects or research that attempt to formalize or otherwise create these types of optimizations?