LLVM

From alpha
Jump to navigation Jump to search
LLVM
मूल लेखकVikram Adve, Chris Lattner
डेवलपर(ओं)LLVM Developer Group
आरंभिक रिलीज2003; 21 years ago (2003)
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.
Preview release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.
इसमें लिखा हुआC++
ऑपरेटिंग सिस्टमCross-platform
प्रकारCompiler
लाइसेंसUIUC (BSD-style)
Apache License 2.0 with LLVM Exceptions (v9.0.0 or later)[2]
वेबसाइटwww.llvm.org

LLVM संकलक और टूलचैन टेक्नोलॉजीज का एक सेट है[3] इसका उपयोग किसी भी प्रोग्रामिंग भाषा के लिए एक कंपाइलर#फ्रंट एंड विकसित करने के लिए किया जा सकता है और किसी भी अनुदेश सेट वास्तुकला के लिए एक कंपाइलर#बैक एंड।LLVM को एक भाषा-स्वतंत्र विनिर्देश के आसपास डिज़ाइन किया गया है। भाषा-स्वतंत्र मध्यवर्ती प्रतिनिधित्व (IR) जो एक सॉफ़्टवेयर पोर्टेबिलिटी , उच्च-स्तरीय असेंबली भाषा के रूप में कार्य करता है, जो कई पासों पर विभिन्न प्रकार के परिवर्तनों के साथ कंपाइलर का अनुकूलन कर सकता है।[4] LLVM C ++ में लिखा गया है और इसे संकलन-समय, लिंकर (कम्प्यूटिंग) के लिए डिज़ाइन किया गया है। लिंक-टाइम, रनटाइम (प्रोग्राम लाइफसाइकल चरण) | रन-टाइम, और आइडल-टाइम ऑप्टिमाइज़ेशन।मूल रूप से C (प्रोग्रामिंग भाषा) और C ++ के लिए लागू किया गया है, LLVM की भाषा-अज्ञेयवादी डिजाइन ने तब से कई प्रकार के सामने के छोरों को जन्म दिया है: संकलक के साथ भाषाएं जो LLVM का उपयोग करती हैं (या जो सीधे LLVM का उपयोग नहीं करते हैं, लेकिन LLVM IR के रूप में संकलित कार्यक्रम उत्पन्न कर सकते हैं) ActionScript , एडीए (प्रोग्रामिंग भाषा), सी शार्प (प्रोग्रामिंग भाषा) शामिल हैं। सी#,[5][6][7] सामान्य लिस्प , पिकोलिस्प, क्रिस्टल (प्रोग्रामिंग भाषा) , कुडा , डी (प्रोग्रामिंग भाषा) , डेल्फी (प्रोग्रामिंग भाषा) , डायलन (प्रोग्रामिंग भाषा) , फोर्थ (प्रोग्रामिंग भाषा) ,[8] फोरट्रान, फ्रीबैसिक, मुक्त पास्कल , लैबव्यू,[9] HALIDE (प्रोग्रामिंग लैंग्वेज), हास्केल (प्रोग्रामिंग भाषा) , जावा बाइटकोड, जूलिया (प्रोग्रामिंग भाषा) , कोटलिन (प्रोग्रामिंग भाषा) , लुआ (प्रोग्रामिंग भाषा) , उद्देश्य सी , ओपेंक्ल,[10] PostgreSQL का SQL और PLPGSQL,[11] रूबी (प्रोग्रामिंग भाषा),[12] जंग (प्रोग्रामिंग भाषा),[13] स्काला (प्रोग्रामिंग भाषा),[14] स्विफ्ट (प्रोग्रामिंग भाषा), एक्ससी,[15] XOJO और ZIG (प्रोग्रामिंग भाषा)।

इतिहास

एलएलवीएम परियोजना 2000 में इलिनोइस विश्वविद्यालय में उरबाना -चैंपेन में विक्रम एडवे और क्रिस लेटनर के निर्देशन में शुरू हुई।LLVM को मूल रूप से स्थिर और गतिशील प्रोग्रामिंग भाषा प्रोग्रामिंग भाषाओं के लिए गतिशील संकलन तकनीकों की जांच करने के लिए एक शोध बुनियादी ढांचे के रूप में विकसित किया गया था।LLVM इलिनोइस विश्वविद्यालय/NCSA ओपन सोर्स लाइसेंस के तहत जारी किया गया था,[2]एक अनुमेय मुक्त सॉफ्टवेयर लाइसेंस।2005 में, Apple Inc. ने Latter को काम पर रखा और Apple के विकास प्रणालियों के भीतर विभिन्न उपयोगों के लिए LLVM सिस्टम पर काम करने के लिए एक टीम का गठन किया।[16] LLVM Xcode 4 के बाद से MacOS और iOS के लिए Apple के Xcode विकास उपकरणों का एक अभिन्न अंग रहा है।[17] 2006 में, लेटनर ने बजना नामक एक नई परियोजना पर काम करना शुरू किया।क्लैंग फ्रंट-एंड और एलएलवीएम बैक-एंड के संयोजन को क्लैंग/एलएलवीएम या बस क्लैंग कहा जाता है।

