Types “非混凝土支架”;在;LLVM中的类型

Types “非混凝土支架”;在;LLVM中的类型,types,llvm,specialization,Types,Llvm,Specialization,我只是想知道,我在文件里到处都找遍了, 但是LLVM是否支持非具体类型 非具体的意思是,在运行时之前输入“iN”,然后根据运行时参数,可能会运行一种单形态传递(见下面的示例),将“iN”类型具体化为“i56”类型 我不希望使用LLVM ORC JIT API,它可以简化一切,但不是我希望使用的东西 以下是我需要应用的转换的示例场景。 (请注意,下面的语言是一种自定义语言,我正试图在LLVM中为其构建编译器)。 (可能有许多棘手的情况,但这是一个基本的示例场景。 我曾考虑在AST级别为我的自定义语

我只是想知道,我在文件里到处都找遍了, 但是LLVM是否支持非具体类型

非具体的意思是,在运行时之前输入“iN”,然后根据运行时参数,可能会运行一种单形态传递(见下面的示例),将“iN”类型具体化为“i56”类型

我不希望使用LLVM ORC JIT API,它可以简化一切,但不是我希望使用的东西

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

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


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

我知道JIT的用法,这会简单得多。但是,我需要在不使用JIT的情况下完成此操作,因此我想知道是否有一种方法可以在不为我的自定义语言创建自定义SSA的情况下完成此操作…对不起,我是指为我的语言的AST创建自定义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

}