ssa: interface equal

This commit is contained in:
visualfc
2024-06-11 10:24:30 +08:00
parent 439a69f413
commit bdf1c275c4
4 changed files with 150 additions and 6 deletions

View File

@@ -425,6 +425,16 @@ func (b Builder) BinOp(op token.Token, x, y Expr) Expr {
ret.impl = llvm.CreateNot(b.impl, ret.impl)
return ret
}
case vkIface, vkEface:
prog := b.Prog
switch op {
case token.EQL:
return b.InlineCall(b.Pkg.rtFunc("InterfaceEqual"), x, y, prog.BoolVal(x.kind == vkEface), prog.BoolVal(y.kind == vkEface))
case token.NEQ:
ret := b.InlineCall(b.Pkg.rtFunc("InterfaceEqual"), x, y, prog.BoolVal(x.kind == vkEface), prog.BoolVal(y.kind == vkEface))
ret.impl = llvm.CreateNot(b.impl, ret.impl)
return ret
}
}
}
panic("todo")