https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84408
--- Comment #9 from Alexandre Oliva <aoliva at gcc dot gnu.org> ---
Pardom for taking so long to chime in.

I suspect the source of the problem is the lack of internal view reset
computations.  Without that, the assembler gets an uninterrupted chain of
symbolic views, in which each view is computed based on the view before it and
the offset between the addresses in which they were issued.  Depending on the
order in which the assembler attempts to resolve each view to a constant, it
could get expensive.  It was never meant for this kind of use: it was expected
that most views would be zero-asserts, so this wouldn't arise.

This also points at the solution: to define the target hook that tells the
compiler which insns are reset points, so that the compiler can use the
assembler .loc view support in the way it was designed to be used.

If insn lengths, as computed by gcc, are enough to determine whether or not an
insn takes up any code space, defining the reset_location_view target hook to
just return zero will do; otherwise, if more elaborate decisions are needed, it
may return 1 or -1 to override the length-based computation.

Reply via email to