我正在编写一个编译器,用于处理仅限于int值(即i32)的自制语言。条件和表达式类似于C语言。因此,我将条件语句视为表达式,即它们返回一个int值。它们也可以用于表达式中,例如(2>1)+(3>2)将返回2。但是LLVM条件输出i1值。
现在,我希望在每个条件语句之后,将i1转换为i32,以便进行二进制运算。
另外,我想要使用变量和表达式结果作为条件,例如if(variable)或if(a+b)。为此,我需要将i32转换为i1。
最后,我希望有一种方法可以从i1转换为i32,以及从i32转换为i1。目前我的代码会出现这些错误:
对于像if(variable)这样的语句:
有没有关于如何做到这一点的建议?
现在,我希望在每个条件语句之后,将i1转换为i32,以便进行二进制运算。
另外,我想要使用变量和表达式结果作为条件,例如if(variable)或if(a+b)。为此,我需要将i32转换为i1。
最后,我希望有一种方法可以从i1转换为i32,以及从i32转换为i1。目前我的代码会出现这些错误:
对于像if(variable)这样的语句:
error: branch condition must have 'i1' type
br i32 %0, label %ifb, label %else
^
对于像a = b > 3
这样的语句
error: stored value and pointer type do not match
store i1 %gttmp, i32* @a
^
有没有关于如何做到这一点的建议?
i32 -> i1
,以便发出TruncInst。 - Stanislav Pankevichi1 -> i32
,你很可能需要使用CastInst
。 - Stanislav Pankevich