[SystemZ] Rein back the use of block operations
authorRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Fri, 27 Sep 2013 15:29:20 +0000 (15:29 +0000)
committerRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Fri, 27 Sep 2013 15:29:20 +0000 (15:29 +0000)
commit067817ee05b0faebb301f8201ad327af3c0f5333
treed6696f6bab60729e9c7a01aab44909509e8b94e2
parent54b369166fcd71b95480361dcc0c2c767c6e6e74
[SystemZ] Rein back the use of block operations

The backend tries to use block operations like MVC, NC, OC and XC for
simple scalar operations.  For correctness reasons, it rejects any case
in which the regions might partially overlap.  However, for performance
reasons, it should also reject cases where the regions might be equal,
since the instruction might then not use the fast path.

This fixes a performance regression seen in bzip2.  We may want to limit
the optimisation even more in future, or even remove it entirely, but I'll
try with this for now.

llvm-svn: 191525
llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp
llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp
llvm/test/CodeGen/SystemZ/and-08.ll
llvm/test/CodeGen/SystemZ/fp-move-02.ll
llvm/test/CodeGen/SystemZ/memcpy-02.ll