我只是想知道,我在文档中到处搜索, 但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
}
答案 0 :(得分:1)
没有。 LLVM IR是低级的,因此所有类型都应该是具体的。所有高级转换都应该在前端内部执行。如果您需要在运行时期间执行更改,则需要某种JIT。