;;; COMPONENT-INFO
;;; Holds the IR2-COMPONENT structure.
;;;
-;;; CONTINUATION-INFO
-;;; Holds the IR2-CONTINUATION structure. Continuations whose
-;;; values aren't used won't have any.
+;;; LVAR-INFO
+;;; Holds the IR2-LVAR structure. LVARs whose values aren't used
+;;; won't have any. XXX
;;;
;;; CLEANUP-INFO
;;; If non-null, then a TN in which the affected dynamic
;; the IR2-BLOCK's number, which differs from BLOCK's BLOCK-NUMBER
;; if any blocks are split. This is assigned by lifetime analysis.
(number nil :type (or index null))
- ;; information about unknown-values continuations that is used by
- ;; stack analysis to do stack simulation. An UNKNOWN-VALUES
- ;; continuation is PUSHED if its DEST is in another block.
- ;; Similarly, a continuation is POPPED if its DEST is in this block
- ;; but has its uses elsewhere. The continuations are in the order
- ;; that are pushed/popped in the block. Note that the args to a
- ;; single MV-COMBINATION appear reversed in POPPED, since we must
- ;; effectively pop the last argument first. All pops must come
- ;; before all pushes (although internal MV uses may be interleaved.)
- ;; POPPED is computed by LTN, and PUSHED is computed by stack
- ;; analysis.
+ ;; information about unknown-values LVARs that is used by stack
+ ;; analysis to do stack simulation. An UNKNOWN-VALUES LVAR is PUSHED
+ ;; if its DEST is in another block. Similarly, a LVAR is POPPED if
+ ;; its DEST is in this block but has its uses elsewhere. The LVARs
+ ;; are in the order that are pushed/popped in the block. Note that
+ ;; the args to a single MV-COMBINATION appear reversed in POPPED,
+ ;; since we must effectively pop the last argument first. All pops
+ ;; must come before all pushes (although internal MV uses may be
+ ;; interleaved.) POPPED is computed by LTN, and PUSHED is computed
+ ;; by stack analysis.
(pushed () :type list)
(popped () :type list)
;; the result of stack analysis: lists of all the unknown-values
- ;; continuations on the stack at the block start and end, topmost
- ;; continuation first.
+ ;; LVARs on the stack at the block start and end, topmost LVAR
+ ;; first.
(start-stack () :type list)
(end-stack () :type list)
;; the first and last VOP in this block. If there are none, both
(local-tn-count :test (not (zerop local-tn-count)))
(%label :test %label))
-;;; An IR2-CONTINUATION structure is used to annotate continuations
-;;; that are used as a function result continuation or that receive MVs.
-(defstruct (ir2-continuation
- (:constructor make-ir2-continuation (primitive-type))
+;;; An IR2-LVAR structure is used to annotate LVARs that are used as a
+;;; function result LVARs or that receive MVs.
+(defstruct (ir2-lvar
+ (:constructor make-ir2-lvar (primitive-type))
(:copier nil))
- ;; If this is :DELAYED, then this is a single value continuation for
- ;; which the evaluation of the use is to be postponed until the
- ;; evaluation of destination. This can be done for ref nodes or
- ;; predicates whose destination is an IF.
+ ;; If this is :DELAYED, then this is a single value LVAR for which
+ ;; the evaluation of the use is to be postponed until the evaluation
+ ;; of destination. This can be done for ref nodes or predicates
+ ;; whose destination is an IF.
;;
- ;; If this is :FIXED, then this continuation has a fixed number of
- ;; values, with the TNs in LOCS.
+ ;; If this is :FIXED, then this LVAR has a fixed number of values,
+ ;; with the TNs in LOCS.
;;
- ;; If this is :UNKNOWN, then this is an unknown-values continuation,
- ;; using the passing locations in LOCS.
+ ;; If this is :UNKNOWN, then this is an unknown-values LVAR, using
+ ;; the passing locations in LOCS.
;;
- ;; If this is :UNUSED, then this continuation should never actually
- ;; be used as the destination of a value: it is only used
- ;; tail-recursively.
+ ;; If this is :UNUSED, then this LVAR should never actually be used
+ ;; as the destination of a value: it is only used tail-recursively.
(kind :fixed :type (member :delayed :fixed :unknown :unused))
- ;; The primitive-type of the first value of this continuation. This
- ;; is primarily for internal use during LTN, but it also records the
+ ;; The primitive-type of the first value of this LVAR. This is
+ ;; primarily for internal use during LTN, but it also records the
;; type restriction on delayed references. In multiple-value
;; contexts, this is null to indicate that it is meaningless. This
- ;; is always (primitive-type (continuation-type cont)), which may be
- ;; more restrictive than the tn-primitive-type of the value TN. This
- ;; is becase the value TN must hold any possible type that could be
- ;; computed (before type checking.)
+ ;; is always (primitive-type (lvar-type cont)), which may be more
+ ;; restrictive than the tn-primitive-type of the value TN. This is
+ ;; becase the value TN must hold any possible type that could be
+ ;; computed (before type checking.) XXX
(primitive-type nil :type (or primitive-type null))
- ;; Locations used to hold the values of the continuation. If the
- ;; number of values if fixed, then there is one TN per value. If the
- ;; number of values is unknown, then this is a two-list of TNs
- ;; holding the start of the values glob and the number of values.
- ;; Note that since type checking is the responsibility of the values
- ;; receiver, these TNs primitive type is only based on the proven
- ;; type information.
+ ;; Locations used to hold the values of the LVAR. If the number of
+ ;; values if fixed, then there is one TN per value. If the number of
+ ;; values is unknown, then this is a two-list of TNs holding the
+ ;; start of the values glob and the number of values. Note that
+ ;; since type checking is the responsibility of the values receiver,
+ ;; these TNs primitive type is only based on the proven type
+ ;; information.
(locs nil :type list))
-(defprinter (ir2-continuation)
+(defprinter (ir2-lvar)
kind
primitive-type
locs)
;;; An ENTRY-INFO condenses all the information that the dumper needs
;;; to create each XEP's function entry data structure. ENTRY-INFO
-;;; structures are somtimes created before they are initialized, since
-;;; IR2 conversion may need to compile a forward reference. In this
-;;; case the slots aren't actually initialized until entry analysis runs.
+;;; structures are sometimes created before they are initialized,
+;;; since IR2 conversion may need to compile a forward reference. In
+;;; this case the slots aren't actually initialized until entry
+;;; analysis runs.
(defstruct (entry-info (:copier nil))
;; Does this function have a non-null closure environment?
(closure-p nil :type boolean)
;;; A VOP is a Virtual Operation. It represents an operation and the
;;; operands to the operation.
-(defstruct (vop (:constructor make-vop (block node info args results))
- (:copier nil))
+(def!struct (vop (:constructor make-vop (block node info args results))
+ (:copier nil))
;; VOP-INFO structure containing static info about the operation
(info nil :type (or vop-info null))
;; the IR2-BLOCK this VOP is in
;;; A TN-REF object contains information about a particular reference
;;; to a TN. The information in TN-REFs largely determines how TNs are
;;; packed.
-(defstruct (tn-ref (:constructor make-tn-ref (tn write-p))
- (:copier nil))
+(def!struct (tn-ref (:constructor make-tn-ref (tn write-p))
+ (:copier nil))
;; the TN referenced
(tn (missing-arg) :type tn)
;; Is this is a write reference? (as opposed to a read reference)
;;; the SC structure holds the storage base that storage is allocated
;;; in and information used to select locations within the SB
-(defstruct (sc (:copier nil))
+(def!struct (sc (:copier nil))
;; name, for printing and reference
(name nil :type symbol)
;; the number used to index SC cost vectors
\f
;;;; TNs
-(defstruct (tn (:include sset-element)
+(def!struct (tn (:include sset-element)
(:constructor make-random-tn)
(:constructor make-tn (number kind primitive-type sc))
(:copier nil))