diff options
author | Sanjay Patel <spatel@rotateright.com> | 2020-02-09 10:04:41 -0500 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2020-02-09 10:04:41 -0500 |
commit | a17f03bd93939cf30bfbb829321437bd0aaa4ef0 (patch) | |
tree | ccd62b944e3e912f97f68bfe07859855652261af /lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h | |
parent | 74857b4260ec9db8d688c2d377a5f370efc150b4 (diff) | |
download | llvm-a17f03bd93939cf30bfbb829321437bd0aaa4ef0.zip llvm-a17f03bd93939cf30bfbb829321437bd0aaa4ef0.tar.gz llvm-a17f03bd93939cf30bfbb829321437bd0aaa4ef0.tar.bz2 |
[VectorCombine] new IR transform pass for partial vector ops
We have several bug reports that could be characterized as "reducing scalarization",
and this topic was also raised on llvm-dev recently:
http://lists.llvm.org/pipermail/llvm-dev/2020-January/138157.html
...so I'm proposing that we deal with these patterns in a new, lightweight IR vector
pass that runs before/after other vectorization passes.
There are 4 alternate options that I can think of to deal with this kind of problem
(and we've seen various attempts at all of these), but they all have flaws:
InstCombine - can't happen without TTI, but we don't want target-specific
folds there.
SDAG - too late to assist other vectorization passes; TLI is not equipped
for these kind of cost queries; limited to a single basic block.
CGP - too late to assist other vectorization passes; would need to re-implement
basic cleanups like CSE/instcombine.
SLP - doesn't fit with existing transforms; limited to a single basic block.
This initial patch/transform is based on existing code in AggressiveInstCombine:
we walk backwards through the function looking for a pattern match. But we diverge
from that cost-independent IR canonicalization pass by using TTI to decide if the
vector alternative is profitable.
We probably have at least 10 similar bug reports/patterns (binops, constants,
inserts, cheap shuffles, etc) that would fit in this pass as follow-up enhancements.
It's possible that we could iterate on a worklist to fix-point like InstCombine does,
but it's safer to start with a most basic case and evolve from there, so I didn't
try to do anything fancy with this initial implementation.
Differential Revision: https://reviews.llvm.org/D73480
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h')
0 files changed, 0 insertions, 0 deletions