There was a subtle problem with the interrupt check determining code.
authorStephen Adams <edu/mit/csail/zurich/adams>
Thu, 19 Feb 1998 21:29:38 +0000 (21:29 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Thu, 19 Feb 1998 21:29:38 +0000 (21:29 +0000)
commitc1911417d85a88b1610b1b58ac0b01814379551b
tree1af849d7a7d90f29f22ed8ce7b8d397a55c52643
parent4a1e9de2d4aae4c9f91d123584535caf5f2d448e
There was a subtle problem with the interrupt check determining code.

The old code was lazy about searching the rgraph to determine if entry
points and exit points were leaf-like.  It explored the whole tree
when when it found some entry RTL.  This is a problem in the case of
expressions since expressions have no distinguished entry RTL.  Thus
LAP was generated for some expression bblocks before the search took
place.  This is a problem because the LAP instructions replace the RTL
instructions, and the RTL is needed to determine the interrupt checks.

The whole compiler staged only because type-checking is turned off by
default.  The RINST-INSN field is a (vector-ref 0), which, when
unchecked, fortuitously happened to load the CDR of the LAP, which
then proceeded to gracefully fail the RTL predicates.

The solution is to introduce a PRE-LAPGEN-ANALYSIS procedure to to
machine dependent analysis immediately prior to LAP generation.

The analysis for the i386 back end does the original analysis.
The other back ends do nothing.
v7/src/compiler/back/lapgn1.scm
v7/src/compiler/machines/C/lapgen.scm
v7/src/compiler/machines/alpha/lapgen.scm
v7/src/compiler/machines/bobcat/lapgen.scm
v7/src/compiler/machines/i386/lapgen.scm
v7/src/compiler/machines/i386/rules3.scm
v7/src/compiler/machines/mips/lapgen.scm
v7/src/compiler/machines/sparc/lapgen.scm
v7/src/compiler/machines/spectrum/lapgen.scm
v7/src/compiler/machines/vax/lapgen.scm