1. 程式人生 > >llvm clang JIT 程式 5.0.2

llvm clang JIT 程式 5.0.2

   windows vs2015 based:網上各種 jit demo已經是無效了。至少在3.9 以後的版本都是無法直接使用的。實際使用情況是這樣的:

   使用llvm自帶HowToUseJITdemo修改: 程式碼如下,並需要新增lib:

..\..\Release\lib\LLVMIRReader.lib

..\..\Release\lib\LLVMAsmParser.lib

..\..\Release\lib\LLVMMCJIT.lib

  以下是程式碼 直接cpp 貼過來的。

#include "llvm/ADT/STLExtras.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
#include "llvm/ExecutionEngine/MCJIT/MCJIT.h"

#include <algorithm>
#include <cassert>
#include <memory>
#include <vector>
#include <system_error>

#include <string>

using namespace llvm;


int main() {
    //MyMethod();
    InitializeNativeTarget();
    InitializeNativeTargetAsmPrinter();
    //InitializeAllTargets();

    MCJIT::Register();
    LLVMContext Context;
    SMDiagnostic Err;
    std::string error_code;
    //Module *mod = llvm::parseIRFile("hello.bc", Err, context);
    //std::unique_ptr<Module> Owner = make_unique<Module>("g:/hello.bc", Context);
    std::unique_ptr<Module> Owner = parseIRFile("g:/hello.bc", Err, Context);
    Module *M = Owner.get();
    /*EngineBuilder eb = EngineBuilder(mod);
    eb.setEngineKind(EngineKind::JIT);
    eb.setErrorStr(&error_code);
    ExecutionEngine* EE = eb.create();*/
    
    //Function *HelloF = cast<Function>(M->getOrInsertFunction("main", Type::getInt32Ty(Context)));
    Function *HelloF = M->getFunction("main");
    //Function* func = NULL;
    //func = mod->getFunction("_Z13CalcVaildRowsPPii");
    /*if (func == NULL)
    {
        std::cout << "--Night-- get function error.." << std::endl;
        return 0;
    }*/
    //BasicBlock *BB = BasicBlock::Create(Context, "EntryBlock", HelloF);

    std::string ErrStr;
    ExecutionEngine* EE(NULL);
    //EE = EngineBuilder(std::move(Owner)).create();
    //
    RTDyldMemoryManager* RTDyldMM = new SectionMemoryManager();
    EE = EngineBuilder(std::move(Owner))
        .setEngineKind(EngineKind::JIT)
        .setErrorStr(&ErrStr)
        .setVerifyModules(true)
//         .setMCJITMemoryManager(std::unique_ptr<RTDyldMemoryManager>(RTDyldMM))
//         .setOptLevel(CodeGenOpt::Default)
        .create();
    //
    EE->finalizeObject();
    std::vector<GenericValue> noargs;
    GenericValue gv = EE->runFunction(HelloF, noargs);

    /*void* jitAddr = EE->getPointerToFunction(func);
    EE->freeMachineCodeForFunction(func);*/
    delete EE;
    llvm_shutdown();
    return 0;
}


相關推薦

llvm clang JIT 程式 5.0.2

   windows vs2015 based:網上各種 jit demo已經是無效了。至少在3.9 以後的版本都是無法直接使用的。實際使用情況是這樣的:   使用llvm自帶HowToUseJITdemo修改: 程式碼如下,並需要新增lib: ..\..\Release\l

Android-5.0.2 BnServiceManager addService不存在的

