2011-10-05 17 views
10

मैं जानना चाहता हूं कि एलएलवीएम के विभिन्न अनुकूलन स्तर क्या हैं।एलएलवीएम कौन सा अनुकूलन करता है?

यह कहना है कि, मैं जानना चाहता हूं कि कौन सा अनुकूलन पास सटीक रूप से निष्पादित किया गया है (फ्रंटेंड के बाहर) और किस क्रम में जब मैं llvm (या clang या opt) के "-0x" विकल्पों का उपयोग करता हूं। इसी उपकरण के "आदमी" इस मामले पर अधिक जानकारी प्रदान नहीं करते हैं (जीसीसी के एक के लिए)।

मुझे इस उपयोगी पृष्ठ से अवगत है: http://llvm.org/docs/Passes.html, लेकिन यह "-Ox" विकल्पों के बारे में कोई जानकारी प्रदान नहीं करता है। मैं कुछ डिबगिंग या वर्बोज़ विकल्प ढूंढ रहा था (esp। "Opt --help" से सूचनाओं का उपयोग करके) लेकिन मुझे कोई उपयोगी विकल्प नहीं मिला।

एक पूरक के रूप में, मैंने कोड को पार्स करके देखा कि सभी विभिन्न एलएलवीएम उपकरण के साथ-साथ क्लैंग अलग-अलग ड्राइवरों का उपयोग करते हैं जो विकल्पों को अपने तरीके से पार्स करते हैं। क्या वे सभी ड्राइवर "-ऑक्स" विकल्पों के संबंध में समान हैं?

संपादित: मैं विकल्प "ऑप्ट" उपकरण है, जो विकल्प "O1" के लिए निम्नलिखित उत्पादन देता है के लिए "-debug-पास = तर्क" पाया:

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 

यह वही से करीब है मैं चाहता था लेकिन दो प्रश्न बने रहे:

  • दो सूचियां क्यों हैं?

  • क्या अन्य टूल्स, विशेष रूप से "क्लैंग" के लिए कोई समान विकल्प है? (मेरे परीक्षण के अनुसार, "-debug-पास = तर्क" बजना साथ काम नहीं करता)

संपादित: विकल्प उपकरण "ऑप्ट" के लिए "-debug-पास = संरचना" और भी देता है उपयोगकर्ता के अनुकूल डेटा (http://llvm.org/docs/WritingAnLLVMPass.html से)

उत्तर

11

दो सूचियां क्यों हैं?

फ़ंक्शन और मॉड्यूल पास के पास अपने पास प्रबंधक हैं और इसलिए अलग से प्रिंट करें।

वहाँ अन्य उपकरणों के लिए किसी भी इसी तरह के विकल्प, विशेष रूप से "बजना"

बजना के साथ आप -mllvm -debug-पास = तर्क का उपयोग कर सकते है।

+0

पर्याप्त मेला! धन्यवाद ! –

+0

@echristo: क्या आप एलएलवीएम में फ़ंक्शन और मॉड्यूल पास के बीच के अंतर पर अधिक विस्तार कर सकते हैं? कहें, मैं मानक ऑप्टिमाइज़ेशन पास (O1,2,3, ...) में से किसी एक को चुनने के लिए संपूर्ण स्रोत कोड फ़ाइल foo.c पास कर रहा हूं। आगे क्या होगा ? – Amir

+1

@Amir देरी के लिए खेद है, बस यह देखा। किसी भी तरह, एक मॉड्यूल पास ऐसा कुछ है जो आम तौर पर सभी कार्यों में काम करता है, और इसकी वैश्विक दृश्यता है। एक समारोह पास एक समय में एक व्यक्तिगत समारोह पर काम करता है और व्यक्तिगत कार्यों पर विश्लेषण के रूप में आगे और आगे जानकारी पास नहीं कर सकता है। सामान्य रूप से, डेटा लेआउट, ग्लोबल कोड जनरेशन, इंटरप्रोसेडुरल विश्लेषण आदि जैसी चीजें मॉड्यूल हैं जबकि जीवीएन कार्य पास हैं। आप प्रत्येक पास के लिए विशेष रूप से यह पता लगाने के लिए स्रोत पर एक नज़र डाल सकते हैं। क्या आपके पास एक और विशिष्ट प्रश्न या अधिक जानकारी है? – echristo

संबंधित मुद्दे