[AMDGPU] Divergence driven selection for fused bitlogic
authorStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>
Fri, 15 Oct 2021 20:07:32 +0000 (13:07 -0700)
committerStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>
Mon, 18 Oct 2021 08:44:25 +0000 (01:44 -0700)
commit7cdb1df8c70425b30905418636f9008cf8d3a844
treecaa75c8fff034fcfcf0a8c30db5a70cf56d0681f
parent605efd5dd5bf5f174df7cbd6be9d4e06d6e6249d
[AMDGPU] Divergence driven selection for fused bitlogic

The change adds divergence predicates for fused logical operations.
The problem with selecting a scalar fused op such as S_NOR_B32 is
that it does not have a VALU counterpart and will be split in
moveToVALU. At the same time it prevents selection of a better
opcode on the VALU side (such as V_OR3_B32) which does not have a
counterpart on SALU side.

XNOR opcodes are left as is and selected as scalar to get advantage
of the SIInstrInfo::lowerScalarXnor() code which can commute
operations to keep one of two opcodes on SALU if possible. See
xnor.ll test for this.

Differential Revision: https://reviews.llvm.org/D111907
llvm/lib/Target/AMDGPU/SOPInstructions.td
llvm/lib/Target/AMDGPU/VOP3Instructions.td
llvm/test/CodeGen/AMDGPU/fused-bitlogic.ll