Ignore:
Timestamp:
08/07/10 20:43:45 (13 years ago)
Author:
ehuelsmann
Message:

Rename OPTIMIZE-3 to OPTIMIZE-INSTRUCTION-SEQUENCES
and optimize more sequences.

File:
1 edited

Legend:

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

    r12872 r12874  
    919919
    920920
    921 ;; CLEAR-VALUES CLEAR-VALUES => CLEAR-VALUES
    922 ;; GETSTATIC POP => nothing
    923 (defun optimize-3 ()
    924   (let* ((code (coerce *code* 'vector))
     921(defun optimize-instruction-sequences (code)
     922  (let* ((code (coerce code 'vector))
    925923         (changed nil))
    926924    (dotimes (i (1- (length code)))
     
    941939        (case this-opcode
    942940          (205 ; CLEAR-VALUES
    943            (when (eql next-opcode 205) ; CLEAR-VALUES
     941           (when (eql next-opcode 205)       ; CLEAR-VALUES
    944942             (setf (aref code i) nil)
    945943             (setf changed t)))
    946944          (178 ; GETSTATIC
    947            (when (and (eql next-opcode 87) ; POP
     945           (when (and (eql next-opcode 87)   ; POP
    948946                      (not labels-skipped-p))
    949947             (setf (aref code i) nil)
    950948             (setf (aref code (1+ i)) nil)
    951949             (setf changed t)))
    952           (167 ; GOTO
    953            (when (and (eql next-opcode 202)  ; LABEL
     950          (176 ; ARETURN
     951           (when (eql next-opcode 176)       ; ARETURN
     952             (setf (aref code i) nil)
     953             (setf changed t)))
     954          ((200 167)                         ; GOTO GOTO_W
     955           (when (and (or (eql next-opcode 202)  ; LABEL
     956                          (eql next-opcode 200)  ; GOTO_W
     957                          (eql next-opcode 167)) ; GOTO
    954958                      (eq (car (instruction-args this-instruction))
    955959                          (car (instruction-args next-instruction))))
    956960             (setf (aref code i) nil)
    957961             (setf changed t))))))
    958     (when changed
    959       (setf *code* (delete nil code))
    960       t)))
     962    (values (if changed (delete nil code) code)
     963            changed)))
    961964
    962965(defvar *enable-optimization* t)
     
    980983                                 (mapcar #'handler-code *handlers*))))
    981984        (if changed-p
     985            (setf *code* (optimize-instruction-sequences *code*))
     986            (multiple-value-setq
     987                (*code* changed-p)
     988              (optimize-instruction-sequences *code*)))
     989        (if changed-p
    982990            (setf *code* (optimize-jumps *code*))
    983991            (multiple-value-setq
    984992                (*code* changed-p)
    985993              (optimize-jumps *code*)))
    986         (setf changed-p (or (optimize-3) changed-p))
    987994        (if changed-p
    988995            (setf *code* (delete-unreachable-code *code*))
Note: See TracChangeset for help on using the changeset viewer.