2012-04-24 6 views
10

मैं एक परियोजना पर काम कर रहा हूं जिसे मैं एलएलवीएम 2.6 और एलएलएमएम-जीसीसी फ्रंट एंड के साथ संकलित कर रहा था। मैं इसे एलएलवीएम 3.1 और क्लैंग के साथ संकलित करने का परीक्षण करने की कोशिश कर रहा हूं।एलएलवीएम और क्लेंग में अनुकूलन स्तर

error: invalid value '5' in '-O5' 

हालांकि, LLVM 2.6 और LLVM-जीसीसी -O5 ध्वज के साथ ठीक काम किया है: जब मैं ऐसा किया मैं -O5 अनुकूलन स्तर के बारे में निम्न त्रुटि संदेश मिल गया। मैं बजना अनुकूलन स्तर के बारे में निम्नलिखित दस्तावेज़ में देखा:

-O0 -O1 -O2 -Os -O3 -O4 
     Specify which optimization level to use. -O0 means "no optimization": this level compiles the 
     fastest and generates the most debuggable code. -O2 is a moderate level of optimization which 
     enables most optimizations. -Os is like -O2 with extra optimizations to reduce code size. -O3 
     is like -O2, except that it enables optimizations that take longer to perform or that may 
     generate larger code (in an attempt to make the program run faster). On supported platforms, -O4 
     enables link-time optimization; object files are stored in the LLVM bitcode file format and whole 
     program optimization is done at link time. -O1 is somewhere between -O0 and -O2. 

तो मैं यह पता लगाने की क्या Makefile मैं पहली जगह में क्या कर रहा था के साथ काम कर रहा हूँ में -O5 (मैं नहीं लिखा था करने के लिए कोशिश कर रहा हूँ makefile)। क्या यह कुछ बदल गया है और एलएलवीएम के साथ प्रयोग किया जाता है? या यह अभी भी एक उपयोगी सुविधा है और मुझे इसे किसी अन्य तरीके से सक्रिय करने की आवश्यकता है।

इसके अलावा मामले में यह उपयोगी है आदेश मैं चल रहा हूँ कि त्रुटि दे रहा है मूल रूप से है:

/bin/clang -g -c -mcmodel=medium -fstrict-aliasing -Wstrict-aliasing -O5 -emit-llvm -fkeep-inline-functions -fno-stack-protector -c -o foo.bc foo.cpp 

इसके अलावा मामले में यह मायने रखता है कि मैं एक लिनक्स (Ubuntu 10.04) x86_64 सिस्टम पर चलने कर रहा हूँ।

उत्तर

12

जीसीसी n के लिए किसी भी -On व्यवहार करता है> = 4 as -O3:

-O झंडा 0-9 से किसी भी संख्या को स्वीकार करेंगे, लेकिन केवल शून्य तीन के माध्यम से लागू किया जाता है, और मुझे नहीं लगता कि कि किसी के पास जल्द ही किसी भी समय चार से नौ को लागू करने की कोई योजना है। तथ्य यह है कि लोग इस-ओ 9 मुहावरे का उपयोग करते हैं, यह थोड़ा परेशान है, क्योंकि इसका तात्पर्य है कि वे हर कल्पनीय अनुकूलन चाहते हैं कि जीसीसी संभवतः कभी भी ऑफ़र कर सकता है, भले ही संकलन में लाभ के लिए सप्ताह लग जाएं।

बड़े स्तरों का उपयोग नहीं किया जाना चाहिए, आपके पास केवल निम्न गुणवत्ता मेकफ़ाइल है।

तो निर्दिष्ट करने -O9 का एक सा है - प्रकार बकवास

तो, जब जीसीसी संकलक प्रयोग किया जाता है, तो आप -O की वैध विविधताएं हैं "लेकिन यह एक ग्यारह को जाता है!": -O0, -O1, -O2, -O3। लेकिन ड्राइवर चुपचाप किसी भी ऑन-ओ 3 को परिवर्तित करेगा।

एलएलवीएम (ड्राइवर के दोनों क्लैंग और एलएलएमएम-जीसीसी वेरिएंट) -O4 तक केवल स्तर का समर्थन करता है (-O4-O3 -flto जैसा ही है)। तो आपको परीक्षण के बिना -O4 का उपयोग नहीं करना चाहिए, क्योंकि एलटीओ धीमा है और संभवतः आपके प्रोग्राम को तोड़ सकता है।

2

मेकफ़ाइल में यह एक गलती हो सकती है कि llvm-gcc एक त्रुटि के रूप में पहचाना नहीं गया था लेकिन क्लैंग ने किया था।

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