LLVM नाम मूल रूप से निम्न स्तर की आभासी मशीन के लिए एक प्रारंभिकवाद था।हालांकि, एलएलवीएम परियोजना एक छाता परियोजना में विकसित हुई, जिसका अधिकांश वर्तमान डेवलपर्स एक वर्चुअल मशीन के रूप में सोचते हैं।इसने प्रारंभिकवाद को भ्रमित और अनुचित बना दिया, और 2011 के बाद से एलएलवीएम आधिकारिक तौर पर अब एक संक्षिप्त नहीं है,[18] लेकिन एक ब्रांड जो एलएलवीएम छाता परियोजना पर लागू होता है।[19] परियोजना में LLVM इंटरमीडिएट प्रतिनिधित्व (IR), LLVM DEBUGGER, C ++ मानक लाइब्रेरी का LLVM कार्यान्वयन (C ++ 11 और C ++ 14 का पूर्ण समर्थन के साथ शामिल है।[20]), आदि LLVM को LLVM फाउंडेशन द्वारा प्रशासित किया जाता है।कंपाइलर इंजीनियर तान्या लिटनर 2014 में इसके अध्यक्ष बने,[21] और पोस्ट में था as of 2022.[22] एलएलवीएम को डिजाइन करने और लागू करने के लिए, संगणक तंत्र संस्था ने 2012 एसीएम सॉफ्टवेयर सिस्टम अवार्ड के साथ विक्रम एडवे, क्रिस लेटनर और इवान चेंग को प्रस्तुत किया।[23] यह परियोजना मूल रूप से UIUC लाइसेंस के तहत उपलब्ध थी।V9.0.0 के बाद 2019 में जारी किया गया,[24] LLVM ने LLVM अपवादों के साथ Apache Lission 2.0 को अवशोषित किया।[2] As of November 2022 लगभग 400 योगदान को लाइसेंस नहीं दिया गया है।[25][26]


सुविधाएँ

LLVM एक पूर्ण संकलक प्रणाली की मध्य परतें प्रदान कर सकता है, एक संकलक से इंटरमीडिएट प्रतिनिधित्व (IR) कोड ले सकता है और एक अनुकूलित IR का उत्सर्जन कर सकता है।इस नए आईआर को तब एक लक्ष्य मंच के लिए मशीन-निर्भर असेंबली भाषा कोड में परिवर्तित और जोड़ा जा सकता है।LLVM GNU संकलक संग्रह (GCC) टूलचेन से IR को स्वीकार कर सकता है, जिससे इसका उपयोग उस परियोजना के लिए लिखे गए मौजूदा कंपाइलर फ्रंट-एंड की एक विस्तृत सरणी के साथ किया जा सकता है।

LLVM संकलन-समय या लिंक-समय पर पुनर्वास (कम्प्यूटिंग) या रन-टाइम में बाइनरी मशीन कोड भी उत्पन्न कर सकता है।

LLVM एक भाषा-स्वतंत्र निर्देश सेट और प्रकार प्रणाली का समर्थन करता है।[4]प्रत्येक निर्देश स्थैतिक एकल असाइनमेंट फॉर्म (SSA) में है, जिसका अर्थ है कि प्रत्येक चर (प्रोग्रामिंग) (जिसे टाइप किया गया रजिस्टर कहा जाता है) को एक बार और फिर जमे हुए सौंपा जाता है।यह चर के बीच निर्भरता के विश्लेषण को सरल बनाने में मदद करता है।LLVM कोड को सांख्यिकीय रूप से संकलित करने की अनुमति देता है, क्योंकि यह पारंपरिक GCC प्रणाली के तहत है, या जावा (प्रोग्रामिंग भाषा) के समान, जस्ट-इन-टाइम संकलन (JIT) के माध्यम से IR से मशीन कोड तक लेट-कॉम्पिलिंग के लिए छोड़ दिया जाता है।टाइप सिस्टम में इंटेगर (कंप्यूटर साइंस) या फ्लोटिंग-पॉइंट अंकगणित जैसे बुनियादी प्रकार होते हैं। अस्थायी बिंदु अंकगणित और पांच समग्र डेटा प्रकार: संकेतक , सरणी डेटा संरचना, सरणी डेटा प्रकार, रिकॉर्ड (कंप्यूटर विज्ञान),और फ़ंक्शन (प्रोग्रामिंग)।एक ठोस भाषा में एक प्रकार के निर्माण को LLVM में इन बुनियादी प्रकारों के संयोजन से दर्शाया जा सकता है।उदाहरण के लिए, C ++ में एक वर्ग को समारोह सूचक के संरचनाओं, कार्यों और सरणियों के मिश्रण द्वारा दर्शाया जा सकता है।

