[SystemZ] Improve instruction selection of 64 bit shifts and rotates.
authorJonas Paulsson <paulsson@linux.vnet.ibm.com>
Tue, 2 Apr 2019 15:36:30 +0000 (15:36 +0000)
committerJonas Paulsson <paulsson@linux.vnet.ibm.com>
Tue, 2 Apr 2019 15:36:30 +0000 (15:36 +0000)
commitf76fe454268d661cb31018d9e46a6df467bb22b9
tree39dd5da04e1ba1b6dc2914072cc5c9a4dbc06b5e
parent0b9527119f7e7678b9bae87aac4be7a40e468a8c
[SystemZ]  Improve instruction selection of 64 bit shifts and rotates.

For shift and rotate instructions that only use the last 6 bits of the shift
amount, a shift amount of (x*64-s) can be substituted with (-s). This saves
one instruction and a register:

  lhi     %r1, 64
  sr      %r1, %r3
  sllg    %r2, %r2, 0(%r1)
  =>
  lcr     %r1, %r3
  sllg    %r2, %r2, 0(%r1)

Review: Ulrich Weigand
llvm-svn: 357481
llvm/lib/Target/SystemZ/SystemZInstrInfo.td
llvm/lib/Target/SystemZ/SystemZOperators.td
llvm/test/CodeGen/SystemZ/rot-shift-64-sub-amt.ll [new file with mode: 0644]