2010-04-23 22 views
9

से एक फ़ंक्शन बनाएं, मैं LLVM लाइब्रेरी से फ़ंक्शन इनलाइन करने की कोशिश कर रहा हूं।एलएलवीएम इनलाइन को लाइब्रेरी

मैं LLVM bitcode फ़ाइलें (मैन्युअल रूप से उत्पन्न किया था) कि मैं llvm-link साथ एक साथ जुड़े हुए है, और मैं भी एक पुस्तकालय (सी में लिखा) clang द्वारा bitcode में संकलित और llvm-ar साथ संग्रहीत है। मैं सबकुछ एक साथ जोड़ने और निष्पादित करने का प्रबंधन करता हूं लेकिन पुस्तकालय से किसी फ़ंक्शन को इनलाइन करने के लिए मैं LLVM प्राप्त करने का प्रबंधन नहीं कर सकता। इस बारे में कोई सुराग कैसे किया जाना चाहिए?

उत्तर

8

लाइब्रेरी के साथ बिटकोड फ़ाइलों को एक साथ जोड़ने के बाद, क्या आप लिंक किए गए बिटकोड पर एक इंटरनलैज पास चलाते हैं? आंतरिककरण पास सभी कार्यों (main() के अलावा) स्थिर बनाता है और ऑप्टिमाइज़र/कोड जनरेटर को बताता है कि कार्यों को कुछ (अस्तित्वहीन) बाहरी संदर्भ के लिए एक प्रति उपलब्ध रखने के बिना सुरक्षित रूप से रेखांकित किया जा सकता है।

मैं मैन्युअल रूप से llvm-ld से उधारित कोड का उपयोग करके अपनी बिटकोड फ़ाइलों और बिटकोड पुस्तकालयों को मैन्युअल रूप से लिंक करता हूं और मैं आंतरिककरण पास करता हूं, लेकिन मुझे यकीन नहीं है कि llvm-link आंतरिककरण पास करता है या नहीं।

+0

एक आकर्षण की तरह काम किया – capitrane

+0

मैं आंतरिककरण पास कैसे शुरू कर सकता हूं? – osgx

+0

@osgx: 'createInternalizePass' ('lib/transforms/IPO/Internalize.cpp') पर देखें। –