LLVM JIT कंपाइलर रनटाइम में एक कार्यक्रम से बाहर की गई स्थिर स्थिर शाखाओं का अनुकूलन कर सकता है, और इस प्रकार उन मामलों में आंशिक मूल्यांकन के लिए उपयोगी है जहां एक कार्यक्रम में कई विकल्प हैं, जिनमें से अधिकांश को आसानी से एक विशिष्ट वातावरण में अनावश्यक निर्धारित किया जा सकता है।इस सुविधा का उपयोग मैक ओएस एक्स तेंदुआ (V10.5) के OpenGL पाइपलाइन में लापता हार्डवेयर सुविधाओं के लिए सहायता प्रदान करने के लिए किया जाता है।[27] OpenGL स्टैक के भीतर ग्राफिक्स कोड को मध्यवर्ती प्रतिनिधित्व में छोड़ दिया जा सकता है और फिर लक्ष्य मशीन पर चलने पर संकलित किया जा सकता है।हाई-एंड ग्राफ़िक्स प्रोसेसिंग युनिट ्स (जीपीयू) वाले सिस्टम पर, परिणामी कोड काफी पतला रहता है, न्यूनतम परिवर्तनों के साथ जीपीयू को निर्देशों को पारित करता है।लो-एंड जीपीयू के साथ सिस्टम पर, एलएलवीएम वैकल्पिक प्रक्रियाओं को संकलित करेगा जो स्थानीय केंद्रीय प्रसंस्करण इकाई (सीपीयू) पर चलते हैं जो निर्देशों का अनुकरण करते हैं कि जीपीयू आंतरिक रूप से नहीं चल सकता है।LLVM ने इंटेल GMA चिपसेट का उपयोग करके लो-एंड मशीनों पर प्रदर्शन में सुधार किया।इसी तरह की प्रणाली को गैलियम 3 डी LLVMPIPE के तहत विकसित किया गया था, और इसे एक उचित 3D हार्डवेयर ड्राइवर लोड किए बिना इसे चलाने की अनुमति देने के लिए Gnome शेल में शामिल किया गया था।[28] संकलित कार्यक्रमों के रन-टाइम प्रदर्शन के लिए, जीसीसी ने पूर्व में 2011 में औसतन एलएलवीएम को 10% से पीछे कर दिया।[29][30] 2013 में नए परिणामों से संकेत मिलता है कि एलएलवीएम ने अब इस क्षेत्र में जीसीसी के साथ पकड़ा है, और अब लगभग समान प्रदर्शन के बायनेरिज़ को संकलित कर रहा है।[31]


घटक

LLVM एक छाता परियोजना बन गई है जिसमें कई घटक हैं।

सामने समाप्त होता है

LLVM को मूल रूप से GCC स्टैक में मौजूदा संहिता -संकलक के लिए एक प्रतिस्थापन के रूप में लिखा गया था,[32] और जीसीसी के कई छोरों को इसके साथ काम करने के लिए संशोधित किया गया है, जिसके परिणामस्वरूप अब-डिफंक्शन एलएलवीएम-जीसीसी सुइट है।संशोधनों में आम तौर पर एक गिम्पल-टू-एलएलवीएम आईआर कदम शामिल होता है ताकि जीसीसी के गिम्पल सिस्टम के बजाय एलएलवीएम ऑप्टिमाइज़र और कोडगेन का उपयोग किया जा सके।Apple Xcode 4.x (2013) के माध्यम से LLVM-GCC का एक महत्वपूर्ण उपयोगकर्ता था।[33][34] जीसीसी फ्रंटेंड के इस उपयोग को ज्यादातर एक अस्थायी उपाय माना जाता था, लेकिन एलएलवीएम और क्लैंग के आधुनिक और मॉड्यूलर कोडबेस (साथ ही संकलन गति) के क्लैंग और फायदे के आगमन के साथ, ज्यादातर अप्रचलित है।

