[LV] Add support for minimum/maximum intrinsics
authorAnna Thomas <anna@azul.com>
Tue, 13 Jun 2023 18:41:23 +0000 (14:41 -0400)
committerAnna Thomas <anna@azul.com>
Tue, 20 Jun 2023 17:17:28 +0000 (13:17 -0400)
commitec146cb7c0b4a162ee73463e6c7bb306b99e013b
treee8dcfbe139d193d6d894836186bc9bca73240bac
parent0cb977dda1809182786ad7f8fb14a9af08d37918
[LV] Add support for minimum/maximum intrinsics

{mini|maxi}mum intrinsics are different from {min|max}num intrinsics in
the propagation of NaN and signed zero. Also, the minnum/maxnum
intrinsics require the presence of nsz flags to be valid reductions in
vectorizer. In this regard, we introduce a new recurrence kind and also
add support for identifying reduction patterns using these intrinsics.

The reduction intrinsics and lowering was introduced here: 26bfbec5d2.

There are tests added which show how this interacts across chains of
min/max patterns.

Differential Revision: https://reviews.llvm.org/D151482
llvm/include/llvm/Analysis/IVDescriptors.h
llvm/lib/Analysis/IVDescriptors.cpp
llvm/lib/Transforms/Utils/LoopUtils.cpp
llvm/test/Transforms/LoopVectorize/minmax_reduction.ll