بهینه سازی حلقه
بهینه سازی با انجام دنباله ای از تبدیل‌های حلقه

درعمل فرایند بهینه‌سازی حلقه را می‌توان اعمال دنباله‌ای از تبدیل‌های حلقه روی بازنمایی میانی دانست که هریک دارای محکی برای سنجش درستی و به‌جابودن هستند. یک تبدیل (یا دنباله‌ای از تبدیل‌ها) برای اینکه بتواند تضمین کند که کد حاصلش، نتیجهٔ کد اولیه را تولید خواهد کرد، به صورت کلی باید دنبالهٔ تمام وابستگی‌هایی که در ابتدا در کد بوده را حفظ کند. علاوه بر آن بررسی مفید بودن یک تبدیل در این روش دشوار است چراکه ممکن است بکارگیری یک تبدیل نیازمند انجام چندین تبدیل دیگری باشد که خود آن‌ها سربار محاسباتی ایجاد کنند.
در ادامه تبدیل‌های متداول حلقه به صورت فهرست‌وار آمده‌اند.
شکافت یا توزیع - در این نوع تبدیل یک حلقه به چندین حلقهٔ کوچکتر که روی همان پیمایندهٔ اولیه پیمایش می‌کنند، تجزیه می‌شود. این تبدیل باعث افزایش محلیت ارجاع حافظه (locality of refrence) می‌شود.
ادغام یا ترکیب - ترکیب بدنهٔ دو حلقهٔ نزدیک به هم که به تعداد دفعه‌های یکسان تکرار می‌شوند (چه این تعداد تکرار در زمان کامپایل مشخص باشد یا نه) را باهم ادغام می‌کند. لازم است ذکر شود که این دو حلقه نباید به یکدیگر ارجاع داشته باشند.
مبادله یا جایگیری - این بهینه‌سازی در حلقه‌های تودرتو، حلقهٔ درونی را با حلقهٔ بیرونی عوض می‌کند. مبادله در آرایه‌های چندبعدی می‌تواند موجب افزایش محلیت ارجاع حافظه شود.
وارونگی - یک حلقهٔ while استاندارد را به یک حلقهٔ do/while که درون یک if هست تبدیل می‌کند و تعداد دفعه‌های jump را در زمان اجرای حلقه به ۲ بار کاهش می‌دهد. اگرچه این امر تعداد خط‌های کد را زیاد می‌کند اما درکل اجرا سریع‌تر می‌شود چراکه هر jump باعث حباب می‌شود. علاوه‌بر آن اگر حاصل شرط if اولیه در زمان کامپایل مشخص باشد، از if اولیه می‌شود صرف نظر کرد.
خارج کردن کد مستقل از حلقه- در این روش یک قطعه کد درون حلقه که هربار اجرایش نتیجه‌ای کاملاً یکسان و مستقل از پیمایشگر انجام می‌دهد، از حلقه بیرون می‌آید تا فقط یکبار اجرا شود. اهمیت این تبدیل بیشتر در محاسبهٔ آدرس در حلقه‌هایی که با آرایه سروکار دارند آشکار می‌شود و کارایی را بسیار بالا می‌برد. این تکنیک را باید همراه روش تبدیل استفاده کرد چراکه استخراج هر کدی از کل حلقه همواره کار مطمئنی نیست.
موازی‌سازی - این تبدیل حالت خاصی از موازی‌سازی خودکار است که روی حلقه‌ها انجام می‌شود و ساختار آن‌ها را به صورتی عوض می‌کند که روی پردازنده‌های چند هسته‌ای کاراتر اجرا شود. این امر را هم به صورت خوکار(automatic parallelization) و هم به صورت دستی (درج دستورها موازی مثل OpenMP) می‌توان انجام داد.
بازگشت- یک بهینه‌سازی ظریف که ترتیب پیمایش حلقه را برعکس می‌کند و متغیر پیمایش درجهت عکس پیمایش را انجام می‌دهد. این تکنیک می‌تواند موجب حذف وابستگی‌ها شود و امکان انجام بهینه‌سازی‌های دیگر را فراهم کند. در ساختارهایی از حلقه‌هایی در سطح اسمبلی استفاده شود که فقط دریک جهت پیمایش انجام می‌دهد (مثلاً decrement-(jump-if-not-zero)
زمانبندی - یک حلقه را به چندین قسمت تجزیه‌می‌کند تا به صورت همزمان روی پردازه‌های چندهسته‌ای اجرا شود.
کج‌پیمایی  - هنگامی که در حلقه‌های تودرتو، هر مرحله از حلقهٔ داخلی وابسته به مراحل قبلیش است، با استفاده از این تبدیل ترتیب پیمایش را عوض می‌کنیم تا وابستگی مراحل فقط در حلقهٔ بیرونی باقی بماند.
خط‌لولهٔ نرم‌افزاری - یک اجرای خارج از ترتیب دستورات حلقه است که تاخیرات بخش عملگر پردازه را کم می‌کند.
تقسیم یا لایه برداری - هدف از این تبدیل ساده‌سازی و حذف وابستگی‌های یک حلقه است. در این تکنیک یک حلقه به چندین حلقه با بدنهٔ یکسان با حلقهٔ اولیه شکسته می‌شود اما هریک محدوده پیمایش متفاوتی دارند. یک کاربرد این تبدیل برای حلقه‌ای است که چند پیمای اولش دشوار و مشکل است. بعد از لایه‌برداری بخش دشوار به صورت جدا قبل از حلقهٔ اولیه اجرا می‌شود.
کاشی‌کاری یا بلوک‌بندی - این تبدیل یک حلقه را به شکلی تغییر می‌دهد که روی بلوک‌هایی از داده پیمایش کند بطوریکه هر بلوک در حافظهٔ کش جا بشود.
بردار سازی - تلاش می‌کند تا حداکثر تعداد اجراهای یک حلقه‌را روی یک سامانهٔ SIMD اجرا کند.
بازکردن - این تبدیل بدنهٔ حلقه‌را چندین بار کپی می‌کند تا تعداد بارهایی که شرط حلقه و پرش انجام می‌شود کاهش یابد چراکه این دستورها به علت تغضیف پایپلاین، تأثیر شگرفی در کاهش سرعت اجرا دارند. اگرچه بازکردن کامل یک حلقه تقریباً تمام این هزینه‌های اضافی را ازبین می‌برد اما منوط به معلوم بودن تعداد دفعه‌های اجرای حلقه در زمان کامپایل است. (به جز در حالت Just-in-time compilation). درکل تبدیل بازکردن زمانی مفید است که محاسبه چندین بارهٔ متغیر پیمایش هزینهٔ بیشتری از جلوبردن آن در حلقهٔ اولیه نداشته باشد.
شرط‌زدایی - یک دستور شرطی درون حلقه‌را به بیرون منتقل می‌کند. این امر با کپی کردن بدنهٔ حلقه و قراردادن نسخه‌های آن هم در if و هم در else انجام می‌شود.
بخشبندی - این تبدیل برای پردازنده‌های برداری معرفی شد. بخشبندی حلقه نوعی تبدیل است که قابلیت رمزی کردن (SIMD (single instruction multiple data را ممکن می‌سازد و کارایی حافظه را افزایش می‌دهد. این امر بدین صورت محقق می‌شود که هر عملگر بردار حداکثر به اندازهٔ طول بردار بیشینه انجام می‌شود.