2017-05-28 37 views
0

我只是想知道,我在文檔 中的任何地方搜索過,但LLVM是否支持非具體類型支持LLVM中的非具體「iN」類型

通過非具體的我的意思是,直到運行時輸入類似於「iN」,然後可能運行一種monomorphization pass(請參見下面的示例)以將「iN」類型具體化爲「i56」,具體取決於運行時參數。

不要希望使用LLVM ORC JIT API,它可以簡化所有事情,但不是我想要使用的東西。

以下是我需要應用的轉換的示例場景。 (請注意,下面的語言是Im試圖在LLVM中構建編譯器的自定義語言)。

(可以有很多棘手的情況下,但是這是一個基本的例子場景。 我已經考慮在AST水平構建SSA形式爲我定製的語言,但我想作出之前探討在LLVM IR任何可能的選擇我自己定製的SSA表格)

Before Transformation - 

(bits(datasize)) AddWithCarry(Boolean a) 
{ 
    integer datasize =if a 
        then 5; 
        else 9; 

    bits(datasize) res ; 

    return res; 

} 



(integer)main() 
{ 
     test(argv[1]); // command line argument 

} 

//=============================== 


After Transformation 

(bits(datasize)) AddWithCarry(Boolean a) 
{ 
     if a 
      then 
      bits(5) res ; 
      return res; 
     else 
      bits(9) res ; 
      return res; 


} 


(integer)main() 
{ 
     test(argv[1]); // command line argument 

} 

回答

1

編號LLVM IR是低級別的,所以所有的類型都應該是具體的。所有的高層次轉換應該在前端執行。如果您需要在運行時執行更改,則需要某種類型的JIT。

+0

我知道JIT的用法,那會更簡單。但是,我需要在不使用JIT的情況下執行此操作,所以我想知道是否有辦法在不爲我的自定義語言製作自定義SSA的情況下執行此操作... – mal

+0

對不起,我的意思是我的語言AST的自定義SSA表單。 – mal