最近、SBCL ユーザー マニュアルを読んでいて、タイトルの質問について疑問に思い始めました。明らかに、一部の Lisp、たとえば clojure は、コードを簡単に並列化できるように、すべての副作用を禁止しています。Common Lisp では副作用が許容されているため、特定の関数が「ダーティ」または「クリーン」であるという事実がコンパイルに影響するかどうか疑問に思っていました。
たとえば、CMUCL コンパイラ マニュアルlet の最適化では、多くの場合、新しい変数をバインドするために「let」を使用する方が、「setq」で変更するよりも効率的であることが示されています。関数呼び出しに対して同様のことが行われているかどうかを尋ねていると思います。
sbcl マニュアルの関連セクションを読み、stackoverflow に関する質問に答えましたが、これに対する答えが見つかりませんでした。