status_t BnServiceManager::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { //printf("ServiceMa

redis_version:5.0.2 哨兵模式配置檔案

剛剛學習了一下redis的哨兵,這裡記錄一下: 哨兵模式設定裡面需要注意的是redis密碼, # Example sentinel.conf port 26379 daemonize no pidfile "/var/run/redis-sentinel.pid" logfile "

WordPress 5.0.2 釋出,發帖速度提升 330%

   WordPress 5.0.2 已釋出,這是一個維護版本,解決了73項錯誤,主要聚焦於塊編輯器的效能改進,發帖速度提升330%。 更新亮點: 45項塊編輯器相關改進(14項效能改進和31項錯誤修復) 17個與塊編輯器相關的 bug 在所有捆綁主題中得到了修復 與指

redis(版本redis-5.0.2)的安裝步驟

Linux版本1、解壓redis-5.0.2.tar.gz檔案2、進入解壓後redis目錄,執行make安裝命令時提示安裝錯誤(提示gcc命令沒有找到,需要安裝gcc)解決方案一:通過光碟yum源安裝(製作光碟yum源的文章)yum install gcc-c++解決方案二:解決依賴的文章詳見(http://

redis cluster 集群搭建(增、刪、改、查) :5.0.2

The 簡單命令 dde sta ranch 取整 sets sel 默認 環境簡介: 1:centos 7 ; 2:redis version 5.0.2 ; 3: 安裝方式:編譯安裝 ; 4:。。。 創建集群 節點IP地址 10.42.166.105:637

QT 5.0.2 VS2010開發環境搭建

MSVC2010、MSVC2012分別是指支援VS2010與VS2012的Qt版本,而opengl與非opengl的區別是是 否支援opengl,android、ios分別是指支援android、ios平臺的Qt版本,我選擇的是 VS2010 485M那 個。 1)Q

分布式配置hadoop2.5.0 2.6.x

nta aux log start conf 一個 ssi 重啟 保留 1. sudo vim /etc/hostname   在master的機器上,改成 master   在slave上寫 slave01,02,03......   配置好後重啟

NET5 ORM 六大新功能 - SqlSugar 5.0.2.7

介紹  SqlSugar是一款 老牌 .NET 開源ORM框架,並且在第一時間相容.NET5,由果糖大資料科技團隊維護和更新 ,Github star數僅次於EF 和 Dapper 優點: 簡單易用、功能齊全、高效能、輕量級、服務齊全、有專業技術支援一天18小時服務 支援資料庫:MySql、SqlS

Victor 串口控件 1.5.0.6 VCL/FMX for C++ Builder 10.2 Tokyo, 10.1 Berlin, 10.0 Seattle, XE8, XE7, XE6 已經發布

blank sms mac 使用 模板 www 文本 clas stat Victor 串口控件 1.5.0.6 更新內容: ? 增加支持 FMX (Firemonkey) Win32/Win64,控件包含 VCL 和 FMX 兩個框架版本的,可以同時安裝 ? 增加

CentOS 7.2下安裝Mono 5.0

nbsp 很好 all win ack style 領域 logs 平臺 微軟Build2017大會期間.NET領域的.NET core之外,就是Visual Studio For Mac,大家都知道Visual Studio For Mac 是基於Mono運行的,Mono

Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac沖突的問題

ring led sem form pic red origin ack could 在部署到iis的時候會出現這個狀況。 解決:下載安裝這個補丁 http://support.microsoft.com/kb/2468871 http://www.microsoft

thinkPHP輸出sql語句(3.25.0通用)

blog dump bsp where select() div 5.0 lec asd //5.0$qwe = db::table(‘think_user‘)->where(‘id‘,1)->fetchsql()->column(‘name‘);  d

1月28日周日,更新ruby到2.5.0版,rvm更新。

一課 比較 全棧 body 安裝 auto 文檔 code post 在學習Array的方法的時候,發現文檔concat方法可以進行多個數組的添加,而我的不行,猜測是ruby版本沒有更新。 查詢2.31ruby版本的concat方法,果然和2.5版本的不一樣。 於是準備更

Win10升級.NET Framework 3.52.0遇到錯誤0x800f081f怎麽辦

window system32 位置 enable 所在 2.0 log dism ble 很多用戶都會在電腦中安裝.NET Framework 3.5或.NET Framework 2.0。不過,部分用戶在更新升級.NET Framework 3.5和2.0時,卻遇到了0

Android探究2:Android 5.0下 Dialog&AlertDialog 並不會影響Activity的生命周期

lac wid cancel test () onclick posit make div 先給出結論:Dialog和AlertDialog並不會影響到Activity的生命周期,但會影響到Activity的優先級。 核心代碼: onCreated中:

Light Image Resizer(5.1.2.0)圖片批量處理工具便攜已註冊版

dib html 清晰 adobe cut 當前 支持 IT 水印 之前也分享過這類圖片批量處理工具,都還可以,今天就在來分享一個,這次的ui界面雞哥感覺還行,今天介紹的這個工具是Light Image Resizer,它可以把一張或多張圖片批量改大小,只需要把那些圖片拖到

5.0助手函數及與3.2版本的單字母函數對比

導入 ESS 管理 調試 輸入數據 ont http t對象 狀態碼 5.0助手函數 助手函數描述 abort 中斷執行並發送HTTP狀態碼 action 調用控制器類的操作 cache 緩存管理 config 獲取和設置配置參數 controll

Could not load file or assembly 'System.Core, Version=2.0.5.0

ould tps 安裝 5.0 not com .aspx mic details 項目中用的4.0,本機沒問題,服務器上出現問題,查了一下發現 autofac 裏面用的這個版本 解決:下載安裝這個4.0的補丁 http://support.microsoft.c