Add to Sum이나 Function Inlining을 구현하다 보면, Register Pressure에 따라 최적화를 해야 할지 결정하는 편이 좋아 보입니다. 여기서 register pressure는 한 프로그램의 특정 시점에서 관리하고 있는 변수 개수의 최댓값을 의미합니다.
그런데 Register Pressure를 IR 레벨에서 계산하는 것이 생각보다 매우 까다로운 것 같습니다. (Interference graph를 만들고, greedy coloring을 수행.) 이를 따로 Analysis Pass로 구현하여 사용하는 것은 어떨까요?
만약 괜찮으면 이번 Sprint에 작업해보겠습니다.
한다면 실제 백엔드에서 하고 있는 것처럼 그래프 만들어서 분석하지는 않고, 약간 부정확하더라도 사용되는 instruction 각각에 대한 dependency를 고려해서 휴리스틱으로 계산하는 식으로 하려 합니다.
예시
unsigned getAnalysis(Function F)
input: Function F
output: register pressure calculated with heuristics
착안점
Add to Sum이나 Function Inlining을 구현하다 보면,
Register Pressure
에 따라 최적화를 해야 할지 결정하는 편이 좋아 보입니다. 여기서 register pressure는 한 프로그램의 특정 시점에서 관리하고 있는 변수 개수의 최댓값을 의미합니다.그런데 Register Pressure를 IR 레벨에서 계산하는 것이 생각보다 매우 까다로운 것 같습니다. (Interference graph를 만들고, greedy coloring을 수행.) 이를 따로 Analysis Pass로 구현하여 사용하는 것은 어떨까요?
만약 괜찮으면 이번 Sprint에 작업해보겠습니다. 한다면 실제 백엔드에서 하고 있는 것처럼 그래프 만들어서 분석하지는 않고, 약간 부정확하더라도 사용되는 instruction 각각에 대한 dependency를 고려해서 휴리스틱으로 계산하는 식으로 하려 합니다.
예시 unsigned getAnalysis(Function F) input: Function F output: register pressure calculated with heuristics