2013-09-07 3 views
2

LLVM에는 something = cond ? true-part : false-part과 같은 표현식을 나타내는 데 사용되는 SelectInst이 있습니다.LLVM의 SelectInst 이점

?:도 항상 컴파일러에서 BranchInst으로 낮출 수 있으므로 IR에서이 명령어의 이점은 무엇입니까? 그러한 지시를 지원하는 CPU가 있습니까? 또는 select이 CodeGenerator에 의해 점프되도록 낮추었습니까?

select은 내재적 인 if의 두 가지 "분기"를 보장하므로 분석 통과에 이점이있을 수 있습니다. 그러나 컴파일러는 명령을 전혀 사용할 필요가 없으므로이 패스는 어쨌든 br을 처리 할 수 ​​있어야합니다.

답변

4

예, 당신은 항상 사용하는 대신 선택 명령의 조건 분기를 사용하지만, 선택은 몇 가지 장점이 있습니다 :

실제로 86 년에 그, 가장 확실한 예를 낮추기 위해 관련 CPU 명령어로이
  1. 이고 다양 함은 setcc instructions입니다.
  2. 선택 벡터화가 훨씬 쉽습니다. 사실 벡터화의 일반적인 단계 중 하나는 제어 흐름 (조건 분기)을 데이터 흐름 (선택)으로 변환하는 프로세스 인 "변환"입니다.
+0

네팔에는 또한 NEON에서 선택 지침이 있습니다. –