2012-03-12 2 views
1

기본 블록에 배열 액세스가 있는지 어떻게 확인할 수 있습니까?기본 블록에서 배열 액세스 찾기

예를 들어 다음 예제에서 [i]를 찾고 싶습니다.

예 :

  for(i=0;i<n;i++) 
        a[i]=a[i+1]+i; 
+0

당신이 연타 수준과 반대로 당신의 LLVM 수준이 필요시겠습니까? 나는. 만약 당신이 C 코드를 분석한다면 당신은 AST를 더 잘보아야한다. Clang은 –

답변

1

배열 액세스가 getelementptr 명령에 의해 모델링된다. 그래서 당신은 같은과 기본 블록을 반복 수 :

for (BasicBlock::iterator i = blk->begin(), e = blk->end(); i != e; ++i) { 
    if(isa<GetElementPtrInst>(i)) { 
    // process it here 
    } 
} 
+0

을 생성한다. 배열 접근은 GEP에 의해 모델링 된 유일한 것이 아니다. 포인터 dereferncing 너무입니다. 그래서 구조체 멤버 액세스입니다. 그래서 여기서 조심해야합니다 –

+0

맞지만 질문은 다소 모호합니다. 그래서 적어도 좋은 시작입니다! – joey

+0

이것도 참조하십시오 : http://stackoverflow.com/questions/9682705/identify-array-type-in-ir –