  Lifetime-optimal speculative partial redundancy elimination (lospre) is the
most advanced currently known redundancy elimination technique. It subsumes
many previously known approaches, such as common subexpression elimination,
global common subexpression elimination, and loop-invariant code motion.
However, previously known lospre algorithms have high time complexity; faster
but less powerful approaches have been used and developed further instead. We
present a simple linear-time algorithm for lospre for structured programs that
can also handle some more general scenarios compared to previous approaches. We
prove that our approach is optimal and that the runtime is linear in the number
of nodes in the control-flow graph. The condition on programs of being
structured is automatically true for many programming languages and for others,
such as C, is equivalent to a bound on the number of goto labels per function.
An implementation in a mainstream C compiler demonstrates the practical
feasibility of our approach. Our approach is based on graph-structure theory
and uses tree-decompositions. We also show that, for structured programs, the
runtime of deterministic implementations of the previously known MC-PRE and
MC-SSAPRE algorithms can be bounded by $O(n^{2.5})$, improving the previous
bounds of $O(n^3)$.
