diff options
author | David Green <david.green@arm.com> | 2020-08-20 14:31:14 +0100 |
---|---|---|
committer | David Green <david.green@arm.com> | 2020-08-20 14:31:14 +0100 |
commit | 816097e4e5f32b59c2b6099f74356f1dbe55aabb (patch) | |
tree | 9ac2f6755e44dc27c5a1ee1591859e626ae85201 /clang/unittests/Tooling/Syntax/BuildTreeTest.cpp | |
parent | adf0b8cc70325f027d202139e3ff984c41896b57 (diff) | |
download | llvm-816097e4e5f32b59c2b6099f74356f1dbe55aabb.zip llvm-816097e4e5f32b59c2b6099f74356f1dbe55aabb.tar.gz llvm-816097e4e5f32b59c2b6099f74356f1dbe55aabb.tar.bz2 |
[LV] Allow tail folded reduction selects to remain in the loop
The normal scheme for tail folding reductions is to use:
loop:
p = phi(0, a)
mask = ...
x = masked_load(..., mask)
a = add(x, p)
s = select(mask, a, p)
This means we need to keep the register p and a alive out of the loop, plus
the mask. On a target with predicated operations we can instead generate
the phi as p = phi(0, s). This ensures the select in the loop and we can
fold select(m, add(a, b), c) to something like a vaddt c, a, b using the
m predicate. This in turn allows us to tail predicate the entire loop.
Differential Revision: https://reviews.llvm.org/D84741
Diffstat (limited to 'clang/unittests/Tooling/Syntax/BuildTreeTest.cpp')
0 files changed, 0 insertions, 0 deletions