ir: 중간 표현을 정의한다
명령 12개와 종결자 4개. 함수 단위 기본 블록이고 임시값은 블록을 넘지 않아 phi 노드가 없다 -- 블록을 넘겨야 하는 값은 지역을 경유한다. 코드가 조금 더 생기지만 레지스터 할당기를 블록 단위로 유지해 준다. Ferro 타입은 여기서 사라진다. 구조체·슬라이스·옵셔널·에러 유니온이 전부 mem<N> 이고 필드는 lowering 이 계산한 바이트 오프셋이다. 모노모피제이션이 프론트엔드에서 끝나므로 IR 에 제네릭이라는 개념도 없다. 덩어리는 언제나 주소로 오간다. 크기 임계값이 없어서 ISA 마다 다른 구조체 전달 규칙을 통째로 피해간다. trap 은 이유와 줄 번호만 남기고 파일 이름 문자열은 유닛당 하나를 공유한다. IR.md 가 설명이고 ir.h/ir.c 가 그 형태다. 아직 아무도 만들지 않는다.
This commit is contained in:
+1
-1
@@ -34,7 +34,7 @@ ROOT = Path(__file__).resolve().parent.parent
|
||||
FIXTURES = ROOT / "fec" / "tests"
|
||||
WATCOM = ROOT / ".dosboxx" / "watcom"
|
||||
SOURCES = ("arena", "diag", "lexer", "ast", "parser", "types", "m7", "own",
|
||||
"check", "resolve", "driver")
|
||||
"check", "resolve", "ir", "driver")
|
||||
# Fixtures live here until there is a code generator to run them against.
|
||||
QUARANTINE = "pending-backend"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user