본문 바로가기

CNUproject/코드 동일성 검사 도구

20_LLVM IR 최적화를 위해 패스 적용하기 오류

문제가 생겼다..

똑같은 코드에 저번에 사용했던 패스 그대로 적용했는데 (참고 :  https://blueee.tistory.com/14) 코드 내용이 늘어났다. 어떻게 이런 일이 일어날 수 있지?

 

사용한 python 코드

#!/usr/bin/env python

import numba as nb

@nb.jit(nopython=True)
def main():
    sum = 0

    for number in [31, 63, 62, 87, 14]:
        sum += number

    print("sum:", sum)

if __name__ == "__main__":
    main()

 

opt -passes='instcombine,dce,gvn,dse' -S pythonArray.ll -o testOptimized.ll

해당 패스를 적용하면 162줄까지 줄어들었었다. 하지만 지금 적용해보면 224줄이 나온다.

 

opt -passes='dce,gvn,dse' -S pythonArray.ll -o testOptimized.ll

또 과거에 instcombine을 제거하고 패스를 적용했을 때 177줄까지 줄어들었었다. 하지만 지금은 209줄이 나온다.

 


 

일단 원래 이번주에 시도해보려고 했던 패스를 살펴보자.

 

mem2reg: 메모리를 레지스터로 승격

이 파일은 메모리 참조를 레지스터 참조로 승격시킨다. 로드 및 저장만 사용하는 alloca 명령어를 장려한다.

 

adce: 공격적인 데드 코드 제거 

ADCE는 적극적으로 코드 제거를 시도한다. 이 패스는 DCE와 유사하지만 다르게 입증될 때까지 값이 죽은 것으로 가정한다.

 

adce의 경우 어디에 추가해도 코드의 길이가 달라지지 않는다.

mem2reg는 추가했을 때 194줄까지 줄어들었다.

 

혹시 또 달라질까봐 증거사진 첨부 ..


하여튼 의문이다. 왜 코드 양이 늘어났는지 모르겠다.. ㅜㅜ