Maybe replace a module instance with its inlined body.
(vl-inline-mod-in-modinst sub x nf warnings) → (mv nf modinsts gateinsts assigns vardecls warnings)
Function:
(defun vl-inline-mod-in-modinst (sub x nf warnings) (declare (xargs :guard (and (and (vl-module-p sub) (vl-ok-to-inline-p sub)) (vl-modinst-p x) (vl-namefactory-p nf) (vl-warninglist-p warnings)))) (let ((__function__ 'vl-inline-mod-in-modinst)) (declare (ignorable __function__)) (b* (((vl-modinst x) x) ((vl-module sub) sub) ((unless (equal x.modname sub.name)) (mv nf (list x) nil nil nil (ok))) (- (cw "; -- inlining instance ~s0 of ~s1~%" x.instname x.modname)) ((unless (eq (vl-arguments-kind x.portargs) :vl-arguments-plain)) (mv nf (list x) nil nil nil (fatal :type :vl-inline-fail :msg "~a0: can't inline because args aren't resolved." :args (list x)))) (plainargs (vl-arguments-plain->args x.portargs)) ((unless (vl-paramargs-empty-p x.paramargs)) (mv nf (list x) nil nil nil (fatal :type :vl-inline-fail :msg "~a0: can't inline because of parameters." :args (list x)))) ((unless (same-lengthp sub.ports plainargs)) (mv nf (list x) nil nil nil (fatal :type :vl-inline-fail :msg "~a0: can't inline due to improper arity." :args (list x)))) (prefix (or x.instname "inst")) ((mv vardecls nf) (vl-namemangle-vardecls prefix sub.vardecls nf)) (vardecls (vl-vardecllist-reset-atts vardecls nil)) (vardecls (vl-relocate-vardecls (change-vl-location x.loc :line (max 1 (- (vl-location->line x.loc) 1)) :col 0) vardecls)) (old-names (vl-vardecllist->names sub.vardecls)) (new-names (vl-vardecllist->names vardecls)) (new-exprs (vl-make-idexpr-list new-names nil nil)) (sigma (pairlis$ old-names new-exprs)) ((with-fast sigma)) (modinsts (vl-modinstlist-subst sub.modinsts sigma)) (modinsts (vl-relocate-modinsts x.loc modinsts)) ((mv modinsts nf) (vl-namemangle-modinsts prefix modinsts nf)) (gateinsts (vl-gateinstlist-subst sub.gateinsts sigma)) (gateinsts (vl-relocate-gateinsts x.loc gateinsts)) ((mv gateinsts nf) (vl-namemangle-gateinsts prefix gateinsts nf)) (assigns (vl-assignlist-subst sub.assigns sigma)) (assigns (vl-relocate-assigns x.loc assigns)) (ports (vl-portlist-subst sub.ports sigma)) (renaming-alist (pairlis$ old-names new-names)) (portdecls (with-fast-alist renaming-alist (vl-inline-rename-portdecls sub.portdecls renaming-alist))) (scope (change-vl-module sub :portdecls portdecls)) ((mv okp warnings port-assigns) (vl-make-inlining-assigns ports plainargs scope x.loc warnings)) ((unless okp) (mv nf (list x) nil nil nil (fatal :type :vl-inline-fail :msg "~a0: problem with inlining port connections." :args (list x))))) (mv nf modinsts gateinsts (append port-assigns assigns) vardecls warnings))))
Theorem:
(defthm vl-namefactory-p-of-vl-inline-mod-in-modinst.nf (implies (and (force (if (vl-module-p sub) (vl-ok-to-inline-p sub) 'nil)) (force (vl-modinst-p x)) (force (vl-namefactory-p nf)) (force (vl-warninglist-p warnings))) (b* (((mv ?nf ?modinsts ?gateinsts ?assigns ?vardecls ?warnings) (vl-inline-mod-in-modinst sub x nf warnings))) (vl-namefactory-p nf))) :rule-classes :rewrite)
Theorem:
(defthm vl-modinstlist-p-of-vl-inline-mod-in-modinst.modinsts (implies (and (force (if (vl-module-p sub) (vl-ok-to-inline-p sub) 'nil)) (force (vl-modinst-p x)) (force (vl-namefactory-p nf)) (force (vl-warninglist-p warnings))) (b* (((mv ?nf ?modinsts ?gateinsts ?assigns ?vardecls ?warnings) (vl-inline-mod-in-modinst sub x nf warnings))) (vl-modinstlist-p modinsts))) :rule-classes :rewrite)
Theorem:
(defthm vl-gateinstlist-p-of-vl-inline-mod-in-modinst.gateinsts (implies (and (force (if (vl-module-p sub) (vl-ok-to-inline-p sub) 'nil)) (force (vl-modinst-p x)) (force (vl-namefactory-p nf)) (force (vl-warninglist-p warnings))) (b* (((mv ?nf ?modinsts ?gateinsts ?assigns ?vardecls ?warnings) (vl-inline-mod-in-modinst sub x nf warnings))) (vl-gateinstlist-p gateinsts))) :rule-classes :rewrite)
Theorem:
(defthm vl-assignlist-p-of-vl-inline-mod-in-modinst.assigns (implies (and (force (if (vl-module-p sub) (vl-ok-to-inline-p sub) 'nil)) (force (vl-modinst-p x)) (force (vl-namefactory-p nf)) (force (vl-warninglist-p warnings))) (b* (((mv ?nf ?modinsts ?gateinsts ?assigns ?vardecls ?warnings) (vl-inline-mod-in-modinst sub x nf warnings))) (vl-assignlist-p assigns))) :rule-classes :rewrite)
Theorem:
(defthm vl-vardecllist-p-of-vl-inline-mod-in-modinst.vardecls (implies (and (force (if (vl-module-p sub) (vl-ok-to-inline-p sub) 'nil)) (force (vl-modinst-p x)) (force (vl-namefactory-p nf)) (force (vl-warninglist-p warnings))) (b* (((mv ?nf ?modinsts ?gateinsts ?assigns ?vardecls ?warnings) (vl-inline-mod-in-modinst sub x nf warnings))) (vl-vardecllist-p vardecls))) :rule-classes :rewrite)
Theorem:
(defthm vl-warninglist-p-of-vl-inline-mod-in-modinst.warnings (b* (((mv ?nf ?modinsts ?gateinsts ?assigns ?vardecls ?warnings) (vl-inline-mod-in-modinst sub x nf warnings))) (vl-warninglist-p warnings)) :rule-classes :rewrite)
Theorem:
(defthm vl-inline-mod-in-modinst-mvtypes-1 (true-listp (mv-nth 1 (vl-inline-mod-in-modinst sub x nf warnings))) :rule-classes :type-prescription)
Theorem:
(defthm vl-inline-mod-in-modinst-mvtypes-2 (true-listp (mv-nth 2 (vl-inline-mod-in-modinst sub x nf warnings))) :rule-classes :type-prescription)
Theorem:
(defthm vl-inline-mod-in-modinst-mvtypes-3 (true-listp (mv-nth 3 (vl-inline-mod-in-modinst sub x nf warnings))) :rule-classes :type-prescription)
Theorem:
(defthm vl-inline-mod-in-modinst-mvtypes-4 (true-listp (mv-nth 4 (vl-inline-mod-in-modinst sub x nf warnings))) :rule-classes :type-prescription)