LLVM वर्तमान में ADA (प्रोग्रामिंग लैंग्वेज), C (प्रोग्रामिंग लैंग्वेज), C ++, D (प्रोग्रामिंग लैंग्वेज), डेल्फी (प्रोग्रामिंग लैंग्वेज), Fortran, Haskell (प्रोग्रामिंग लैंग्वेज), जूलिया (प्रोग्रामिंग लैंग्वेज), ऑब्जेक्टिव-सी, रस्ट के संकलन का समर्थन करता है।(प्रोग्रामिंग भाषा), और स्विफ्ट (प्रोग्रामिंग भाषा) विभिन्न अर्थ विश्लेषण (संकलक) का उपयोग करके।

एलएलवीएम में व्यापक रुचि ने विभिन्न भाषाओं के लिए नए फ्रंट एंड को विकसित करने के कई प्रयास किए हैं।जिस पर सबसे अधिक ध्यान दिया गया है, वह है क्लैंग, एक नया कंपाइलर जो सी, सी ++ और ऑब्जेक्टिव-सी का समर्थन करता है।मुख्य रूप से Apple द्वारा समर्थित, क्लैंग का उद्देश्य GCC सिस्टम में C/Objective-C Compiler को एक ऐसी प्रणाली के साथ बदलना है जो एकीकृत विकास वातावरण (IDE) के साथ अधिक आसानी से एकीकृत है और थ्रेड (कंप्यूटर विज्ञान) के लिए व्यापक समर्थन है।OpenMP निर्देशों के लिए समर्थन को रिलीज़ 3.8 के बाद से क्लैंग में शामिल किया गया है।[35] Utrecht Haskell (प्रोग्रामिंग भाषा) कंपाइलर LLVM के लिए कोड उत्पन्न कर सकता है।हालांकि जनरेटर विकास के शुरुआती चरणों में है, कई मामलों में यह सी कोड जनरेटर की तुलना में अधिक कुशल रहा है।[36] LLVM का उपयोग करके एक ग्लासगो हास्केल कंपाइलर (GHC) बैकएंड है जो GHC या C कोड जनरेशन के माध्यम से संकलित मूल कोड के सापेक्ष संकलित कोड के 30% स्पीड-अप को प्राप्त करता है, इसके बाद संकलन के बाद, केवल कई अनुकूलन तकनीकों में से एक को याद कर रहा है।जीएचसी।[37] कई अन्य घटक विकास के विभिन्न चरणों में हैं, जिनमें शामिल हैं, लेकिन रस्ट (प्रोग्रामिंग लैंग्वेज) कंपाइलर, एक जावा बाइटकोड फ्रंट एंड, एक सामान्य मध्यवर्ती भाषा (CIL) फ्रंट एंड, रूबी 1.9, विभिन्न फ्रंट का मैक्रुबी कार्यान्वयन, तक सीमित नहीं है।मानक एमएल के लिए समाप्त होता है, और एक नया ग्राफ रंग रजिस्टर एलोकेटर।[citation needed]


इंटरमीडिएट प्रतिनिधित्व

LLVM IR का उपयोग उदाहरण के लिए, Radeonsi द्वारा और LLVMPIPE द्वारा किया जाता है।दोनों मेसा 3 डी का हिस्सा हैं।

LLVM का मूल मध्यवर्ती प्रतिनिधित्व (IR) है, जो असेंबली के समान एक निम्न-स्तरीय प्रोग्रामिंग भाषा है।IR एक दृढ़ता से टाइप किया गया कम निर्देश सेट कंप्यूटर (RISC) निर्देश सेट है जो लक्ष्य के अधिकांश विवरणों को दूर करता है।उदाहरण के लिए, कॉलिंग सम्मेलन के माध्यम से अमूर्त है call और ret स्पष्ट तर्क के साथ निर्देश।इसके अलावा, रजिस्टरों के एक निश्चित सेट के बजाय, IR फॉर्म %0, %1, आदि के अस्थायी के अनंत सेट का उपयोग करता है। LLVM IR के तीन समकक्ष रूपों का समर्थन करता है: एक मानव-पठनीय विधानसभा प्रारूप,[38] फ्रंटेंड के लिए उपयुक्त एक इन-मेमोरी प्रारूप, और धारावाहिक के लिए एक घने बिटकोड प्रारूप।एक साधारण नमस्ते, दुनिया!आईआर प्रारूप में कार्यक्रम:

@.str = internal constant [14 x i8] c"hello, world\0A\00"

declare i32 @printf(ptr, ...)

define i32 @main(i32 %argc, ptr %argv) nounwind {
entry:
    %tmp1 = getelementptr [14 x i8], ptr @.str, i32 0, i32 0
    %tmp2 = call i32 (ptr, ...) @printf( ptr %tmp1 ) nounwind
    ret i32 0
}

विभिन्न लक्ष्यों द्वारा प्रदान किए गए कई अलग-अलग सम्मेलनों और सुविधाओं का मतलब है कि एलएलवीएम वास्तव में एक लक्ष्य-स्वतंत्र आईआर का उत्पादन नहीं कर सकता है और कुछ स्थापित नियमों को तोड़े बिना इसे रिटारगेट कर सकता है।प्रलेखन में स्पष्ट रूप से उल्लिखित लक्ष्य निर्भरता के उदाहरणों को वर्डकोड के लिए 2011 के प्रस्ताव में पाया जा सकता है, जो ऑनलाइन वितरण के लिए इरादा एलएलवीएम आईआर का एक पूरी तरह से लक्ष्य-स्वतंत्र संस्करण है।[39] एक अधिक व्यावहारिक उदाहरण PNACL है।[40] LLVM परियोजना MLIR नामक एक अन्य प्रकार के मध्यवर्ती प्रतिनिधित्व का भी परिचय देती है[41] जो बोली नामक एक प्लगइन आर्किटेक्चर को नियोजित करके पुन: प्रयोज्य और एक्स्टेंसिबल कंपाइलर इन्फ्रास्ट्रक्चर बनाने में मदद करता है।[42] यह पॉलीहेड्रल संकलन सहित अनुकूलन की प्रक्रिया में कार्यक्रम संरचना पर उच्च-स्तरीय जानकारी के उपयोग को सक्षम करता है।

बैक एंड्स

संस्करण 13 में, LLVM कई निर्देश सेटों का समर्थन करता है, जिसमें IA-32, x86-64, आर्म आर्किटेक्चर, क्वालकॉम हेक्सागन, MIPS आर्किटेक्चर, Nvidia समानांतर थ्रेड निष्पादन (PTX; LLVM प्रलेखन में NVPTX कहा जाता है), PowerPC, TERASCALE (माइक्रोएसिटेक्चर) शामिल हैं,[43] अधिकांश उन्नत माइक्रो डिवाइस GPU हाल के वाले (LLVM प्रलेखन में AMDGPU कहा जाता है),[44] SPARC, Z/आर्किटेक्चर (LLVM प्रलेखन में Systemz कहा जाता है), और Xcore।

कुछ फीचर्स कुछ प्लेटफार्मों पर उपलब्ध नहीं हैं।अधिकांश विशेषताएं IA-32, x86-64, z/आर्किटेक्चर, ARM और PowerPC के लिए मौजूद हैं।[45] RISC-V संस्करण 7 के रूप में समर्थित है।

अतीत में, LLVM ने अन्य बैकेंड्स का भी समर्थन किया, पूरी तरह से या आंशिक रूप से, जिसमें C बैकेंड, कोशिका (माइक्रोप्रोसेसर) , MicroBlaze शामिल हैं।[46] AMD R600, DEC/COMPAQ DEC ALPHA (अल्फा AXP)[47] और nios ii,[48] लेकिन वह हार्डवेयर ज्यादातर अप्रचलित है, और एलएलवीएम डेवलपर्स ने फैसला किया कि समर्थन और रखरखाव की लागत अब उचित नहीं थी।[citation needed] LLVM भी एक लक्ष्य के रूप में WebAssembly का समर्थन करता है, संकलित कार्यक्रमों को Google Chrome / Chromium (वेब ब्राउज़र), फ़ायरफ़ॉक्स, Microsoft Edge, Apple Safari या WAVM (वर्चुअल मशीन) जैसे WebAssembly- सक्षम वातावरण में निष्पादित करने में सक्षम बनाता है।LLVM-COMPLIANT WEBASSEMBLY कंपाइलर आमतौर पर C, C ++, D, Rust, Nim, Kotlin और कई अन्य भाषाओं में लिखे गए ज्यादातर अनमॉडिफाइड सोर्स कोड का समर्थन करते हैं।

