2011-10-05 37 views
10

Tôi muốn cụ thể để biết các mức tối ưu hóa khác nhau của LLVM tương ứng với những gì.LLVM tối ưu hóa hiệu suất nào?

Điều đó có nghĩa là tôi muốn biết các thẻ tối ưu nào được thực thi CHÍNH XÁC (bên ngoài giao diện người dùng) và theo thứ tự nào khi tôi sử dụng tùy chọn "-0x" của llvm (hoặc vuốt hoặc chọn). "Người đàn ông" của các công cụ tương ứng không cung cấp nhiều thông tin về vấn đề này (đối với oposite của gcc).

Tôi biết trang hữu ích này: http://llvm.org/docs/Passes.html nhưng không cung cấp bất kỳ thông tin nào về tùy chọn "-Ox". Tôi đang tìm một số tùy chọn gỡ lỗi hoặc tiết lộ (đặc biệt là sử dụng thông tin từ "opt --help") nhưng tôi không thể tìm thấy bất kỳ tùy chọn hữu ích nào. Là một bổ sung, tôi nhận thấy bằng cách phân tích cú pháp mã mà tất cả các công cụ LLVM khác nhau cũng như sử dụng các trình điều khiển khác nhau để phân tích các tùy chọn theo cách riêng của chúng. Tất cả các trình điều khiển đó có tương tự như đối với tùy chọn "-Ox" không?

Sửa: Tôi tìm thấy tùy chọn "-debug-pass = Arguments" cho công cụ "opt", mang đến cho đầu ra sau đây cho tùy chọn "O1":

Pass Arguments: -targetdata -no-aa -tbaa -targetlibinfo -basicaa -simplifycfg -domtree -scalarrepl -early-cse -lower-expect 
Pass Arguments: -targetlibinfo -targetdata -no-aa -tbaa -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg -basiccg -prune-eh -always-inline -functionattrs -scalarrepl-ssa -domtree -early-cse -simplify-libcalls -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -iv-users -indvars -loop-idiom -loop-deletion -loop-unroll -memdep -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -instcombine -strip-dead-prototypes -preverify -domtree -verify 

này gần với những gì Tôi muốn nhưng vẫn còn hai câu hỏi:

  • tại sao có hai danh sách?

  • có tùy chọn tương tự nào cho các công cụ khác, đặc biệt là "kêu vang" không? (Theo thử nghiệm của tôi, "-debug-pass = Arguments" không làm việc với kêu vang)

Sửa: tùy chọn "-debug-pass = Cấu trúc" cho công cụ "opt" cho nhiều hơn dữ liệu thân thiện với người dùng (từ http://llvm.org/docs/WritingAnLLVMPass.html)

Trả lời

11

tại sao có hai danh sách?

Chức năng và thẻ Mô-đun có trình quản lý vượt qua riêng và do đó in ra riêng biệt.

là có bất kỳ tùy chọn tương tự như đối với các công cụ khác, đặc biệt là "kêu vang"

Với kêu vang, bạn có thể sử dụng -mllvm -debug-pass = Arguments.

+0

Đủ công bằng! Cảm ơn ! –

+0

@echristo: bạn có thể giải thích thêm về sự khác biệt giữa hàm và mô-đun vượt qua trong LLVM không? nói rằng, tôi đang chuyển toàn bộ tệp mã nguồn foo.c để chọn tham gia với một trong các thẻ tối ưu hóa chuẩn (O1,2,3, ...). Chuyện gì sẽ xảy ra tiếp theo ? – Amir

+1

@Amir Xin lỗi vì sự chậm trễ, chỉ cần nhìn thấy điều này. Nhưng dù sao, một mô-đun vượt qua là cái gì đó thường hoạt động trên tất cả các chức năng, vv và có khả năng hiển thị toàn cầu. Một chức năng vượt qua hoạt động trên một chức năng cá nhân tại một thời điểm và không thể vượt qua thông tin qua lại như xa như phân tích về chức năng cá nhân. Nói chung, những thứ như bố cục dữ liệu, tạo mã toàn cục, phân tích liên ngành vv là mô-đun trong khi gvn là hàm được chuyển. Bạn có thể xem mã nguồn của mỗi thẻ để tìm hiểu xem nó là gì đặc biệt. Bạn có câu hỏi cụ thể hơn hay nhiều thông tin hơn? – echristo

Các vấn đề liên quan