Bilinear operations are ubiquitous in computer science and in particular in
computer algebra and symbolic computation. One of the most fundamental
arithmetic operation is the multiplication, and when applied to, e.g.,
polynomials or matrices, its result is a bilinear function of its inputs. In
terms of arithmetic operations, many sub-quadratic (resp. sub-cubic) algorithms
were developed for these tasks. But these fast algorithms come at the expense
of (potentially large) extra temporary space to perform the computation. On the
contrary, classical, quadratic (resp. cubic) algorithms, when computed
sequentially, quite often require very few (constant) extra registers. Further
work then proposed simultaneously ``fast'' and ``in-place'' algorithms, for
both matrix and polynomial operations We here propose algorithms to extend the
latter line of work for accumulated algorithms arising from a bilinear formula.
Indeed one of the main ingredient of the latter line of work is to use the
(free) space of the output as intermediate storage. When the result has to be
accumulated, i.e., if the output is also part of the input, this free space
thus does not even exist. To be able to design accumulated in-place algorithm
we thus relax the in-place model to allow algorithms to also modify their
input, therefore to use them as intermediate storage for instance, provided
that they are restored to their initial state after completion of the
procedure. This is in fact a natural possibility in many programming
environments. Furthermore, this restoration allows for recursive combinations
of such procedures, as the (non concurrent) recursive calls will not mess-up
the state of their callers. We propose here a generic technique transforming
any bilinear algorithm into an in-place algorithm under this model. This then
directly applies to polynomial and matrix multiplication algorithms, including
fast ones