snu-sf-class / swpp202401

Principles and Practices of Software Development Main Repository
14 stars 4 forks source link

[Project] .c to .ll file conversion #66

Open summerBreeze2007 opened 6 months ago

summerBreeze2007 commented 6 months ago

안녕하세요, ./c-to-ll.sh 스크립트가 안돼서 benchmark directory에 .ll 파일들을 넣어주신 것 잘 알고 있습니다. 패스를 짜려면 LLVM IR 문법에 익숙해야 되던데 benchmark directory에 있는 .c 랑 .ll 파일들이 아직 LLVM IR 문법이 안 익숙한 제가 이해하기에는 복잡했고 제가 직접 .c 파일을 만들며 실험을 할 수 없어서 배우는데 있어서 많은 어려움이 있었습니다. 그래서 제가 직접 작성한 간단한 .c 파일들을 $ clang -emit-llvm -S <.c file> -o <.ll file> 을 이용해서 .ll 파일로 변환하면서 LLVM IR 문법을 익혔습니다. 하지만 나중에 benchmark directory 에 있는 .c 파일들을 $ clang -emit-llvm -S <.c file> -o <.ll file> 을 사용해서 변화해보니 조교님께서 올려주신 .ll 파일이랑 다른 부분들이 존재하더라고요. 예를 들어, malloc을 부를 때 $ clang -emit-llvm -S <.c file> -o <.ll file>로 변환된 .ll 파일은 ... = call noalias ptr @malloc(...) 바로 다음 instruction에 주소를 다른 임시 포인터에 store를 하던데 조교님이 올려주신 .ll 파일에는 그렇지 않더라고요. C++ 코드가 LLVM IR로 변환될 수 있는 방법이 여럿 있을텐데 어떤 방법이 올바른 방법인지 알기가 어려워 패스를 구현하는데 어려움을 겪고 있습니다. 나중에 컴파일러 성능을 측정하실 때 아마 ./c-to-ll.sh를 사용하실 것 같은데, 혹시 스크립트는 언제쯤 작동이 될까요? 패스를 올바르고 효율적으로 구현하기 위해서 저 스크립트가 있으면 많은 도움을 얻을 수 있을 것 같습니다.

strikef commented 6 months ago

31 이슈와 동일 이슈로 판단됩니다.

당시에 단시간에 고치기 어려운 이슈여서 일단은 벤치마크에 한해 IR 파일을 올려두고 버그픽스 중이었는데, 현재 실험중인 해결책이 있어 조만간 공지드릴 수 있도록 하겠습니다.

strikef commented 6 months ago

68 을 참조해주세요.

summerBreeze2007 commented 6 months ago

감사합니다!