[all-commits] [llvm/llvm-project] e73b20: [ARM][MVE] Disallow VPSEL for tail predication

Sam Parker via All-commits all-commits at lists.llvm.org
Tue Jan 14 03:41:39 PST 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: e73b20c57dc7a8c847ebadeb7e19c08ec84f5bd7
      https://github.com/llvm/llvm-project/commit/e73b20c57dc7a8c847ebadeb7e19c08ec84f5bd7
  Author: Sam Parker <sam.parker at arm.com>
  Date:   2020-01-14 (Tue, 14 Jan 2020)

  Changed paths:
    M llvm/lib/Target/ARM/ARMInstrMVE.td
    M llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
    A llvm/test/CodeGen/Thumb2/LowOverheadLoops/inloop-vpnot-1.mir
    A llvm/test/CodeGen/Thumb2/LowOverheadLoops/inloop-vpnot-2.mir
    A llvm/test/CodeGen/Thumb2/LowOverheadLoops/inloop-vpnot-3.mir
    A llvm/test/CodeGen/Thumb2/LowOverheadLoops/inloop-vpsel-1.mir
    A llvm/test/CodeGen/Thumb2/LowOverheadLoops/inloop-vpsel-2.mir

  Log Message:
  -----------
  [ARM][MVE] Disallow VPSEL for tail predication

Due to the current way that we collect predicated instructions, we
can't easily handle vpsel in tail predicated loops. There are a
couple of issues:
1) It will use the VPR as a predicate operand, but doesn't have to be
   instead a VPT block, which means we can assert while building up
   the VPT block because we don't find another VPST to being a new
   one.
2) VPSEL still requires a VPR operand even after tail predicating,
   which means we can't remove it unless there is another
   instruction, such as vcmp, that can provide the VPR def.

The first issue should be a relatively simple fix in the logic of the
LowOverheadLoops pass, whereas the second will require us to
represent the 'implicit' tail predication with an explicit value.

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




More information about the All-commits mailing list