SuccessChanges

Summary

  1. [SLP] match maxnum/minnum intrinsics as FP reduction ops (details)
  2. [libc++] NFCI: Refactor allocator_traits (details)
  3. [x86] add cast to avoid compile-time warning; NFC (details)
  4. [LoopInfo] Fix a typo in compareLoops (details)
Commit 5b77ac32b1150d066b35b45d6d982f4b4a1f62ff by spatel
[SLP] match maxnum/minnum intrinsics as FP reduction ops

After much refactoring over the last 2 weeks to the reduction
matching code, I think this change is finally ready.

We effectively broke fmax/fmin vector reduction optimization
when we started canonicalizing to intrinsics in instcombine,
so this should restore that functionality for SLP.

There are still FMF problems here as noted in the code comments,
but we should be avoiding miscompiles on those for fmax/fmin by
restricting to full 'fast' ops (negative tests are included).

Fixing FMF propagation is a planned follow-up.

Differential Revision: https://reviews.llvm.org/D94913
The file was modifiedllvm/test/Transforms/SLPVectorizer/X86/fminnum.ll
The file was modifiedllvm/test/Transforms/PhaseOrdering/X86/vector-reductions-expanded.ll
The file was modifiedllvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
The file was modifiedllvm/test/Transforms/SLPVectorizer/X86/fmaxnum.ll
Commit 2cb4a96a99e8acbf57a31d4d06ed5e21799d878e by Louis Dionne
[libc++] NFCI: Refactor allocator_traits

The implementation had a lot of boilerplate and was more complicated than
necessary. This NFC refactoring introduces a few macros to reduce code
duplication, and uses a consistent style and formatting for the whole file.

Differential Revision: https://reviews.llvm.org/D94544
The file was modifiedlibcxx/include/__memory/allocator_traits.h
The file was modifiedlibcxx/include/memory
Commit d27bb5c375ca8e96e15168587a3bcd91b244fcad by spatel
[x86] add cast to avoid compile-time warning; NFC
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp
Commit fe301f474977da0b82548652ef4bbd058542d076 by kazu
[LoopInfo] Fix a typo in compareLoops

The code here is checking to see if two sets are identical.
OtherBlocksSet should point to OtherL->getBlocksSet() instead.

Differential Revision: https://reviews.llvm.org/D94926
The file was modifiedllvm/include/llvm/Analysis/LoopInfoImpl.h