ssa: BinOp (map equal) fix
This commit is contained in:
15
ssa/expr.go
15
ssa/expr.go
@@ -501,6 +501,12 @@ func (b Builder) BinOp(op token.Token, x, y Expr) Expr {
|
|||||||
case vkUnsigned, vkPtr:
|
case vkUnsigned, vkPtr:
|
||||||
pred := uintPredOpToLLVM[op-predOpBase]
|
pred := uintPredOpToLLVM[op-predOpBase]
|
||||||
return Expr{llvm.CreateICmp(b.impl, pred, x.impl, y.impl), tret}
|
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:
|
case vkFloat:
|
||||||
pred := floatPredOpToLLVM[op-predOpBase]
|
pred := floatPredOpToLLVM[op-predOpBase]
|
||||||
return Expr{llvm.CreateFCmp(b.impl, pred, x.impl, y.impl), tret}
|
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
|
fallthrough
|
||||||
case vkFuncPtr, vkFuncDecl:
|
case vkFuncPtr, vkFuncDecl:
|
||||||
switch op {
|
switch op {
|
||||||
case token.EQL:
|
case token.EQL: // TODO(xsw): check this code
|
||||||
return b.Prog.BoolVal(x.impl.IsNull() == y.impl.IsNull())
|
return b.Prog.BoolVal(x.impl.IsNull() == y.impl.IsNull())
|
||||||
case token.NEQ:
|
case token.NEQ:
|
||||||
return b.Prog.BoolVal(x.impl.IsNull() != y.impl.IsNull())
|
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:
|
case token.NEQ:
|
||||||
return Expr{b.impl.CreateICmp(llvm.IntNE, dx, dy, ""), tret}
|
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:
|
case vkIface, vkEface:
|
||||||
toEface := func(x Expr, emtpy bool) Expr {
|
toEface := func(x Expr, emtpy bool) Expr {
|
||||||
if emtpy {
|
if emtpy {
|
||||||
|
|||||||
Reference in New Issue
Block a user