snu-sf / crellvm-tests

0 stars 0 forks source link

Add python compile code with no debug info #70

Closed aqjune closed 8 years ago

aqjune commented 8 years ago

요약

디버깅 정보가 없는 파이썬 코드를 생성했습니다. -O0 옵션을 주어서 컴파일한 코드입니다. programs_new/Python-new-nodbg 에 저장했습니다.

이전에 윤승이형이 만드신 .bc.ll 파일은 228개였는데, 제가 만든 .bc.ll 파일은 227개입니다. 개수가 다른 이유를 확인해 본 결과, 윤승이형의 것엔 _hashopenssl.bc.ll 과 _ssl.bc.ll 파일이 있었는데 제가 만든 것에는 _bc2module.bc.ll 파일이 존재했기 때문입니다. 일단은 위 3개 파일을 모두 사용하는 것으로 해서 총 229개의 파일을 모아 두었습니다. (그래서 _hashopenssl.bc.ll, _ssl.bc.ll 에는 디버깅 정보가 존재할 수 있습니다)

Vectorization 문제가 있는가 해서 lowerswitch를 한 다음 main.native에 생성된 .bc 파일들을 주고 돌려 보았고, 문제가 없음을 확인했습니다. (ceval.bc에서 Fatal error: exception Failure("BlockAddress isnt Constant") 라는 에러가 발생했는데, 이것은 원래 ceval.bc에서도 발생했었다고 @kim-yoonseung 님께서 말씀하셨습니다)

전체 소스 용량이 52MB에서 21MB로 줄어든 것을 확인할 수 있었습니다.

생성에 사용한 방법

Makefile 에서 OPT 컴파일 옵션에 -save-temps 를 추가해서 컴파일 도중에 .bc 파일들을 생성하도록 했습니다. 자세한 내용은 BENCHMARK.md (및 본문 아래)에 적어 두었습니다. Python-3.4.1 폴더에서 find . | grep "\.bc$" | grep -v "\.tmp\.bc$" 명령어를 써서, 만들어진 .bc파일들 중 .tmp.bc로 끝나는 파일들을 제외한 것을 모두 모았습니다.

(컴파일을 하면 getbuildinfo.tmp.bc 와 getbuildinfo.bc 와 같이, 두 버젼의 .bc 파일이 나옵니다. 그런데 이 두 파일들은 서로 내용이 동일하기 때문에 .tmp.bc파일들은 무시해도 괜찮은 것을 확인했습니다. 두 파일이 다른 케이스가 딱 하나 있었는데(getbuildinfo.bc/getbuildinfo.tmp.bc), 디스어셈블해서 확인해 본 결과 어떤 시간을 나타내는 string literal 내용 하나만이 서로 달랐던 것 같습니다.)

1. Download python 3.4.1 from https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz

2. run : `cd Python-3.4.1`

3. run : `CC=clang CXX=clang++ ./configure`

4. Download llvm-3.7.0, clang from http://llvm.org/pre-releases/3.7.0, and compile.

Lets assume that you have installed llvm and clang into `/home/juneyoung.lee/llvm-install-3.7.0/`

5. vim Makefile
Modify line 71 to `OPT= -DNDEBUG -fwrapv --save-temps -O0 -Wall -Wstrict-prototypes`

6. Run : `PATH=/home/juneyoung.lee/llvm-install-3.7.0/bin:$PATH make`

7. Run :
cd Python-3.4.1
mkdir ../Python-3.4.1-llfiles
mkdir ../Python-3.4.1-bcfiles
for i in `find . -name "*.bc" | grep -v "tmp\.bc$"` ; do
  echo $i ;
  cp -i ${i} ../Python-3.4.1-bcfiles/`basename ${i}`
  ~/llvm-prototypes/llvm-install-3.7.0/bin/llvm-dis ${i} -o ../Python-3.4.1-llfiles/`basename ${i}`.ll
done
aqjune commented 8 years ago

관련된 이슈 : #38, #18, #23 입니다..!

aqjune commented 8 years ago

수정되는 파일이 많아서 웹에서 잘 안 열리는 것 같네요. 일단은 본문에 적은 내용이 전체 변경사항의 요약입니다.

alxest commented 8 years ago

수정되는 파일이 많아서 직접 확인은 못하지만, 묘사대로라면 전 머지하는게 좋을 듯 하네요.

alxest commented 8 years ago
Vectorization 문제가 있는가 해서 lowerswitch를 한 다음 main.native에 생성된 .bc 파일들을 주고 돌려 보았고, 문제가 없음을 확인했습니다.
(ceval.bc에서 Fatal error: exception Failure("BlockAddress isnt Constant") 

이 문장이 약간 혼동의 여지가 있어보이는데, 이 PR에서 새로 만든 .bc 파일들을 opt 돌려서 나온 트리플들 검산해보니 저런 에러가 떴다는 의미인가요? 그렇다면 opt 돌릴 때 인자는 어떻게 들어간건가요?

aqjune commented 8 years ago

아하, 제가 새로 만든 파이썬 .ll 파일들이 vellvm에서 잘 읽히는지를 확인하고 싶었습니다.

그래서 각 파일들에 대해서 main.native a.bc a.bc empty.json 와 같이 해서 실행해 보았고, ceval.bc를 제외한 모든 파일들이 성공적으로 검산되는 것을 확인했다는 뜻이었습니다.

alxest commented 8 years ago

아아아, 이해했습니다.

alxest commented 8 years ago

머지해도 문제 없을 듯 합니다. 머지할게요