;; SC and OFFSET are already filled in.
;;
;; CONSTANT-TNs are non-packed TNs that represent constants.
- ;; :CONSTANT TNs may eventually be converted to :CACHED-CONSTANT
- ;; normal TNs.
- ;;
- ;; FIXME: What is :CACHED-CONSTANT?
(normal-tns nil :type (or tn null))
(restricted-tns nil :type (or tn null))
(wired-tns nil :type (or tn null))
(arguments nil :type list)
;; a function type specifier representing the arguments and results
;; of this function
- (type 'function :type (or list (member function))))
+ (type 'function :type (or list (member function)))
+ ;; 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