llvm IR常用指令一
终结指令
ret指令
ret < type> < value>;返回特定类型返回值的return指令
ret void;无返回值的return指令
1 | Test: |
br指令
br i1 < cond>,label < iftrue>,label < iffalse>;有条件跳转
br label < dest>;无条件分支
1 | Test: |
icmp指令
< result> = icmp < cond> < ty> < op1> < op2>;比较两个ty类型的数是否满足条件cond
1 | Test: |
fcmp指令
< result>= fcmp < cond> < ty> < op1> < op2>;比较两个浮点数是否满足条件cond
1 | Test: |
switch指令
switch < intty> < value>, label < defaultdest> [ < intty> < val>,label < dest>…]
1 | Test: |
二元运算
add指令
< result> = add < ty> < op1>, < op2>
1 | <result>=add i32 4,%var;4+%var |
sub指令
< result> = sub < ty> < op1>, < op2>
mul指令
< result> = mul < ty> < op1>, < op2>
udiv指令
< result> = udiv < ty> < op1>, < op2>;无符号整除
< result> = udiv exact < ty> < op1>, < op2>;如果结果不是整数会报错
sdiv指令
< result> = sdiv < ty> < op1>, < op2>;有符号整除
< result> = sdiv exact < ty> < op1>, < op2>;如果结果不是整数会报错
urem指令
< result> = urem < ty> < op1>, < op2>;无符号取余
srem指令
< result> = srem < ty> < op1>, < op2>;有 符号取余
按位二元运算
shl指令
< result> = shl < ty> < op1>, < op2>;整数左移op1<<op2
lshr指令
< result> = lshr < ty> < op1>, < op2>;整数逻辑右移,会变为无符号类型
ashr指令
< result> = ashr < ty> < op1>, < op2>;整数算数右移
1 | Difference: |
and指令
< result> = and < ty> < op1>, < op2>;整数按位与
or指令
< result> = or < ty> < op1>, < op2>;整数按位或
xor指令
< result> = ashr < ty> < op1>, < op2>;整数按位异或