문득 떠오르는 궁금증에 글을 올려봅니다.
1. 한 파일에 3개의 함수(함수1, 함수2, 함수3)가 있다면
all_lowering_passes
all_ipa_passes
all_passes
과 같은 main pass(??) 에 대하여 각 함수별로 수행되는 것을 확인하였는데(아래처럼)
함수 1 의 all_lowering_passes
함수 2 의 all_lowering_passes
함수 3 의 all_lowering_passes
함수 1 의 all_ipa_passes
함수 2 의 all_ipa_passes
함수 3 의 all_ipa_passes
함수 1 의 all_passes
함수 2 의 all_passes
함수 3 의 all_passes
의문이 드는 점은 tree or rtl dump 를 하게되면 생성되는 각 출력 파일들이 몇번째 함수의 optimization을 수행하고 난 후의 dump 인지 궁금하네요. 마지막 함수(예에선 함수 3)가 호출된 후라고 예상하였는데 그렇지 않은듯한 결과가....--.
2. 생성된 RTL 은 pass_final(rest_of_handle_final)에서 recog()함수의 recognition 과정(생성된 RTL을 define_insn등에서의 RTL과 match 하는 과정)을 통해 asm code로 emission 됩니다.
recog()함수에서 predicate와 condition(define_insn 내의) 을 체크하는 부분을 확인하였고 constraint에 대한 체크는 없는 것을 확인하였습니다.(제가 실수를 하지 않았다면요)
그래서 constraint 의 점검은 register allocation 시 할 것으로 예상했는데
그렇다면 이미 reg alloc 에서 constraint 점검을 끝내놓은 상황에서 코드 흐름상 나중에 있는 recog()에서 굳이 predicate을 체크해줄 필요가 있을까 입니다.
predicate 보다 constraint 가 더 restrictive 하다고 알고 있고 어떤 자료에선 predicate로 먼저 범위를 좁혀놓는 다는 해석을 본 기억나네요.
3. 프로그램을 만들때 필요한 함수들을 한 파일안에 집어넣어 놓는 것이 performance가 더 좋다??(performance 측면에서만)
LTO 가 없다고 가정하면 컴파일러가 수행하는 IPO(interprocedural optimization)는 파일내의 function 간의 optimization 을 할텐데
그렇다면 당연히 function들을 한 파일로 만들어 버리면 성능이 좋아져야 하는데... 너무 당연한 얘기에 의문을 갖는건지 모르겠습니다.^^
(물론 다른 요인으로 인해 달라 질 수 있겠지만 IPO에만 포커스를 맞춰 보았습니다)
글이 깔끔하지 못한점은 양해를 부탁드립니다^^
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 컴파일러 및 가상머신 스터디 관련 Q&A 게시판 입니다. | woos | 2016.04.09 | 278 |
68 | LLVM 최적화 패치 제출까지의 순서 정리 | marcII | 2024.03.19 | 105 |
67 | 스터디 장소 | 슈민 | 2016.04.30 | 114 |
66 | 2017년 06/16일 스터디 컴파일러 VM스터디 [1] | June | 2017.06.16 | 137 |
65 | [컴파일러/가상머신] 170602 진도 [3] | pororo | 2017.06.03 | 153 |
64 | [컴파일러/VM] 170707 스터디 내용 | pororo | 2017.07.10 | 154 |
63 | [컴파일러/가상머신] 170526 진도 [4] | pororo | 2017.05.27 | 157 |
62 | [컴파일러/VM] 170623 오늘 모임은 취소되었습니다. [3] | pororo | 2017.06.23 | 172 |
61 | 05/12 컴파일러 스터디 진도 | pororo | 2017.05.13 | 182 |
60 | [컴파일러/가상머신] 2회차 진행내용 공유 [8] | spike | 2017.05.20 | 209 |
59 | 스터디 공간 정리 [3] | Kyoo | 2016.04.24 | 264 |
58 | 혹시 이 책 보신분 계신지 궁금합니다. [1] | marc | 2023.02.22 | 319 |
57 | [컴파일러] 170721 스터디 내용 | pororo | 2017.07.23 | 386 |
56 | simplify 에 대해 ChatGPT에게 물어봤습니다. [7] | marcII | 2023.03.19 | 702 |
55 | 이번 컴파일러 스터디와 관련해서 LLVM에 대해 찾아보았습니다 [1] | 자이 | 2017.05.19 | 735 |
54 | 조언 구합니다. 백창우씨 외 많은 선배님들께 [5] | 슈민 | 2016.06.06 | 871 |
53 | Compiler (LLVM) 교재 선정 [7] | 슈민 | 2016.04.27 | 906 |
52 | 스터디 교재 관련 의견 취합 [23] | 남현우 | 2016.04.24 | 1114 |
51 | llvm IR | 자이 | 2017.05.19 | 1143 |
50 | 저번 스터디 토의 내용입니다. | 민재원 | 2013.06.11 | 1763 |
.
답변 감사합니다. 제 컴퓨터에선 홈페이지 로그인이 안되서 다른 컴퓨터로 접속중입니다 ㅎ
2번질문의 predicate , constraint 는 md 파일 내 define_X 에 등장하는 것들을 말씀드린것입니다. 둘다 machine 종속적인 오퍼랜드의 제약과 관련있습니다. 때문에 middle end 의 analysis 과정과는 직접적으로는 관련이 없을 것으로 예상되는데 ... 간접적으로는 어떤 관련이 있을지는 잘 모르겠습니다. ㅎㅎ
그리고 backend 볼때 GIMPLE 을 봐야한다는 말은 정말 공감하고 있습니다.