snu-sf-class / swpp202401

Principles and Practices of Software Development Main Repository
14 stars 4 forks source link

Backend crashes at alloca #106

Open wjshim2003 opened 6 months ago

wjshim2003 commented 6 months ago

matmul4.ll에서 백엔드 크래시가 일어나서 제보합니다.

swpp-compiler crashed: exception thrown from backend
alloca elimination error: alloca is not static
[  %c_mask.none = alloca [16 x i64], align 16]

matmul4_error.txt

strikef commented 6 months ago

컴파일해본 결과 alloca 가 entry가 아닌 basic block에 생성되었습니다.

컴파일러 백엔드는 entry block 외의 장소에서 alloca가 등장하는 경우를 처리하지 못합니다. Non-static alloca는 LLVM IR 문법상으로 허용되긴 하나, local 변수들의 주소 할당 최적화가 어려워지기 때문에 일반적으로 사용되지 않습니다. 동일한 이유로 현재 백엔드에서도 지원하지 않으며, 앞으로도 지원할 계획이 없습니다.

cr0sh commented 6 months ago

조별로 자체적으로 AllocaEliminatePass 등을 패치해서 돌아가게 하는 것은 허용되나요? 이번 Sprint의 주제였기 때문에 필요한 상황입니다.

strikef commented 6 months ago

백엔드 수정은 허용되지 않습니다. 다만 sp를 조작하는 백엔드 내부 함수가 있어 이걸 사용하시는 건 가능합니다.