컴파일러

SSA 형식 중간 표현의 특징으로 올바른 것은?

  1. A각 변수에 대한 대입이 프로그램 안에서 정확히 1번이 된다
  2. B모든 변수가 레지스터가 아니라 메모리 위에 놓인다
  3. C조건 분기 명령을 전혀 포함하지 않는 형태로 다시 쓰인다
정답과 해설 보기

정답: A. 각 변수에 대한 대입이 프로그램 안에서 정확히 1번이 된다

SSA 형식에서는 변수에 대한 대입이 1번이 되도록 이름을 바꾸어 붙이고, 합류 지점에서는 φ 함수로 값을 선택합니다. 예를 들어 x를 2번 대입한다면 x1과 x2로 나누어 어느 쪽이 사용되는지를 명확히 합니다. 정의와 사용의 관계가 분명해지므로 상수 전파나 불필요한 코드의 삭제 같은 최적화가 쉬워집니다. 분기는 φ 함수로 다루므로 분기 명령이 없어지는 것은 아닙니다. 변수가 메모리에 놓이는 형태도 아니며, 대부분은 레지스터 후보로 취급됩니다.

  • A. 올바릅니다. 대입이 1번이 되도록 이름을 바꾸어 붙입니다.
  • B. 변수를 메모리에 두는 형식이 아닙니다.
  • C. 분기는 그대로 남고, 합류 지점은 φ 함수로 다룹니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 위의 코드를 SSA 형식으로 만들면 if문 뒤에 「x3 = φ(x1, x2)」와 같은 식이 들어간다. 이 φ 함수의 역할로 올바른 것은?
  2. 컴파일러의 상수 폴딩의 예로 올바른 것은?
  3. 위의 코드에 상수 전파와 상수 폴딩을 반복해서 적용하면 최종적으로 어떤 코드가 되는가?
  4. 위의 코드에 공통 부분식 제거를 적용했을 때의 설명으로 올바른 것은?
  5. 불필요한 코드의 삭제(데드 코드 제거)로 제거되는 것으로 올바른 것은?

이 분야의 비교