]> granicus.if.org Git - llvm/commit
[PPC] Use xxbrd to speed up bswap64
authorGuozhi Wei <carrot@google.com>
Mon, 6 Nov 2017 19:09:38 +0000 (19:09 +0000)
committerGuozhi Wei <carrot@google.com>
Mon, 6 Nov 2017 19:09:38 +0000 (19:09 +0000)
commit416cdcce390af48f1c741ff91b26ade0beac3abd
treeb87113d11fea5ae46315eedb6a58f821be8deeff
parent6e029979011433fef0a7cc11b7acc9e864affb87
[PPC] Use xxbrd to speed up bswap64

Power doesn't have bswap instructions, so llvm generates following code sequence for bswap64.

  rotldi   5, 3, 16
  rotldi   4, 3, 8
  rotldi   9, 3, 24
  rotldi   10, 3, 32
  rotldi   11, 3, 48
  rotldi   12, 3, 56
  rldimi 4, 5, 8, 48
  rldimi 4, 9, 16, 40
  rldimi 4, 10, 24, 32
  rldimi 4, 11, 40, 16
  rldimi 4, 12, 48, 8
  rldimi 4, 3, 56, 0

But Power9 has vector bswap instructions, they can also be used to speed up scalar bswap intrinsic. With this patch, bswap64 can be translated to:

  mtvsrdd 34, 3, 3
  xxbrd 34, 34
  mfvsrld 3, 34

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317499 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelLowering.cpp
lib/Target/PowerPC/PPCISelLowering.h
test/CodeGen/PowerPC/bswap64.ll [new file with mode: 0644]