https://blog.naver.com/junwha0511/222190349558
앞선 글에서, Clang이 C++을 IR코드를 번역하면 여러개의 LLVM Pass가 IR코드에 추가적인 부분을 적용한다고 설명했었다.
LLVM Pass를 작성하기 위해서는, 먼저 IR코드의 구조를 파악해야 한다.
IR 코드의 구성요소는 Module, Function, Block, Instruction, 네가지로 구성된다.
위 그림에서 보이는 것과 같이 프로그램은 여러 모듈(Module)로 구성되어 있고, 각 모듈 내부에는 여러 함수(Function)가 있으며, 각 함수 내부에는 여러 블록(Block)이 있고, 각 블록의 내부에는 여러 명령(Instruction)이 존재한다.
1. 모듈(Module)
모듈은 한 파일의 모든 정보를 IR 코드를 담고 있는 단위이다. C/C++의 각 소스파일과 대응된다.
2. 함수(Function)
함수는 C/C++에서의 함수와 같은 단위이다. 모든 함수는 IR Code에서 Function으로 나타난다.
함수의 이름을 얻거나, 동작에 관여하는 작업을 할 수 있다.
3. 블록(Block)
블록은 명령의 집합이다. if, try-catch, for 등 C/C++에서 중괄호로 표현된 함수 내의 블록들과 대응된다.
4. 명령(Instruction)
명령은 대입, 비교, 호출, 리턴 등 모든 명령이 포함된 개념이다.
각각 IR로 표현하면 StoreInst, CmpInst, CallInst, ReturnInst이다.
Instruction을 중간에 추가하거나 변경하는 등의 작업을 진행할 수 있다.
'LLVM' 카테고리의 다른 글
LLVM 컴파일러는 무엇일까? (0) | 2021.01.26 |
---|---|
LLVM 시작 (0) | 2021.01.26 |
댓글