2011-12-28 5 views
15

Tôi đang viết tối ưu hóa cho trình biên dịch của mình và tôi sử dụng LLVM IR làm Ngôn ngữ Trung gian của mình. Tôi đã phân tích cú pháp tệp đầu vào và chuyển đổi nó thành LLVM IR. Trong quá trình tối ưu hóa, tôi cần truy xuất các toán hạng của hướng dẫn. Tôi có thể tìm getOpCode() trong lớp Instruction, nhưng không thể lấy danh sách toán hạng. Làm thế nào để tôi đi về điều đó?Bắt các toán hạng trong Chỉ thị LLVM

Trả lời

23

Có rất nhiều accessors toán hạng, thường được cung cấp bởi lớp llvm::User, có trang doxygen là: http://llvm.org/doxygen/classllvm_1_1User.htmlgetNumOperands()getOperand(unsigned int), cũng như iterator kiểu accessors op_begin()op_end().

Ví dụ, đưa ra Chỉ thị %X = add i32 %a, 2, I->getOperand(0) sẽ trả lại Value* cho %aI->getOperand(1) sẽ trả lại Value* cho i32 2 (bột nhôm để ConstantInt).

1

Ví dụ: nếu bạn có Chỉ thị * I1 - I1-> getOperand (0) sẽ trả về toán hạng đầu tiên của loại Giá trị *. Bạn có thể đi xa hơn, sử dụng I1-> getOperand (0) -> getName() sẽ trả về tên của toán hạng. Xem Các phương thức lớp giá trị.