Constant folding 계산을 직접 해서 상수로 쓴다

reduction in strength 연산자를 심플하게 바꾼다(곱셈, 나눗셈: “비싸다”)
비트 시프트 연산 애용하기 16*x → x<<4
곱셈 대신 덧셈으로 대체할수 있다면 대체하기

ni를 n*i로 하는게 아니라 n씩 더한다.
dead code elimination jetbrain rider에서 해주는 것이다
실행되지 않을 분기문 삭제
덮어씌워질 코드 삭제

common subexpression elimination(CSE) jetbrain rider에서 해주는 것이다
반복되는 접근 또는 연산 밖으로 빼내기

share common subexpressions -o1 옵션으로 돌리면 자동으로 해준다. 표현식 일부분 겹치는 것을 재사용하는 느낌 (한번 곱해놓고 더하기 빼기만 하는 식으로)

code motion
move calculations out of a loop 루프 내에서 최소의 연산만 한다.

위와 같은 최적화는 -o1 옵션에서 자동으로 해준다.
inlining
함수를 호출되는 곳에 전부 집어 넣는다


보면 pred를 통째로 func 안의 pred 자리에 전부 넣었다. 그 뒤에 최적화를 한다.
Example: Bubble Sort optimization
for (i = n-1; i>=1; i--){
for(j=1; j<=i;j++){
if(A[j] > A[j+1]){
//swap
temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;
}
}
}
translated pseudocode
