[libre-riscv-dev] [isa-dev] [RFC] SV branch behaviour: augmentation to store results of conditional tests
lkcl
luke.leighton at gmail.com
Thu Sep 26 11:46:42 BST 2019
https://www.gnu.org/software/gcc/projects/tree-ssa/vectorization.html#unvectoriz
Example 1: Uncountable loop:
while (*p != NULL)
{
*q++ = *p++;
}
well that's definitely vectorisable with fail-on-first, it's near-identical
to the canonical strcpy.
bruce, i have a hunch that the idea of data-dependent early-VL-termination
which i added to SV after looking at "normal" data-dependent behaviour may
turn out to be really useful, i.e. applicable in a *lot* of
otherwise-unvectoriseable loops.
the basic idea is that the predicate mask, when set up in the
"vectorisation context", may be marked as being a "fail-on-first" predicate
(where x0 and inversion may be used in order to set an "unconditional"
predicate, where ffirst is then also set).
the "normal" fail-on-first is the data-dependent one which activates only
after the first exception (such as a LD trap).
the *additional* fail-on-first capability that i added was that if the
operation returns zero (or FP +/- 0) it *also* triggers termination of the
vector-loop, and sets VL equal to the last successful element.
in combination with the consensual-branch capability (or by testing VL !=
expected length), looping may end at the correct point, safe in the
knowledge that any operations carried out prior to the test-point were
definitely done *only* on the range-limited VL up to the fail-point and
*not* beyond.
i have a sneaking suspicion that this could be the kind of capability that
would make it almost laughably trivial to vectorise loops that were
formerly considered unworkable or just simply far too expensive.
l.
More information about the libre-riscv-dev
mailing list