2012-05-20 12 views
7

क्या है मुझे पता चला कि एलएलवीएम सी ++ एपीआई को समझना मुश्किल है। क्या आप आपसे पूछना चाहेंगे? क्या एलएलवीएम सी ++ एपीआई और एलएलवीएम आईआर के बीच कोई संबंध है? साथ ही, मैं जानना चाहता हूं कि एलएलवीएम सी ++ एपीआई का उपयोग कैसे करें?एलएलवीएम सी ++ एपीआई

+0

यदि आप केवल आईआर उत्पन्न करना चाहते हैं (और शायद इसे कुछ पास चलाएं), तो आप शायद एलएलवीएम सी बाइंडिंग का उपयोग करना बेहतर कर देंगे, वे अच्छे, स्वच्छ और सरल हैं। –

उत्तर

12

(बहुत) सरल बनाने के लिए, एलएलवीएम कंपेलरों को लिखने के लिए एक सी ++ लाइब्रेरी है। इसका सी ++ एपीआई उनके कंपाइलर को लागू करने के लिए लाइब्रेरी के बाहरी इंटरफ़ेस उपयोगकर्ता हैं।

एलएलवीएम आईआर और एलएलवीएम सी ++ एपीआई के हिस्से के बीच समरूपता की एक डिग्री है - आईआर बनाने के लिए उपयोग किया जाने वाला हिस्सा। इस समरूपता के लिए महसूस करने के लिए एक बहुत अच्छा संसाधन http://llvm.org/demo/ है। उदाहरण के लिए, आप इस सी कोड संकलन कर सकते हैं:

int factorial(int X) { 
    if (X == 0) return 1; 
    return X*factorial(X-1); 
} 

LLVM आईआर में:

define i32 @factorial(i32 %X) nounwind uwtable readnone { 
    %1 = icmp eq i32 %X, 0 
    br i1 %1, label %tailrecurse._crit_edge, label %tailrecurse 

tailrecurse:          ; preds = %tailrecurse, %0 
    %X.tr2 = phi i32 [ %2, %tailrecurse ], [ %X, %0 ] 
    %accumulator.tr1 = phi i32 [ %3, %tailrecurse ], [ 1, %0 ] 
    %2 = add nsw i32 %X.tr2, -1 
    %3 = mul nsw i32 %X.tr2, %accumulator.tr1 
    %4 = icmp eq i32 %2, 0 
    br i1 %4, label %tailrecurse._crit_edge, label %tailrecurse 

tailrecurse._crit_edge:       ; preds = %tailrecurse, %0 
    %accumulator.tr.lcssa = phi i32 [ 1, %0 ], [ %3, %tailrecurse ] 
    ret i32 %accumulator.tr.lcssa 
} 

साथ ही सी ++ API कॉल करने के लिए के रूप में (क्योंकि उत्पादन लंबा है मैं इसे यहाँ पेस्ट नहीं होगा, लेकिन आप इसे स्वयं आज़मा सकते हैं)। ऐसा करने से, आप देखेंगे उदाहरण के लिए आईआर कोड से icmp अनुदेश ऊपर किया है:

ICmpInst* int1_5 = new ICmpInst(*label_4, ICmpInst::ICMP_EQ, int32_X, const_int32_1, ""); 

ICmpInst एक वर्ग है कि सी ++ icmp निर्देश बनाने के लिए इस्तेमाल एपीआई का हिस्सा है है। सी ++ एपीआई के लिए एक अच्छा संदर्भ Programmer's manual है।

+0

रीप्ले के लिए धन्यवाद। लेकिन क्या आप मुझे बता सकते हैं कि एलएलवीएम सी ++ एपीआई कब और कैसे उपयोग करें? – user1406531

+2

@ user1406531: मुझे आशा है कि आपको एहसास होगा कि आपका प्रश्न अत्यधिक सामान्य है। आप एलएलवीएम का उपयोग क्यों करते हैं? किस हद तक? आप इसके शीर्ष पर निर्माण करने की क्या योजना बना रहे हैं? यदि आपके पास इन प्रश्नों के लिए सही उत्तर हैं, तो मुझे लगता है कि एलएलवीएम ट्यूटोरियल और दस्तावेज पढ़ने में कुछ समय बिताने के बाद, आपको पता चलेगा कि एलएलवीएम सी ++ एपीआई आपकी मदद कैसे कर सकती है –

2

आप किसी दिए गए आईआर से सी ++ एपीआई में मैपिंग का पता लगाने के लिए सीपीपी बैकएंड (llc -march=cpp) का उपयोग कर सकते हैं।

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