나는 LLVM 3.4로 작업 중이며 IR에서 소스 파일의 행 번호 정보를 얻고 싶습니다. IR은 Clang과 간단한 c 코드로 생성됩니다. IR 본문의 라인에서 소스 C 파일의 라인 번호를 얻고 싶습니다. ;.ll 파일에서 소스 행 번호를 얻는 방법 LLVM
명령 BI를 들어- , 부호 라인 = 라인 = 양방향> getDebugLoc()의 getline() -
나는이 시도.
- For 루프 L, std :: cout < < L-> getStartLoc(). getLine();
결과는 항상 0입니다. LLVM IR에서 소스의 줄 번호를 얻는 방법을 모르겠습니다.
내 소스 C 파일입니다 -
#include <stdio.h>
int main()
{
int i;
int inbuf[100];
int outbuf[100];
for(i = 0; i < 100; ++i)
inbuf[i] ^= outbuf[i];
inbuf[1] += 402;
inbuf[6] += 107;
inbuf[97] += 231;
for(i = 0; i < 100; ++i)
{
inbuf[i] += outbuf[i];
}
inbuf[47] += 312;
//print-statements
for (i=0;i<100;i++) {
printf("inbuf[%d] = %d\n",i,inbuf[i]);
}
return 0;
명령 Used- ~/LLVM/빌드/릴리스 + 어설/빈/그 소리 -03 -fno-풀다 - 루프 -fno-벡터화 -fno -slp-vectorize -S -emit-llvm sample.c -o sample.ll
고마워!
그래서 소스 줄 번호 순서대로 입력 소스를 표현하기 위해 출력을 기대하는 이유가되지도 소스 코드 당 코드 덩어리가있을 것으로 기대하는 것입니다. llvm에 그 라이브러리를 채워주는 라이브러리가 있다면 그 라이브러리는 여러분이보고있는 것에 대한 라인이 없을 수도 있습니다. 어쩌면 최적화되지 않은 것을 시도해보고 변경 사항을 확인하십시오. –
감사! -O0으로 시도했지만 여전히 0을 표시합니다. 명령 : ~/llvm/build/Release + Asserts/bin/clang -O0 -S -emit-llvm sample.c -o sample.ll 루프 및 지침을 감지하고 분석 할 수 있습니다. 함수 내부에서 사용하고 있습니다 - runOnLoop (Loop * L, LPPassManager & LPM) –
컴파일 명령 줄에서 디버그 정보를 묻지 않는 것 같습니다. – Mat