2012-12-21 2 views
1

기본 블록의 색인을 가져 오는 데 문제가 있습니다.LLVM getBasicBlockIndex() 또는 이와 동등한

for (Function::iterator II = F.begin(), EE = F.end(); II != EE; ++II, ++ii) 
{ BasicBlock* BB=II; 

나는 세그 폴트가 있거나 LLVM에서 찾은 여러 가지 방법으로 복잡한 구조를 사용할 수 없습니다.

http://llvm.org/doxygen/Instructions_8h_source.html#l02136

http://llvm.org/doxygen/EdgeBundles_8cpp_source.html#l00078

또는 이에 해당하는 : 당신이 방법을 가능한 한 간단에서 발견 된 방법을 사용하는 지 알고 있나요? 나는 단지 기본 블록의 ID를 얻고 싶다.

감사합니다.

+3

마음 속에있는 기본 블록 "색인"또는 "id"는 무엇입니까? –

답변

1

Eli Bendersky는 위의 의견에서 지적했듯이 색인의 해석에 따라 다릅니다. 기본 블록의 고유 식별자에 관심이있는 경우 기본 블록의 이름은 함수에서 고유합니다. 그걸 사용하면 얻을 수 있습니다

BB->getName() 

알고리즘의 특성에 따라 다른 기본 유형의 ID가 있습니다. 예를 들어 키스 쿠퍼 (Keith Cooper)의 반복적 인 손가락 알고리즘을 사용하여 지배자 트리 생성 알고리즘을 작성하는 경우 각 기본 블록을 역 깊이 첫 번째 순서로 증분 ID와 연결합니다. 이 ID는 BasicBlock 구조체의 일부가 아니며 사용자가 유지 관리해야합니다.

+3

불행히도 블록에 레이블이 없으면 getName()은 빈 문자열을 반환합니다. – thSoft

관련 문제