R600/SI: Remove i1 pseudo VALU ops
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Wed, 3 Dec 2014 05:22:35 +0000 (05:22 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Wed, 3 Dec 2014 05:22:35 +0000 (05:22 +0000)
commitbecd656c7caf68d443dc721ae01590d200beed9c
treee2da004150f309650b5175f7cae74a41a00bfba0
parent2f470c62cba90ca47f3aead9b0344c4c183dd6be
R600/SI: Remove i1 pseudo VALU ops

Select i1 logical ops directly to 64-bit SALU instructions.
Vector i1 values are always really in SGPRs, with each
bit for each item in the wave. This saves about 4 instructions
when and/or/xoring any condition, and also helps write conditions
that need to be passed in vcc.

This should work correctly now that the SGPR live range
fixing pass works. More work is needed to eliminate the VReg_1
pseudo regclass and possibly the entire SILowerI1Copies pass.

llvm-svn: 223206
llvm/lib/Target/R600/SIInstrInfo.td
llvm/lib/Target/R600/SIInstructions.td
llvm/lib/Target/R600/SILowerI1Copies.cpp
llvm/test/CodeGen/R600/fceil64.ll
llvm/test/CodeGen/R600/ffloor.ll
llvm/test/CodeGen/R600/setcc.ll
llvm/test/CodeGen/R600/setcc64.ll
llvm/test/CodeGen/R600/sgpr-control-flow.ll
llvm/test/CodeGen/R600/valu-i1.ll
llvm/test/CodeGen/R600/xor.ll