실행 시간(run time) 중의 계산을 줄이는 것이 목적이다. 이 최적화는 '미리 컴파일 시간에 계산(precomputaion in compile time)' 할 수 있거나, '미리 계산된 값을 재사용(reuse a previously computated value)' 할 수 있는 상황에서 적용된다.
Constant propagation
변수가 값을 할당 받아서, 다시 새로운 값으로 할당 받기 전까지, 그 변수는 일종의 constant 라고 볼 수 있다. 컴파일러는 이를 감지해서 최적화를 수행하게 된다.
PI = 3.14159;
...
area = 2 * PI * radius;
위와 같은 부분에서, PI 의 값이 중간에 변경되지 않는다면, 위의 코드는
PI = 3.14159;
...
area = 2 * 3.14159 * radius;
와 같이 바뀔 수 있다.
Constant folding
연산에서 두개 이상의 constant 들은, 미리 계산되어 하나의 constant 값으로 바꿀 수 있다. 위의 예에 적용하자면
PI = 3.14159;
...
area = 6.28318 * radius;
가 된다.
컴파일러는 constant propagation 과 constant folding 을 반복하여 수행한다. 각각 서로의 가능성을 만들어 줄 수 있으므로, 더이상 진행 할 수 없을 때까지 진행한다.
Copy propagation
Common subexpression elimination
a = x + y;
b = x + y;
temp = x + y;
a = temp;
b = temp;
Partial redundancy analysis
Removing loop invariant code