A compiler that forms an intermediate representation of a program using a
flow graph with less than all possible edges used to model asynchronous
transfers within the program. The flow graph is formed in multiple
phases. In one phase, the flow graph is formed without modeling
asynchronous transfers. In later phases, representations of the effects
of the asynchronous transfers are selectively added. As part of the later
phases, edges modeling a possible asynchronous transfer are added to the
flow graph following definitions in protected regions of variables that
are live outside the protected region. A modified definition of live-ness
of a variable is used to incorporate use of the variable in any region,
including the protected region, following an asynchronous transfer. Edges
from the protected region are also added to the model if the only use of
the defined variable is in a handler.