최근 포스트

LLVM Optimization (6)

2 분 소요

실습 5 [실습 5]에서는 IR 레벨에서 명령어의 위치를 변경하고 메모리 명령어의 종속성 관계에 대해 파악한다. 일반적으로 산술 연산 명령어와는 다르게 메모리 명령어(load/store)의 종속 관계는 컴파일러 입장에서 알기 어렵다. 예를 들어 X주소에서 값을 읽는 명령어 load...

LLVM Optimization (5)

4 분 소요

실습 4 [실습 4]에서는 [실습 3]을 바탕으로 전체 명령어 중 특정 종류의 명령어에 접근하여 새로운 명령어를 생성하고, 기존의 명령어를 삭제하고, 새로운 명령어로 기존의 명령어를 대체하는 작업을 수행한다. 명령어 생성 LLVM에서는 명령어를 생성하기 위해 llvm::IRBui...

LLVM Optimization (4)

4 분 소요

실습 3 [실습 3]에서는 프로그램 내 특정 명령어의 수를 세어 출력하는 간단한 정적 프로파일러를 생성한다. LLVM 6.0.1 기준으로 LLVM IR에는 총 64개의 명령어 Opcode가 있으며 자주 사용되는 명령어는 아래와 같다. BinaryOperator: add, su...

LLVM Optimization (3)

2 분 소요

실습 2 [실습 2]에서는 LLVM의 기본적인 module 구조를 이해하고, IR 내의 명렬어들을 C++ iterator를 사용하여 순회 및 출력을 한다. llvm::Module -> llvm::Function -> llvm::BasicBlock -> llvm...

스타트와 링크

1 분 소요

문제: 스타트와 링크 (백준 14889번) 구조 분석 해당 문제의 경우 처음에 배열 또는 벡터로 문제를 풀어야 하는지 고민했다. 백터로 능력치를 저장하고 이를 sort하고 다시 나누는 것은 그러나 항상 optimal한 값을 출력할 것 같지 않았다. 그래서 고민하다가 힌트를 ...