Tôi thấy khó hiểu được LLVM C++ API.I bạn có muốn hỏi bạn không? Có mối quan hệ nào giữa LLVM C++ API và LLVM IR không? Ngoài ra, tôi muốn biết rằng làm thế nào để sử dụng LLVM C++ API?Chính xác là LLVM C++ API
Trả lời
Để (rất đơn giản), LLVM là thư viện C++ để viết trình biên dịch. C++ API của nó là giao diện người dùng bên ngoài của thư viện sử dụng để thực hiện trình biên dịch của họ.
Có một mức độ đối xứng giữa LLVM IR và một phần của LLVM C++ API - phần được sử dụng để xây dựng IR. Một nguồn lực rất tốt để có được một cảm giác đối xứng này là http://llvm.org/demo/. Ví dụ, bạn có thể biên dịch mã C này:
int factorial(int X) {
if (X == 0) return 1;
return X*factorial(X-1);
}
Into LLVM IR:
define i32 @factorial(i32 %X) nounwind uwtable readnone {
%1 = icmp eq i32 %X, 0
br i1 %1, label %tailrecurse._crit_edge, label %tailrecurse
tailrecurse: ; preds = %tailrecurse, %0
%X.tr2 = phi i32 [ %2, %tailrecurse ], [ %X, %0 ]
%accumulator.tr1 = phi i32 [ %3, %tailrecurse ], [ 1, %0 ]
%2 = add nsw i32 %X.tr2, -1
%3 = mul nsw i32 %X.tr2, %accumulator.tr1
%4 = icmp eq i32 %2, 0
br i1 %4, label %tailrecurse._crit_edge, label %tailrecurse
tailrecurse._crit_edge: ; preds = %tailrecurse, %0
%accumulator.tr.lcssa = phi i32 [ 1, %0 ], [ %3, %tailrecurse ]
ret i32 %accumulator.tr.lcssa
}
Cũng như C cuộc gọi API ++ (Tôi sẽ không dán nó ở đây vì đầu ra là dài, nhưng bạn có thể tự mình thử). Việc làm này, bạn sẽ thấy, ví dụ như icmp
hướng dẫn từ mã IR thực hiện ở trên như:
ICmpInst* int1_5 = new ICmpInst(*label_4, ICmpInst::ICMP_EQ, int32_X, const_int32_1, "");
ICmpInst
là một lớp học đó là một phần của ++ API C sử dụng để tạo icmp
hướng dẫn. Một tham chiếu tốt cho C++ API là Programmer's manual.
Cảm ơn bạn đã phát lại.Bạn có thể cho tôi biết Khi nào và cách sử dụng API LLVM C++? – user1406531
@ user1406531: Tôi hy vọng bạn nhận ra rằng câu hỏi của bạn quá chung chung. Tại sao bạn sử dụng LLVM? Để kết thúc? Bạn dự định xây dựng cái gì trên nó? Nếu bạn có câu trả lời chính xác cho những câu hỏi này, tôi nghĩ rằng sau khi dành thời gian đọc hướng dẫn và tài liệu LLVM, bạn sẽ nhận ra cách LLVM C++ API có thể giúp bạn –
Bạn có thể sử dụng chương trình phụ trợ CPP (llc -march=cpp
) để tìm hiểu ánh xạ từ bất kỳ IR đã cho nào tới API C++.
- 1. Có thể tự động tạo mã llvm C++ api từ LLVM-IR không?
- 2. Chính xác là gì?
- 3. Chính xác là một hội trong C# hoặc .NET?
- 4. Điều gì chính xác là siêu trong Objective-C?
- 5. Đây có phải là mã C++ 0x chính xác không?
- 6. Perl: Chính xác thì C <our> là gì?
- 7. Cách sử dụng bitfields chính xác trong C là gì?
- 8. đếm chính xác trong C++ nghĩa là gì ?,
- 9. Giá trị R chính xác trong C++ là gì?
- 10. Chính xác thì Windows AppFabric là gì?
- 11. C++ vs Python chính xác
- 12. Tìm nút chính xác C#
- 13. Container.DataItem chính xác là gì?
- 14. Chính xác PLINQ là gì?
- 15. Sun.jnu.encoding chính xác là gì?
- 16. Chính xác là một baseUrl
- 17. Heroku chính xác là gì?
- 18. OWASP chính xác là gì?
- 19. Sử dụng mã C/C++ bằng LLVM
- 20. Ngữ cảnh LLVM là gì?
- 21. Độ chính xác đồng nghĩa là gì?
- 22. Tìm đối sánh chính xác bằng API tìm kiếm Lucene
- 23. Chính xác "Bảng điều khiển" là gì?
- 24. GCC C++ độ chính xác pow
- 25. C cách đo thời gian chính xác?
- 26. C# vấn đề chính xác gấp đôi
- 27. C# cách xử lý chính xác SmtpClient?
- 28. Const cảnh báo chính xác C++
- 29. Mất chính xác với đôi C++
- 30. Thuật ngữ "vòng trống" đề cập chính xác trong C và C++ là gì?
Nếu bạn chỉ muốn tạo ra IR (và có thể chạy một số vượt qua nó), bạn có thể sẽ tốt hơn bằng cách sử dụng LLVM C bindings, chúng đẹp, sạch sẽ và tối giản. –