본문 바로가기
LLVM

IR코드의 구성요소(Module, Function, Block, Instruction)

by ElectroPy 2021. 1. 26.

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

댓글