InstCombine: Fold logic of fp_classes together
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 17 Nov 2022 06:12:22 +0000 (22:12 -0800)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 13 Dec 2022 15:51:41 +0000 (10:51 -0500)
commit8fc25caae5305b9e4113b9dd5332e7375a5657a6
tree4c424fd91f0552dcbcd8e5e92a7893b22b1cbd24
parente9d298d7c6a8cef6e1de06414a000e395b379a18
InstCombine: Fold logic of fp_classes together

Move logical operators on pairs of llvm.is.fpclass on the same value
into the test mask of a single is_fpclass.

or (class x, mask0), (class x, mask1) -> class x, (mask0 | mask1)
and (class x, mask0), (class x, mask1) -> class x, (mask0 & mask1)
xor (class x, mask0), (class x, mask1) -> class x, (mask0 ^ mask1)

The and/or cases should appear frequently in the builtin math
libraries; haven't seen the xor case but handle it for completeness.
llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
llvm/lib/Transforms/InstCombine/InstCombineInternal.h
llvm/test/Transforms/InstCombine/is_fpclass.ll