2017-12-03 26 views
3

코드의 제어 흐름을 검사 할 패스를 작성하려고합니다. br 명령이 주어지면 레이블 필드에서 언급 된 기본 블록에 액세스해야합니다. 코드에 대한 예를 들어llvm - br 유형의 명령어 레이블 필드에 언급 된 기본 블록의 첫 번째 명령어를 얻습니다.

: 나는 패스에서이 명령을 건너 때 나는 지금 IR 표현

br i1 %cmp, label %for.body, label %for.end 

을 얻을

for(i = 0; i < count; i++){ 
    sum = add(sum, array[i]); 
    } 

, 나는이 라벨은 정확히 알 필요가 가리키는. 아무도 내가 어떻게 할 수 있는지 말해 줄 수 있니?

답변

0

해당 지침에 대해 ->getOperand(1)->getOperand(2) 메서드를 호출하십시오. 이것은 당신에게 각각 1 번과 2 번 BB를 줄 것입니다. http://llvm.org/doxygen/classllvm_1_1User.html#abe1de1520a21f77ac57cc210bf0fb0b4

+0

답장을 보내 주셔서 감사합니다! 그것도 작동하지만 대신 BranchInst * branch = cast를 사용합니다. (I); 대 (부호 II = 0, = NSucc branch-> getNumSuccessors(); II getSuccessor (II);} – eren555

+0

형식이 잘못되어 죄송합니다. 새로운 내용이므로 의견에 코드 서식을 지정하는 방법을 모르겠습니다. – eren555