;; the assembler label that points to the beginning of the code for
;; this block, or NIL when we haven't assigned a label yet
(%label nil)
+ ;; the assembler label that points to the trampoline for this block,
+ ;; or NIL if unassigned yet. Only meaningful for local call targets.
+ (%trampoline-label nil)
+ ;; T if the preceding block assumes it can drop thru to %label
+ (dropped-thru-to nil)
;; list of LOCATION-INFO structures describing all the interesting
;; (to the debugger) locations in this block
(locations nil :type list))
;; a function type specifier representing the arguments and results
;; of this function
(type 'function :type (or list (member function)))
- ;; xref information for the XEP
- (xref nil :type (or null simple-vector)))
+ ;; docstring and/or xref information for the XEP
+ (info nil :type (or null simple-vector string (cons string simple-vector))))
;;; An IR2-PHYSENV is used to annotate non-LET LAMBDAs with their
;;; passing locations. It is stored in the PHYSENV-INFO.
;;
;; :STRANGE
;; A segment of a "strange loop" in a non-reducible flow graph.
- (kind (required-argument) :type (member :outer :natural :strange))
+ (kind (missing-arg) :type (member :outer :natural :strange))
;; The first and last blocks in the loop. There may be more than one tail,
;; since there may be multiple back branches to the same head.
(head nil :type (or cblock null))
(depth 0 :type fixnum)
;; The head of the list of blocks directly within this loop. We must recurse
;; on INFERIORS to find all the blocks.
- (blocks nil :type (or null cblock)))
+ (blocks nil :type (or null cblock))
+ ;; Backend saves the first emitted block of each loop here.
+ (info nil))
(defprinter (cloop :conc-name loop-)
kind
;; conditional that yields its result as a control transfer. The
;; emit function takes two info arguments: the target label and a
;; boolean flag indicating whether to negate the sense of the test.
+ ;;
+ ;; If RESULT-TYPES is a cons whose car is :CONDITIONAL, then this is
+ ;; a flag-setting VOP. The rest is a list of condition descriptors to
+ ;; be interpreted by the BRANCH-IF VOP (see $ARCH/pred.lisp).
(arg-types nil :type list)
- (result-types nil :type (or list (member :conditional)))
+ (result-types nil :type (or list (member :conditional) (cons (eql :conditional))))
;; the primitive type restriction applied to each extra argument or
;; result following the fixed operands. If NIL, no extra
;; args/results are allowed. Otherwise, either * or a (:OR ...) list
;; :SAVE-ONCE
;; A TN used for saving a :NORMAL TN across function calls. The
;; lifetime information slots are unitialized: get the original
- ;; TN our of the SAVE-TN slot and use it for conflicts. SAVE-ONCE
+ ;; TN out of the SAVE-TN slot and use it for conflicts. SAVE-ONCE
;; is like :SAVE, except that it is only save once at the single
;; writer of the original TN.
;;
;;; The GLOBAL-CONFLICTS structure represents the conflicts for global
;;; TNs. Each global TN has a list of these structures, one for each
-;;; block that it is live in. In addition to repsenting the result of
+;;; block that it is live in. In addition to representing the result of
;;; lifetime analysis, the global conflicts structure is used during
;;; lifetime analysis to represent the set of TNs live at the start of
;;; the IR2 block.