Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

array 관련 #16

Open
minkiminki opened this issue Nov 21, 2018 · 2 comments
Open

array 관련 #16

minkiminki opened this issue Nov 21, 2018 · 2 comments

Comments

@minkiminki
Copy link
Owner

datatype array는 스택에 저장되어 있지 않고, 값 static하게 결정되어 있다. 컴파일 타임에 이 값을 옮긴다(lea instruction으로).

반면 datatype pointer는 실제 array의 첫 주소 값을 담고 있다.

array 변수는 register allocation할 필요가 없다. 이를 위한 패치를 했다(dead store elimination은 여전히 할 수 있다). ad22981

한편, pointer 값 중 lea 연산으로 정해지는 것들은 static하게 무슨 값인지 알 수 있다. 이것으로 constant propagation을 하는 것을 생각해볼 수 있다.
그런데 이것은 몇몇 어려운 점이 있다.

  1. stack offset 값이 전부 결정된 다음에야 알 수 있다. 따라서 꽤나 컴파일 뒷부분에서 진행되어야 한다.
  2. 아낄 수 있는 것이 lea 한번씩이다. 이득이 너무 적다.

따라서 이런 최적화는 진행하지 않기로 하였다.

@minkiminki
Copy link
Owner Author

dim, dofs는 fb12ff4 로 constant propagation 했다.

@minkiminki
Copy link
Owner Author

2 <- lea 한번이 아니다. constant propagation과 조합하면 많은 주소값을 한번에 계산 가능해진다.
이를 위해선 constant 값으로 주소값(rbp와 ofs 꼴이거나 글로벌 변수)을 허용해야 한다. 그리고 + 연산을 지원해야 한다.

이 pointer constant 값은 백엔드에서 처리를 좀 해야 한다.
글로벌 변수 + 상수 문법을 어셈블리에서 지원하는지 모르겠다.
값이 참조하는 걸 부를 때는 그 값을 그대로 적고, 값 자체를 부를 때는 lea를 써야 한다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant