1
LLVM中是否有一個通行證或某種東西,它會將給定的llvm::Module
序列化爲二進制形式,然後將這些數據放入源模塊中?所以當我將它鏈接成二進制文件時,我最終會得到一個編碼代碼的代碼表示,它與單個文件中的本地代碼相鏈接?將程序的位代碼附加到二進制文件中
如果不是,你能否就如何實現這一點提供一些建議?
LLVM中是否有一個通行證或某種東西,它會將給定的llvm::Module
序列化爲二進制形式,然後將這些數據放入源模塊中?所以當我將它鏈接成二進制文件時,我最終會得到一個編碼代碼的代碼表示,它與單個文件中的本地代碼相鏈接?將程序的位代碼附加到二進制文件中
如果不是,你能否就如何實現這一點提供一些建議?
此功能部分在Clang/LLVM中實現,現稱爲ThinLTO。現在可以運行clang -c -emit-llvm -flto=thin source.cpp
,這將生成一個嵌入了相同位碼的LLVM位碼文件。支持使用嵌入式位代碼編寫本地對象文件正在開發中。
你爲什麼要這麼做?一些基於運行時配置文件的延遲優化你將如何訪問該模塊? –
我認爲,指向bitcode的指針可以像字符串常量或只是'extern void * m'一樣導出。我會使用這個指針將它反序列化爲本地級別的'llvm :: Module *'。 – arrowd
在反序列化之後你會用它做什麼? –