I am writing a compiler for a self-made language which can handle only int values i.e. i32
. Conditions and expressions are similar to C language. Thus, I am considering conditional statements as expressions i.e. they return an int value. They can also be used in expressions e.g (2 > 1) + (3 > 2)
will return 2
. But LLVM conditions output i1
value.
- Now, I want that after each conditional statement,
i1
should be converted intoi32
, so that I can carry out binary operations - Also, I want to use variables and expression results as condition e.g.
if(variable)
orif(a + b)
. For that I need to converti32
toi1
At the end, I want a way to typecast from i1
to i32
and from i32
to i1
. My code is giving these kinds of errors as of now :
For statement like if(variable)
:
error: branch condition must have 'i1' type
br i32 %0, label %ifb, label %else
^
For statement like a = b > 3
error: stored value and pointer type do not match
store i1 %gttmp, i32* @a
^
Any suggestion on how to do that ?
i32 -> i1
, so that TruncInst is emitted. – Mikeselli1 -> i32
you most probably need aCastInst
. – Mikesell