loop collapsing) – zastępowanie kilku zagnieżdżonych pętli jedną pętlą. Zastępowanie rekursji ogonowej przez iterację Eliminacja identycznych argumentów funkcji – jeśli pewne argumenty funkcji są we wszystkich jej wywołaniach takie same, kompilator może zrezygnować z ich bezpośredniego przekazywania; np. jeśli te argumenty są stałe, zostaną wstawione wprost w treści funkcji. Eliminacja nieosiągalnego kodu (ang. dead code elimination) – usuwanie z wyjścia nieosiągalnych fragmentów programu; ma na celu zmniejszenie rozmiaru kodu wynikowego. Zmiana kolejności bloków podstawowych w celu zmniejszenia liczby skoków. Łączenie bloków podstawowych Eliminacja zbędnych instrukcji warunkowych

Przykłady optymalizacji z drugiej grupy:

Zmniejszanie kosztu operacji – wybór szybszych operacji arytmetyczno-logicznych, np.: mnożenie przez stałą zastępuje się dodawaniem i przesunięciami bitowymi, dzielenie przez potęgi dwójki również zastępują przesunięcia bitowe, wyliczanie modulo potęga dwójki zastępuje iloczyn bitowy, potęgowanie ze stałym wykładnikiem całkowitym można zastąpić ciągiem mnożeń i dodawań, dzielenie przez stałą można zastąpić mnożeniem przez odwrotność (również dotyczy to działania na liczbach całkowitych), w przypadku pętli, mnożenia zależne od numeru iteracji zastępowane są przez dodawanie. Optymalizacja przez