LLVM मशीन कोड (MC) SubProject LLVM का टेक्स्ट फॉर्म और मशीन कोड के बीच मशीन निर्देशों का अनुवाद करने के लिए फ्रेमवर्क है।पूर्व में, LLVM ने सिस्टम असेंबलर पर भरोसा किया, या एक टूलचेन द्वारा प्रदान किया गया, असेंबली को मशीन कोड में अनुवाद करने के लिए।LLVM MC का एकीकृत असेंबलर IA-32, x86-64, ARM और ARM64 सहित अधिकांश LLVM लक्ष्यों का समर्थन करता है।विभिन्न MIPS निर्देश सेट सहित कुछ लक्ष्यों के लिए, एकीकृत विधानसभा समर्थन उपयोग करने योग्य है, लेकिन फिर भी बीटा चरण में है।[citation needed]


लिंकर

LLD सबप्रोजेक्ट LLVM के लिए एक अंतर्निहित, प्लेटफ़ॉर्म-स्वतंत्र लिंकर (कम्प्यूटिंग) विकसित करने का एक प्रयास है।[49] LLD का उद्देश्य तीसरे पक्ष के लिंकर पर निर्भरता को दूर करना है। As of May 2017, एलएलडी निष्पादन योग्य और लिंक करने योग्य प्रारूप, पीई/कॉफ, मच-ओ, और वेबसैबली का समर्थन करता है[50] पूर्णता के अवरोही क्रम में।LLD GNU Ld के दोनों स्वादों की तुलना में तेज है।[citation needed] GNU लिंकर्स के विपरीत, LLD को लिंक-समय अनुकूलन (LTO) के लिए बिल्ट-इन सपोर्ट है।यह तेजी से कोड पीढ़ी के लिए अनुमति देता है क्योंकि यह एक लिंकर प्लगइन के उपयोग को बायपास करता है, लेकिन दूसरी ओर एलटीओ के अन्य स्वादों के साथ अंतर को रोकता है।[51]


C ++ मानक लाइब्रेरी

LLVM परियोजना में C ++ मानक लाइब्रेरी का कार्यान्वयन शामिल है जिसे LIBC ++ कहा जाता है, MIT लाइसेंस और UIUC लाइसेंस के तहत दोहरे लाइसेंस प्राप्त है।[52] V9.0.0 के बाद से, इसे LLVM अपवादों के साथ Apache लाइसेंस 2.0 के लिए अवशोषित किया गया था।[2]


पोली

यह कैश-लोकलिटी ऑप्टिमाइज़ेशन के साथ-साथ ऑटो-परालवाद और स्वचालित वेकारिता के एक सूट को एक पोलीटोप मॉडल का उपयोग करके लागू करता है।[53]


डिबगर


सी मानक पुस्तकालय

LLVM-LIBC एक अधूरा, आगामी, ABI स्वतंत्र C मानक लाइब्रेरी है जिसे LLVM प्रोजेक्ट द्वारा और उसके लिए डिज़ाइन किया गया है।[54]


डेरिवेटिव

इसके अनुमेय लाइसेंस के कारण, कई विक्रेताओं ने LLVM के अपने स्वयं के ट्यून किए गए कांटे जारी किए।यह आधिकारिक तौर पर LLVM के प्रलेखन द्वारा मान्यता प्राप्त है, जो इस कारण से फ़ीचर चेक में संस्करण संख्याओं का उपयोग करने के खिलाफ सुझाव देता है।[55] कुछ विक्रेताओं में शामिल हैं:

  • AMD का AMD ऑप्टिमाइज़िंग C/C ++ कंपाइलर LLVM, CLANG और FLANG पर आधारित है।
  • Apple Xcode के लिए एक ओपन-सोर्स कांटा रखता है।[56]
  • आर्म आर्किटेक्चर आर्म कंपाइलर के रूप में LLVM 9 का एक कांटा रखता है।
  • फ्लैंग, फोरट्रान प्रोजेक्ट इन डेवलपमेंट as of 2022
  • IBM अपने IBM XL C/C ++ कंपाइलरों में LLVM को अपना रहा है। C/C ++ और IBM XL FORTRAN COMPILERS।[57]
  • इंटेल ने अपनी अगली पीढ़ी के इंटेल C ++ कंपाइलर के लिए LLVM को अपनाया है।[58]
  • लॉस अलामोस नेशनल लेबोरेटरी में LLVM 8 का एक समानांतर-कंप्यूटिंग कांटा है, जिसे Kitsune कहा जाता है।[59]
  • NVIDIA अपने NVVM CUDA कंपाइलर के कार्यान्वयन में LLVM का उपयोग करता है।[60] NVVM कंपाइलर #back_ends में उल्लिखित NVPTX बैकएंड से अलग है, हालांकि दोनों NVIDIA GPU के लिए PTX कोड उत्पन्न करते हैं।
  • 2013 के बाद से, सोनी अपने PlayStation 4 कंसोल के सॉफ़्टवेयर विकास किट (SDK) में LLVM के प्राथमिक फ्रंट-एंड क्लैंग कंपाइलर का उपयोग कर रहा है।[61]


