Introduction to LLVM (3)

12. Static Single Assignment (SSA) Form 어디서 어떤 변수가 선언/사용되고 있는지 추척하는 것이 최적화의 주된 질문 중 하나. 위와 같은 상황에서는 if를 전후로 x의 역할이 바뀐다. Line 1의 x와 Line 7의 x는 전혀 연관이 없다. 이런 경우에는 두 변수를 구분해줘야 LLVM이 변수의 선언/사용을 추적하는 게 더 쉽지 않을까? 극단적인 상황을 가정해보자. 하나의 int 변수로 서로 […]

Introduction to LLVM (2)

6. LLVM Compiler System For Compiler Developer, 컴파일러를 만들기 위한 모듈화된, 재사용 가능한 컴포넌트들을 제공 -> 컴파일러 제작 시간, 비용 등을 절감 Intermediate Representation(IR)이 매우 잘 정의되어 있음. 깔끔한 구조, 고품질의 컴포넌트가 풍부. C, C++, Objective-C, Swift 등의 프로덕션 레벨 컴파일러의 기반. LLVM JIT, OpenMP RT, AMD OpenCL 등도 LLVM 기반. LLVM Debugger도 굉장히 좋음. […]

Introduction to LLVM (1)

이번 학기에 고급 컴파일러 설계를 수강했습니다. 물론, 대학원 수업이기 때문에 형식적으로 “고급”이 붙었을 뿐이라 정말 완벽하게 고급진 내용은 아니였지만 LLVM의 구조, 철학, 사용하고 있는 이론적 배경 등을 배우는 수업이였기에 LLVM 소개글 정도로 포스팅의 목적을 정했어요. 수업에서 배운 내용을, 그리고 교수님이 내주셨던 과제와 개인이 제안해서 진행했던 과제들을 수행하면서 겪었던 시행착오들을 정리해 봅니다. 대부분의 내용은 Bernd Burgstaller […]

LLVM Stable Build with Docker

LLVM을 미리 빌드해놓은 공식 도커 이미지를 찾지 못했다. 직접 빌드 하려고 찾아보니, LLVM 홈페이지에 보면 도커를 이용해 Stable 버전을 빌드 할 수 있는 다음 코드를 발견할 수 있었다. 실제로 실행해보면 공식 문서와는 –d 라는 파라미터가 없다고 불평하니 -d 로 바꿔주자. (위 스크립트에는 이미 반영됨) 사족으로 staging tag도 stable build에는 어울리지 않으니 이 부분도 변경했다. 또한, 빌드 중간에 […]