2013-02-07 30 views
13

के रूप में एलएलवीएम सी ++ एपीआई कोड जेनरेट करें Online LLVM demo पृष्ठ में एलएलवीएम सी ++ एपीआई कोड को स्रोत कोड से बैकएंड के रूप में उत्पन्न करने का विकल्प था। हालांकि, वह डेमो पेज अब अक्षम है। मैं सोच रहा था कि उपलब्ध एलएलवीएम उपकरण का उपयोग करके हम इसे कैसे कर सकते हैं।बैकएंड

मैं निम्नलिखित

clang++ -c -emit-llvm input.cpp -o input.ll 
llc -march=cpp -o input.ll.cpp input.ll 

जो निम्न त्रुटि

llc: error: invalid target 'cpp'. 

मैं LLVM/बजना संस्करण 3.2 का उपयोग कर रहा देता है की कोशिश की।

+3

वैध बैकएंड लक्ष्य के रूप में 'llc -version' सूची' cpp' करता है? – Necrolis

+0

llc -version सूची में सीपीपी नहीं दिखाता है। क्या सीपीपी को शामिल करने के लिए किसी पंजीकरण या कुछ की आवश्यकता है, या क्या? – MetallicPriest

+0

@ मेटालिक प्रिस्टेस्ट मुझे लगता है कि वे इसे ऑनलाइन डेमो के लिए सक्षम नहीं करते हैं (यह वास्तव में लोगों में दिलचस्पी नहीं है, मुझे लगता है) आप स्थानीय रूप से अपने सिस्टम पर एलएलवीएम क्यों स्थापित नहीं करते? – us2012

उत्तर

6

एलएलवीएम सी ++ बैकएंड को एलएलवीएम बनाने के दौरान कॉन्फ़िगरेशन के दौरान सक्षम होना चाहिए। यह डिफ़ॉल्ट रूप से configure (ऑटोोटूल) निर्माण में सक्षम है, लेकिन जब आप विंडोज़ पर निर्माण करते हैं तो सीमैक निर्माण में नहीं। आप सीएमके के साथ कॉन्फ़िगर करते समय उचित झंडे सेट करके इसे सक्षम कर सकते हैं। अधिक जानकारी के लिए this page देखें।

उद्धरण:

LLVM_TARGETS_TO_BUILD: STRING अर्धविराम द्वारा अलग लक्ष्यों की सूची बनाने के लिए, या सभी लक्ष्यों के निर्माण के लिए सभी। अक्षर संवेदनशील। दृश्य सी ++ के लिए एक्स 86 पर डिफ़ॉल्ट। पर अन्य मामले सभी के लिए डिफ़ॉल्ट हैं। उदाहरण: -DLLVM_TARGETS_TO_BUILD = "X86; पावरपीसी"।

अद्यतन

version 3.9 के बाद से CppBackend कोई और अधिक एक वैध लक्ष्य है। उन्होंने अपने कोड से हटा दिया है क्योंकि जेनरेट कोड कुछ मुद्दों को पेश कर रहा था।

Check this commit

Remove bit-rotten CppBackend. 

This backend was supposed to generate C++ code which will re-construct 
the LLVM IR passed as input. This seems to me to have very marginal 
usefulness in the first place. 

However, the code has never been updated to use IRBuilder, which makes 
its current value negative -- people who look at the output may be 
steered to use the *wrong* C++ APIs to construct IR. 

Furthermore, it's generated code that doesn't compile since at least 
2013. 

Differential Revision: http://reviews.llvm.org/D19942 

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8 
1

दुख की बात है, यह अब LLVM के नवीनतम संस्करण में संभव प्रतीत होता है। संबंधित प्रतिबद्ध संदेश यह बहुत अच्छी तरह से बताता है।

जैसा कि आप निम्न प्रतिबद्धता में देख सकते हैं, Remove bit-rotten CppBackend, जेनरेट कोड समस्या दिखाएगा।

commit 257fabb18605265a79397d35dd79a3973760ffaf 
Author: --- 
Date: Thu May 5 14:35:40 2016 +0000 

Remove bit-rotten CppBackend. 

This backend was supposed to generate C++ code which will re-construct 
the LLVM IR passed as input. This seems to me to have very marginal 
usefulness in the first place. 

However, the code has never been updated to use IRBuilder, which makes 
its current value negative -- people who look at the output may be 
steered to use the *wrong* C++ APIs to construct IR. 

Furthermore, it's generated code that doesn't compile since at least 
2013. 

Differential Revision: http://reviews.llvm.org/D19942 

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8 
संबंधित मुद्दे