Tôi đang cố gắng phát hiện khai báo mảng và xây dựng bảng giá trị ký hiệu cho mảng có kích thước tĩnh. Nó sẽ chứa một cặp tên arraySize. Tôi có một số câu hỏi:LLVM Chỉ dẫn tên biến và tham số
1) Đưa ra hướng dẫn như% a = alloca [200 x i8], căn chỉnh 16 cách tôi có thể trích xuất "a", tên của mảng.
2) Tôi đang cố gắng để giải nén "200" như kích thước mảng nhưng mã này:
if(AllocaInst *allocInst = dyn_cast<AllocaInst>(&*I)){
PointerType *p = allocInst->getType();
if(p->getElementType()->isArrayTy()){
Value* v = allocInst->getOperand(0);
errs() << *v ;
}
}
mang lại cho tôi "i32 1" khi tôi in v Có ai biết tại sao điều này là.? Tôi không nghĩ có bất cứ điều gì 32bit về điều này ngoại trừ có thể là địa chỉ.
OK vì vậy tôi đã tìm ra cách để có được kích thước: ArrayType * a = cast (p-> getElementType()); a-> getNumElements() –
Realn0whereman
okay ... như vậy ... Tôi đã tìm ra cách để có được tên quá ... allocInst-> getName() Tại sao mà chỉ đơn giản đăng trên stackoverflow giúp tôi tìm câu trả lời nhanh hơn ...: P – Realn0whereman
Tốt nhất là bạn chỉ cần đăng câu trả lời chứa thông tin này thay vì nhận xét. Bằng cách này, câu hỏi sẽ được đánh dấu đúng như đã trả lời. – Oak