支持LLVM中的非具体“iN”类型

时间:2017-05-28 19:39:36

标签: types llvm specialization

我只是想知道,我在文档中到处搜索, 但LLVM是否支持非具体类型

非具体我的意思是,直到运行时键入“iN”,然后可能会运行一种单态化传递(参见下面的示例),将“iN”类型具体化为“i56”,具体取决于运行时参数。

希望使用LLVM ORC JIT API,这将简化所有内容,但不是我希望使用的内容。

以下是我需要应用的转换的示例场景。 (请注意,下面的语言是我试图在LLVM中构建编译器的自定义语言。)

(可能有许多棘手的案例,但这是一个基本的示例场景。 我曾考虑在AST级别为我的自定义语言构建一个SSA表单,但我想在制作自己的自定义SSA表单之前探索LLVM IR中的任何可能选项。

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 个答案:

答案 0 :(得分:1)

没有。 LLVM IR是低级的,因此所有类型都应该是具体的。所有高级转换都应该在前端内部执行。如果您需要在运行时期间执行更改,则需要某种JIT。