diff --git a/ssa/expr.go b/ssa/expr.go index bf9d8e0b..4b179ea8 100644 --- a/ssa/expr.go +++ b/ssa/expr.go @@ -501,6 +501,12 @@ func (b Builder) BinOp(op token.Token, x, y Expr) Expr { case vkUnsigned, vkPtr: pred := uintPredOpToLLVM[op-predOpBase] return Expr{llvm.CreateICmp(b.impl, pred, x.impl, y.impl), tret} + case vkMap: + switch op { + case token.EQL, token.NEQ: + pred := uintPredOpToLLVM[op-predOpBase] + return Expr{llvm.CreateICmp(b.impl, pred, x.impl, y.impl), tret} + } case vkFloat: pred := floatPredOpToLLVM[op-predOpBase] return Expr{llvm.CreateFCmp(b.impl, pred, x.impl, y.impl), tret} @@ -552,7 +558,7 @@ func (b Builder) BinOp(op token.Token, x, y Expr) Expr { fallthrough case vkFuncPtr, vkFuncDecl: switch op { - case token.EQL: + case token.EQL: // TODO(xsw): check this code return b.Prog.BoolVal(x.impl.IsNull() == y.impl.IsNull()) case token.NEQ: return b.Prog.BoolVal(x.impl.IsNull() != y.impl.IsNull()) @@ -605,13 +611,6 @@ func (b Builder) BinOp(op token.Token, x, y Expr) Expr { case token.NEQ: return Expr{b.impl.CreateICmp(llvm.IntNE, dx, dy, ""), tret} } - case vkMap: - switch op { - case token.EQL: - return b.Prog.BoolVal(x.impl.IsNull() == y.impl.IsNull()) - case token.NEQ: - return b.Prog.BoolVal(x.impl.IsNull() != y.impl.IsNull()) - } case vkIface, vkEface: toEface := func(x Expr, emtpy bool) Expr { if emtpy {