Is there a pass in LLVM that can optimize this pattern https://godbolt.org/z/hdKsj4nc4? The expression `a*b + a*c + a*b*d` may be optimized into `a*(b + c + b*d)` saving one multiplication. It looks like ReassociatePass cannot optimize this due to the single-use check for adding the expression into the tree. Is this a hard limitation? @RKSimon can you please comment?