- (let* ((generator (lvar-use lvar))
- (block (node-block generator))
- (2block (block-info block)))
- ;; DX objects, living in the LVAR, are
- ;; alive in the environment, protected by
- ;; the CLEANUP. We also cannot move them
- ;; (because, in general, we cannot track
- ;; all references to them). Therefore,
- ;; everything, allocated deeper than a DX
- ;; object, should be kept alive until the
- ;; object is deallocated.
- (setq new-end (merge-uvl-live-sets
- new-end (ir2-block-end-stack 2block)))
- (setq new-end (merge-uvl-live-sets
- new-end (ir2-block-pushed 2block)))))))
+ (let ((uses (lvar-uses lvar)))
+ (dolist (generator (if (listp uses) uses (list uses)))
+ (let* ((block (node-block generator))
+ (2block (block-info block)))
+ ;; DX objects, living in the LVAR, are
+ ;; alive in the environment, protected
+ ;; by the CLEANUP. We also cannot move
+ ;; them (because, in general, we cannot
+ ;; track all references to
+ ;; them). Therefore, everything,
+ ;; allocated deeper than a DX object,
+ ;; should be kept alive until the
+ ;; object is deallocated.
+ (setq new-end (merge-uvl-live-sets
+ new-end (ir2-block-end-stack 2block)))
+ (setq new-end (merge-uvl-live-sets
+ new-end (ir2-block-pushed 2block)))))))))