[X86] Change signatures of avx512 packed fp compare intrinsics to return a vXi1 mask...
authorCraig Topper <craig.topper@intel.com>
Sat, 10 Feb 2018 23:33:55 +0000 (23:33 +0000)
committerCraig Topper <craig.topper@intel.com>
Sat, 10 Feb 2018 23:33:55 +0000 (23:33 +0000)
commit4dccffc84a71c6edc07fc38812e144210d381bf8
tree25a814eb99e005dd01480daac49070be9dedd264
parentb781b2e24cf309879dc82a241f7cc004c2f74ebc
[X86] Change signatures of avx512 packed fp compare intrinsics to return a vXi1 mask type to be closer to an fcmp.

Summary:
This patch changes the signature of the avx512 packed fp compare intrinsics to return a vXi1 vector and no longer take a mask as input. The casts to scalar type will now need to be explicit in the IR. The masking node will now be an explicit and in the IR.

This makes the intrinsic look much more similar to an fcmp instruction that we wish we could use for these but can't. We already use icmp instructions for integer compares.

Previously the lowering step of isel would turn the intrinsic into an X86 specific ISD node and a emit the masking nodes as well as some bitcasts. This means DAG combines can't see the vXi1 type until somewhat late, making it more difficult to combine out gpr<->mask transition sequences. By exposing the vXi1 type explicitly in the IR and initial SelectionDAG we give earlier DAG combines and even InstCombine the chance to see it and optimize it.

This should make any issues with gpr<->mask sequences the same between integer and fp. Meaning we only have to fix them once.

Reviewers: spatel, delena, RKSimon, zvi

Reviewed By: RKSimon

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D43137

llvm-svn: 324827
12 files changed:
llvm/include/llvm/IR/IntrinsicsX86.td
llvm/lib/IR/AutoUpgrade.cpp
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/avx512-cmp-kor-sequence.ll
llvm/test/CodeGen/X86/avx512-intrinsics-upgrade.ll
llvm/test/CodeGen/X86/avx512-intrinsics.ll
llvm/test/CodeGen/X86/avx512vl-intrinsics-upgrade.ll
llvm/test/CodeGen/X86/avx512vl-intrinsics.ll
llvm/test/CodeGen/X86/avx512vl-vec-masked-cmp.ll
llvm/test/CodeGen/X86/stack-folding-fp-avx512.ll
llvm/test/CodeGen/X86/stack-folding-fp-avx512vl.ll
llvm/test/Transforms/InstCombine/X86/X86FsubCmpCombine.ll