Tôi đang làm việc với LLVM 3.4 và muốn lấy thông tin về số dòng của tệp nguồn từ IR. IR được tạo ra từ mã c đơn giản với Clang. Tôi muốn lấy số dòng trong tệp c nguồn từ dòng trong thân IR.Cách lấy số dòng nguồn từ tệp .ll LLVM
Tôi cố gắng này -
- Đối với Chỉ thị BI, unsigned Line = Dòng = song phương> getDebugLoc() getline();.
- Đối với vòng lặp L, std :: cout < < L-> getStartLoc(). GetLine();
Nhưng, kết quả được lưu trữ/in luôn là 0. Tôi không biết cách lấy số dòng trong nguồn từ LLVM IR.
tập tin C Nguồn của tôi là -
#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;
lệnh sử dụng- ~/llvm/build/Release + Khẳng định/bin/kêu vang O3 -fno-tháo vật cuộn tròn lại, vòng -fno-vectorize -fno -slp-vectorize -S -emit-llvm mẫu.c -o sample.ll
Cảm ơn!
Bạn đang tối ưu hóa vì vậy không có lý do gì để mong đợi đầu ra để đại diện cho nguồn đầu vào phù hợp nguồn trật tự số cũng không để mong đợi có một đoạn mã trên mỗi dòng mã nguồn. Nếu llvm có một thư viện mà điền vào những người và đó là những gì bạn đang yêu cầu có thể không có dòng cho điều bạn đang tìm kiếm. có thể thử unoptimized và xem nếu điều đó thay đổi mọi thứ. –
Cảm ơn! Tôi đã thử với -O0 nhưng Nó vẫn hiển thị 0. lệnh: ~/llvm/build/Release + Asserts/bin/clang -O0 -S -emit-llvm sample.có mẫu.ll Tôi đã vượt qua có thể phát hiện và phân tích các vòng lặp và hướng dẫn. Tôi đang sử dụng nó bên trong hàm - runOnLoop (Loop * L, LPPassManager & LPM) –
Bạn dường như không yêu cầu thông tin gỡ lỗi trong dòng lệnh biên dịch của bạn. – Mat