binop: bool eql/neq

This commit is contained in:
visualfc
2024-05-10 20:58:35 +08:00
parent e985eda857
commit aae663e5e5
3 changed files with 117 additions and 84 deletions

View File

@@ -258,6 +258,11 @@ var floatPredOpToLLVM = []llvm.FloatPredicate{
token.GEQ - predOpBase: llvm.FloatOGE,
}
var boolPredOpToLLVM = []llvm.IntPredicate{
token.EQL - predOpBase: llvm.IntEQ,
token.NEQ - predOpBase: llvm.IntNE,
}
// EQL NEQ LSS LEQ GTR GEQ == != < <= < >=
func isPredOp(op token.Token) bool {
return op >= predOpBase && op <= predOpLast
@@ -311,7 +316,10 @@ func (b Builder) BinOp(op token.Token, x, y Expr) Expr {
case vkFloat:
pred := floatPredOpToLLVM[op-predOpBase]
return Expr{llvm.CreateFCmp(b.impl, pred, x.impl, y.impl), tret}
case vkString, vkComplex, vkBool:
case vkBool:
pred := boolPredOpToLLVM[op-predOpBase]
return Expr{llvm.CreateICmp(b.impl, pred, x.impl, y.impl), tret}
case vkString, vkComplex:
panic("todo")
}
}