컴파일러
위의 코드를 SSA 형식으로 만들면 if문 뒤에 「x3 = φ(x1, x2)」와 같은 식이 들어간다. 이 φ 함수의 역할로 올바른 것은?
if (c) x = 1;
else x = 2;
y = x + 3;
- Ax1과 x2 중 큰 쪽의 값을 골라 반환한다
- Bx1과 x2를 더한 값을 계산하여 반환한다
- C지나온 경로에 따라 x1 또는 x2를 선택한다
정답과 해설 보기
정답: C. 지나온 경로에 따라 x1 또는 x2를 선택한다
SSA 형식에서는 then 쪽의 대입을 x1, else 쪽의 대입을 x2라는 다른 이름으로 하므로, 합류한 뒤의 y 계산에서 어느 x를 사용해야 하는지를 나타낼 필요가 있습니다. φ 함수는 직전에 then 쪽에서 왔다면 x1을, else 쪽에서 왔다면 x2를 선택한다는, 합류 지점에서의 값 선택을 나타내는 기호입니다. 실제 기계어에는 φ 함수 명령이 없으며, 마지막에 레지스터 복사 등으로 치환합니다. 값의 대소나 합과는 관계가 없습니다.
- A. 값의 대소로 선택하는 것이 아닙니다.
- B. 값을 더하는 것이 아닙니다.
- C. 올바릅니다. 지나온 경로에 따라 값을 선택합니다.