2011-03-24 10 views
6

मैंने अभी एलएलवीएम की खोज की है और अभी तक इसके बारे में बहुत कुछ नहीं पता है। मैं llvm in browser का उपयोग करके इसे आजमा रहा हूं। मैं देख सकता हूं कि मेरे द्वारा लिखे गए किसी भी सी कोड को एलएलवीएम बाइट कोड में परिवर्तित कर दिया गया है जिसे बाद में देशी कोड में परिवर्तित किया जाता है। पृष्ठ बाइट कोड का एक पाठ प्रस्तुतिकरण दिखाता है। निम्नलिखित सी कोड के लिए उदाहरण के लिए:लेखन llvm बाइट कोड

target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 
target triple = "x86_64-linux-gnu" 

@array = global [3 x i32] [i32 1, i32 2, i32 3] ; <[3 x i32]*> [#uses=1] 

define i32 @foo(i32 %X) nounwind readonly { 
entry: 
    %0 = sext i32 %X to i64       ; <i64> [#uses=1] 
    %1 = getelementptr inbounds [3 x i32]* @array, i64 0, i64 %0 ; <i32*> [#uses=1] 
    %2 = load i32* %1, align 4      ; <i32> [#uses=1] 
    ret i32 %2 
} 

मेरा प्रश्न है:: मैं बाइट कोड लिख सकते हैं और यह LLVM कोडांतरक देशी कन्वर्ट करने के लिए करने के लिए दे सकते हैं

int array[] = { 1, 2, 3}; 

int foo(int X) { 
    return array[X]; 
} 

यह निम्न बाइट कोड से पता चलता कोड सी कोड लिखने के पहले चरण को छोड़कर कोड? यदि हां, तो मैं इसे कैसे कर सकता हूं? क्या किसी के पास मेरे लिए कोई संकेतक है?

+1

http://llvm.org/docs /CommandGuide/index.html –

उत्तर

6

हाँ, निश्चित रूप से आप कर सकते हैं। सबसे पहले, आप हाथ से एलएलवीएम आईआर लिख सकते हैं। Llc जैसे सभी टूल (जो आपके लिए मूल कोड उत्पन्न करेंगे) और ऑप्ट (एलएलवीएम आईआर => एलएलवीएम आईआर ऑप्टिमाइज़र) इनपुट के रूप में एलएलवीएम आईआर के पाठपरक प्रतिनिधित्व को स्वीकार करते हैं।

7

एक बहुत महत्वपूर्ण विशेषता LLVM आईआर भाषा की (और डिजाइन लक्ष्य) ने अपने 3-जिस तरह से प्रतिनिधित्व है:

  • शाब्दिक प्रतिनिधित्व आप यहां देख सकते
  • बाईटकोड प्रतिनिधित्व (या द्विआधारी फार्म)
  • इन-मेमोरी प्रस्तुति

सभी 3 वास्तव में पूरी तरह से अदलाबदल योग्य हैं। किसी को भी व्यक्त नहीं किया जा सकता है जिसे 2 अन्य लोगों में भी व्यक्त नहीं किया जा सकता है।

इसलिए, जब तक आप वाक्यविन्यास के अनुरूप होते हैं, तो आप वास्तव में आईआर स्वयं लिख सकते हैं। हालांकि, यह प्रारूपहीन नहीं है, जब तक कि प्रारूप के साथ स्वयं को अनुकूलित करने के लिए व्यायाम न किया जाए, चाहे आईआर पढ़ने (और निदान) को बेहतर बनाने के लिए या अपने स्वयं के कंपाइलर का उत्पादन करने के लिए बेहतर हो) :)