[all-commits] [llvm/llvm-project] b4fa88: [ARM] Improve VPT predicate tracking

Sam Parker via All-commits all-commits at lists.llvm.org
Tue Sep 22 02:40:57 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: b4fa884a73c5c883723738f67ad1810a6d48cc2d
      https://github.com/llvm/llvm-project/commit/b4fa884a73c5c883723738f67ad1810a6d48cc2d
  Author: Sam Parker <sam.parker at arm.com>
  Date:   2020-09-22 (Tue, 22 Sep 2020)

  Changed paths:
    M llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
    M llvm/test/CodeGen/Thumb2/LowOverheadLoops/cond-vector-reduce-mve-codegen.ll
    A llvm/test/CodeGen/Thumb2/LowOverheadLoops/tp-multiple-vpst.ll
    M llvm/test/CodeGen/Thumb2/LowOverheadLoops/vctp-in-vpt-2.mir
    M llvm/test/CodeGen/Thumb2/LowOverheadLoops/vpt-blocks.mir

  Log Message:
  -----------
  [ARM] Improve VPT predicate tracking

The VPTBlock has been modified to track the 'global' state of the
VPR, as well as the state for each block. Each object now just holds
a list of instructions that makeup the block, while static structures
hold the predicate information. This enables global access for
querying how both a VPT block and individual instructions are
predicated. These changes now allow us, again, to handle more
complicated cases where multiple instructions build a predicate
and/or where the same predicate in used in multiple blocks.

It doesn't, however, get us back to before the tracking was 'fixed'
as some extra logic will be required to properly handle VPT
instructions. Currently a VPT could be effectively predicated because
of it's inputs, but the existing logic will not detect that and so
will refuse to perform the transformation. This can be seen in
remat-vctp.ll test where we still don't perform the transform.

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




More information about the All-commits mailing list