Changeset 12876


Ignore:
Timestamp:
08/08/10 10:06:35 (13 years ago)
Author:
ehuelsmann
Message:

Move FINALIZE-CODE to jvm-instructions.lisp and make it
really finalize all code.

Location:
branches/generic-class-file/abcl/src/org/armedbear/lisp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/generic-class-file/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

    r12875 r12876  
    914914  (check-number-of-args form n t))
    915915
    916 
    917 (defun finalize-code ()
    918   (setf *code* (nreverse (coerce *code* 'vector))))
    919916
    920917
     
    11871184    (setf *code* (append *static-code* *code*))
    11881185    (emit 'return)
    1189     (finalize-code)
    1190     (setf *code* (resolve-instructions (expand-virtual-instructions *code*)))
     1186    (setf *code*
     1187          (finalize-code *code* (nconc (mapcar #'handler-from *handlers*)
     1188                                       (mapcar #'handler-to *handlers*)
     1189                                       (mapcar #'handler-code *handlers*)) nil))
     1190
    11911191    (setf (method-max-stack constructor)
    11921192          (analyze-stack *code* (mapcar #'handler-code *handlers*)))
     
    74867486
    74877487    ;;;  Move here
    7488     (finalize-code)
    7489     (optimize-code)
    7490 
    7491     (setf *code* (resolve-instructions (expand-virtual-instructions *code*)))
     7488    (setf *code* (finalize-code *code*
     7489                                (nconc (mapcar #'handler-from *handlers*)
     7490                                       (mapcar #'handler-to *handlers*)
     7491                                       (mapcar #'handler-code *handlers*)) t))
     7492
    74927493    (setf (method-max-stack execute-method)
    74937494          (analyze-stack *code* (mapcar #'handler-code *handlers*)))
  • branches/generic-class-file/abcl/src/org/armedbear/lisp/jvm-instructions.lisp

    r12875 r12876  
    820820
    821821
    822 (declaim (ftype (function (t) hash-table) hash-labels))
     822(declaim (ftype (function (t) label-target-instructions) hash-labels))
    823823(defun label-target-instructions (code)
    824824  (let ((ht (make-hash-table :test 'eq))
     
    909909(defvar *enable-optimization* t)
    910910
    911 (defknown optimize-code () t)
    912 (defun optimize-code ()
     911(defknown optimize-code (t t) t)
     912(defun optimize-code (code handler-labels)
    913913  (unless *enable-optimization*
    914914    (format t "optimizations are disabled~%"))
     
    916916    (when *compiler-debug*
    917917      (format t "----- before optimization -----~%")
    918       (print-code *code*))
     918      (print-code code))
    919919    (loop
    920       (let ((changed-p nil))
    921         (multiple-value-setq
    922             (*code* changed-p)
    923           (delete-unused-labels *code*
    924                                 (nconc
    925                                  (mapcar #'handler-from *handlers*)
    926                                  (mapcar #'handler-to *handlers*)
    927                                  (mapcar #'handler-code *handlers*))))
    928         (if changed-p
    929             (setf *code* (optimize-instruction-sequences *code*))
    930             (multiple-value-setq
    931                 (*code* changed-p)
    932               (optimize-instruction-sequences *code*)))
    933         (if changed-p
    934             (setf *code* (optimize-jumps *code*))
    935             (multiple-value-setq
    936                 (*code* changed-p)
    937               (optimize-jumps *code*)))
    938         (if changed-p
    939             (setf *code* (delete-unreachable-code *code*))
    940             (multiple-value-setq
    941                 (*code* changed-p)
    942               (delete-unreachable-code *code*)))
    943         (unless changed-p
    944           (return))))
    945     (unless (vectorp *code*)
    946       (setf *code* (coerce *code* 'vector)))
     920       (let ((changed-p nil))
     921         (multiple-value-setq
     922             (code changed-p)
     923           (delete-unused-labels code handler-labels))
     924         (if changed-p
     925             (setf code (optimize-instruction-sequences code))
     926             (multiple-value-setq
     927                 (code changed-p)
     928               (optimize-instruction-sequences code)))
     929         (if changed-p
     930             (setf code (optimize-jumps code))
     931             (multiple-value-setq
     932                 (code changed-p)
     933               (optimize-jumps code)))
     934         (if changed-p
     935             (setf code (delete-unreachable-code code))
     936             (multiple-value-setq
     937                 (code changed-p)
     938               (delete-unreachable-code code)))
     939         (unless changed-p
     940           (return))))
     941    (unless (vectorp code)
     942      (setf code (coerce code 'vector)))
    947943    (when *compiler-debug*
    948944      (sys::%format t "----- after optimization -----~%")
    949       (print-code *code*)))
    950   t)
     945      (print-code code)))
     946  code)
    951947
    952948
     
    998994      (values bytes labels))))
    999995
    1000 
     996(defun finalize-code (code handler-labels optimize)
     997  (setf code (coerce (nreverse code) 'vector))
     998  (when optimize
     999    (setf code (optimize-code code handler-labels)))
     1000  (resolve-instructions (expand-virtual-instructions code)))
    10011001
    10021002(provide '#:opcodes)
Note: See TracChangeset for help on using the changeset viewer.