यह भी देखें

वास्तुकला तटस्थ वितरण प्रारूप

  • आर्किटेक्चर निविदा वितरण प्रारूप (ANDF)
  • एप्लिकेशन वर्चुअलाइजेशन सॉफ्टवेयर की तुलना
  • Spir-v
  • उरबाना चैंपियन में इलिनोइस विश्वविद्यालय#खोज और नवाचार | इलिनोइस विश्वविद्यालय उरबाना Champaign खोजों और नवाचारों में

साहित्य

  • क्रिस लेटनर - ओपन सोर्स एप्लिकेशन की वास्तुकला - अध्याय 11 LLVM, ISBN 978-1257638017, 3.0 द्वारा सीसी के तहत 2012 जारी किया गया (खुला एक्सेस )।[62]
  • LLVM: लाइफलाग प्रोग्राम एनालिसिस एंड ट्रांसफॉर्मेशन के लिए एक संकलन ढांचा, क्रिस लेटनर, विक्रम एडव द्वारा एक प्रकाशित पेपर

संदर्भ

  1. "LLVM Logo". The LLVM Compiler Infrastructure Project.
  2. 2.0 2.1 2.2 2.3 "LICENSE.TXT". llvm.org. Retrieved September 24, 2019.
  3. "The LLVM Compiler Infrastructure Project". Retrieved March 11, 2016.
  4. 4.0 4.1 "LLVM Language Reference Manual". Retrieved June 9, 2019.
  5. "Announcing LLILC - A new LLVM-based Compiler for .NET". dotnetfoundation.org. Retrieved September 12, 2020.
  6. Mono LLVM, retrieved March 10, 2013
  7. Chris Lattner (2011). "LLVM". In Amy Brown; Greg Wilson (eds.). The Architecture of Open Source Applications.
  8. "मवेशी". GitHub. November 28, 2021.
  9. William Wong (May 23, 2017). "What's the Difference Between LabVIEW 2017 and LabVIEW NXG?". Electronic Design.
  10. Michael Larabel (April 11, 2018). "Khronos Officially Announces Its LLVM/SPIR-V Translator". phoronix.com.
  11. "32.1. What is JIT compilation?". PostgreSQL Documentation. November 12, 2020. Retrieved January 25, 2021.
  12. "विशेषताएँ". RubyMotion. Scratchwork Development LLC. Retrieved June 17, 2017. RubyMotion transforms the Ruby source code of your project into ... machine code using a[n] ... ahead-of-time (AOT) compiler, based on LLVM.
  13. "Code Generation - Guide to Rustc Development". rust-lang.org. Retrieved January 4, 2023.
  14. Reedy, Geoff (September 24, 2012). "Compiling Scala to LLVM". St. Louis, Missouri, United States. Retrieved February 19, 2013. {{cite journal}}: Cite journal requires |journal= (help)
  15. "xCORE: Multicore theory, hardware and programming (2014-12-01)", Developer Tool xTIMEcomposer, XMOS, December 2014, retrieved March 27, 2021
  16. Adam Treat (February 19, 2005), mkspecs and patches for LLVM compile of Qt4, archived from the original on October 4, 2011, retrieved January 27, 2012
  17. "Developer Tools Overview". Apple Developer. Apple. Archived from the original on April 23, 2011.
  18. Lattner, Chris (December 21, 2011). "The name of LLVM". llvm-dev (Mailing list). Retrieved March 2, 2016. 'LLVM' is officially no longer an acronym. The acronym it once expanded too was confusing, and inappropriate almost from day 1.  :) As LLVM has grown to encompass other subprojects, it became even less useful and meaningless.
  19. Lattner, Chris (June 1, 2011). "LLVM". In Brown, Amy; Wilson, Greg (eds.). The architecture of open source applications. ISBN 978-1257638017. The name 'LLVM' was once an acronym, but is now just a brand for the umbrella project.
  20. ""libc++" C++ Standard Library".
  21. Chris Lattner (April 3, 2014). "The LLVM Foundation". LLVM Project Blog.
  22. "Board of Directors". LLVM Foundation. November 11, 2022.
  23. "ACM Software System Award". ACM.
  24. Wennborg, Hans (September 19, 2019). "[llvm-announce] LLVM 9.0.0 Release".
  25. "Relicensing Long Tail". foundation.llvm.org. November 11, 2022.
  26. "LLVM relicensing - long tail". LLVM Project. Retrieved November 27, 2022 – via Google Docs.
  27. Chris Lattner (August 15, 2006). "A cool use of LLVM at Apple: the OpenGL stack". llvm-dev (Mailing list). Retrieved March 1, 2016.
  28. Michael Larabel, "GNOME Shell Works Without GPU Driver Support", phoronix, November 6, 2011
  29. V. Makarov. "SPEC2000: Comparison of LLVM-2.9 and GCC4.6.1 on x86". Retrieved October 3, 2011.
  30. V. Makarov. "SPEC2000: Comparison of LLVM-2.9 and GCC4.6.1 on x86_64". Retrieved October 3, 2011.
  31. Michael Larabel (December 27, 2012). "LLVM/Clang 3.2 Compiler Competing With GCC". Retrieved March 31, 2013.
  32. Lattner, Chris; Vikram Adve (May 2003). Architecture For a Next-Generation GCC. First Annual GCC Developers' Summit. Retrieved September 6, 2009.
  33. "LLVM Compiler Overview". developer.apple.com.
  34. "Xcode 5 Release Notes". Apple Inc.
  35. "Clang 3.8 Release Notes". Retrieved August 24, 2016.
  36. "Compiling Haskell To LLVM". Retrieved February 22, 2009.
  37. "LLVM Project Blog: The Glasgow Haskell Compiler and LLVM". May 17, 2010. Retrieved August 13, 2010.
  38. "LLVM Language Reference Manual". LLVM.org. January 10, 2023.
  39. Kang, Jin-Gu. "Wordcode: more target independent LLVM bitcode" (PDF). Retrieved December 1, 2019.
  40. "PNaCl: Portable Native Client Executables" (PDF). Archived from the original (PDF) on 2 May 2012. Retrieved 25 April 2012.
  41. "MLIR". mlir.llvm.org. Retrieved June 7, 2022.
  42. "Dialects - MLIR". mlir.llvm.org. Retrieved June 7, 2022.
  43. Stellard, Tom (March 26, 2012). "[LLVMdev] RFC: R600, a new backend for AMD GPUs". llvm-dev (Mailing list).
  44. "User Guide for AMDGPU Backend — LLVM 15.0.0git documentation".
  45. Target-specific Implementation Notes: Target Feature Matrix // The LLVM Target-Independent Code Generator, LLVM site.
  46. "Remove the mblaze backend from llvm". GitHub. July 25, 2013. Retrieved January 26, 2020.
  47. "Remove the Alpha backend". GitHub. October 27, 2011. Retrieved January 26, 2020.
  48. "[Nios2] Remove Nios2 backend". GitHub. January 15, 2019. Retrieved January 26, 2020.
  49. "lld - The LLVM Linker". The LLVM Project. Retrieved May 10, 2017.
  50. "WebAssembly lld port".
  51. "42446 – lld can't handle gcc LTO files". bugs.llvm.org.
  52. ""libc++" C++ Standard Library".
  53. "Polly - Polyhedral optimizations for LLVM".
  54. "llvm-libc: An ISO C-conformant Standard Library — libc 15.0.0git documentation". libc.llvm.org. Retrieved July 18, 2022.
  55. "Clang Language Extensions". Clang 12 documentation. Note that marketing version numbers should not be used to check for language features, as different vendors use different numbering schemes. Instead, use the Feature Checking Macros.
  56. "apple/llvm-project". Apple. September 5, 2020.
  57. "IBM C/C++ and Fortran compilers to adopt LLVM open source infrastructure".
  58. "Intel C/C++ compilers complete adoption of LLVM". Intel. Retrieved August 17, 2021.
  59. "lanl/kitsune". Los Alamos National Laboratory. February 27, 2020.
  60. "NVVM IR Specification 1.5". The current NVVM IR is based on LLVM 5.0
  61. Developer Toolchain for ps4 (PDF), retrieved February 24, 2015
  62. Chris Lattner (March 15, 2012). "Chapter 11". The Architecture of Open Source Applications. Amy Brown, Greg Wilson. ISBN 978-1257638017.


बाहरी संबंध

  • No URL found. Please specify a URL here or add one to Wikidata.