[all-commits] [llvm/llvm-project] 740f08: [NFC] Clean up tests in test/Transforms/LoopVector...
david-arm via All-commits
all-commits at lists.llvm.org
Mon Aug 16 11:33:27 PDT 2021
Branch: refs/heads/release/13.x
Home: https://github.com/llvm/llvm-project
Commit: 740f08210e5dda848069f3175dcc2d12328c36ad
https://github.com/llvm/llvm-project/commit/740f08210e5dda848069f3175dcc2d12328c36ad
Author: David Sherwood <david.sherwood at arm.com>
Date: 2021-08-16 (Mon, 16 Aug 2021)
Changed paths:
M llvm/test/Transforms/LoopVectorize/assume.ll
Log Message:
-----------
[NFC] Clean up tests in test/Transforms/LoopVectorize/assume.ll
The tests previously had lots of unnecessary CHECK lines, where
all we really need to check is the presence (or absence) of the
assume intrinsic and the correct input operands.
Differential Revision: https://reviews.llvm.org/D107157
(cherry picked from commit 1172a8a7639399fe0b8a6c78a7123b1c3f9cf833)
Commit: a57d98111e63d390686f30b07fd1b1227ab99086
https://github.com/llvm/llvm-project/commit/a57d98111e63d390686f30b07fd1b1227ab99086
Author: David Sherwood <david.sherwood at arm.com>
Date: 2021-08-16 (Mon, 16 Aug 2021)
Changed paths:
M llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
M llvm/test/Transforms/LoopVectorize/assume.ll
Log Message:
-----------
[LoopVectorize] Improve vectorisation of some intrinsics by treating them as uniform
This patch adds more instructions to the Uniforms list, for example certain
intrinsics that are uniform by definition or whose operands are loop invariant.
This list includes:
1. The intrinsics 'experimental.noalias.scope.decl' and 'sideeffect', which
are always uniform by definition.
2. If intrinsics 'lifetime.start', 'lifetime.end' and 'assume' have
loop invariant input operands then these are also uniform too.
Also, in VPRecipeBuilder::handleReplication we check if an instruction is
uniform based purely on whether or not the instruction lives in the Uniforms
list. However, there are certain cases where calls to some intrinsics can
be effectively treated as uniform too. Therefore, we now also treat the
following cases as uniform for scalable vectors:
1. If the 'assume' intrinsic's operand is not loop invariant, then we
are free to treat this as uniform anyway since it's only a performance
hint. We will get the benefit for the first lane.
2. When the input pointers for 'lifetime.start' and 'lifetime.end' are loop
variant then for scalable vectors we assume these still ultimately come
from the broadcast of an alloca. We do not support scalable vectorisation
of loops containing alloca instructions, hence the alloca itself would
be invariant. If the pointer does not come from an alloca then the
intrinsic itself has no effect.
I have updated the assume test for fixed width, since we now treat it
as uniform:
Transforms/LoopVectorize/assume.ll
I've also added new scalable vectorisation tests for other intriniscs:
Transforms/LoopVectorize/scalable-assume.ll
Transforms/LoopVectorize/scalable-lifetime.ll
Transforms/LoopVectorize/scalable-noalias-scope-decl.ll
Differential Revision: https://reviews.llvm.org/D107284
(cherry picked from commit 3fd96e1b2e129b981f1bc1be2615486187e74687)
Compare: https://github.com/llvm/llvm-project/compare/1bbe8ef81549...a57d98111e63
More information about the All-commits
mailing list