기본 블록에 배열 액세스가 있는지 어떻게 확인할 수 있습니까?기본 블록에서 배열 액세스 찾기
예를 들어 다음 예제에서 [i]를 찾고 싶습니다.
예 :
for(i=0;i<n;i++)
a[i]=a[i+1]+i;
기본 블록에 배열 액세스가 있는지 어떻게 확인할 수 있습니까?기본 블록에서 배열 액세스 찾기
예를 들어 다음 예제에서 [i]를 찾고 싶습니다.
예 :
for(i=0;i<n;i++)
a[i]=a[i+1]+i;
배열 액세스가 getelementptr
명령에 의해 모델링된다. 그래서 당신은 같은과 기본 블록을 반복 수 :
for (BasicBlock::iterator i = blk->begin(), e = blk->end(); i != e; ++i) {
if(isa<GetElementPtrInst>(i)) {
// process it here
}
}
을 생성한다. 배열 접근은 GEP에 의해 모델링 된 유일한 것이 아니다. 포인터 dereferncing 너무입니다. 그래서 구조체 멤버 액세스입니다. 그래서 여기서 조심해야합니다 –
맞지만 질문은 다소 모호합니다. 그래서 적어도 좋은 시작입니다! – joey
이것도 참조하십시오 : http://stackoverflow.com/questions/9682705/identify-array-type-in-ir –
당신이 연타 수준과 반대로 당신의 LLVM 수준이 필요시겠습니까? 나는. 만약 당신이 C 코드를 분석한다면 당신은 AST를 더 잘보아야한다. Clang은 –