컴파일러

위의 코드를 SSA 형식으로 만들면 if문 뒤에 「x3 = φ(x1, x2)」와 같은 식이 들어간다. 이 φ 함수의 역할로 올바른 것은?

if (c) x = 1;
else   x = 2;
y = x + 3;
  1. Ax1과 x2 중 큰 쪽의 값을 골라 반환한다
  2. Bx1과 x2를 더한 값을 계산하여 반환한다
  3. C지나온 경로에 따라 x1 또는 x2를 선택한다
정답과 해설 보기

정답: C. 지나온 경로에 따라 x1 또는 x2를 선택한다

SSA 형식에서는 then 쪽의 대입을 x1, else 쪽의 대입을 x2라는 다른 이름으로 하므로, 합류한 뒤의 y 계산에서 어느 x를 사용해야 하는지를 나타낼 필요가 있습니다. φ 함수는 직전에 then 쪽에서 왔다면 x1을, else 쪽에서 왔다면 x2를 선택한다는, 합류 지점에서의 값 선택을 나타내는 기호입니다. 실제 기계어에는 φ 함수 명령이 없으며, 마지막에 레지스터 복사 등으로 치환합니다. 값의 대소나 합과는 관계가 없습니다.

  • A. 값의 대소로 선택하는 것이 아닙니다.
  • B. 값을 더하는 것이 아닙니다.
  • C. 올바릅니다. 지나온 경로에 따라 값을 선택합니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 컴파일러의 상수 폴딩의 예로 올바른 것은?
  2. 위의 코드에 상수 전파와 상수 폴딩을 반복해서 적용하면 최종적으로 어떤 코드가 되는가?
  3. 위의 코드에 공통 부분식 제거를 적용했을 때의 설명으로 올바른 것은?
  4. 불필요한 코드의 삭제(데드 코드 제거)로 제거되는 것으로 올바른 것은?
  5. 함수 인라인 전개의 장점과 단점의 조합으로 올바른 것은?

이 분야의 비교