[PATCH] D144226: Allow inner-loop only reductions
Ankit via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 16 15:30:38 PST 2023
quic_aankit created this revision.
quic_aankit added reviewers: fhahn, efriedma.
Herald added subscribers: StephenFan, hiraditya.
Herald added a project: All.
quic_aankit requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Motivating example:
for (j = 0; j < n; j++) {
for (k = 0; k < l; k++) {
z[j] += x[k]*y[n*k+j];
}
}
In the code above we should be able to use LoopInterchange to interchange the
j and k loop as it allows the innermost loop to be vectorized. However in the
current state the LICM promotes z[j] to scalar effective changing the code to:
for (j = 0; j < n; j++) {
int tmp = z[j];
for (k = 0; k < l; k++) {
tmp += x[k]*y[n*k+j];
}
z[j] = tmp;
}
After LICM the loops are not tightly nested and hence LoopInterchange cannot
work.
The patch aims to look for removablePHIs in the InnerLoop Header
and sink the load and hoist store of LICM promoted variables if they
help in loop-interchange.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D144226
Files:
llvm/lib/Transforms/Scalar/LoopInterchange.cpp
llvm/test/Transforms/LoopInterchange/inner-only-reductions.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D144226.498171.patch
Type: text/x-patch
Size: 31332 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230216/342b8f99/attachment-0001.bin>
More information about the llvm-commits
mailing list