I'd like to move LoopVectorizationLegality in Transform/Vectorize/LoopVectorize.cpp to Analysis tree so that it is reusable from outside of loop vectorizer (e.g., other analysis/transformation to check whether loop is vectorizable and behave differently).
RecurrenceDescriptor and InductionDescriptor classes are used by LoopVectorizationLegality class. Nature of all those classes are indeed
analysis and thus Analysis tree is a better place to house them.
Includes and forward declared classes are also cleaned up. I really didn't want to include IRBuilder.h from a header --- since it includes a lot of other headers, but it looked like forward declaring IRBuilder wasn't too appealing to me.
You could use default member initialization for MinMaxKind.