-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
inlining: Use tmeet
on inserted PiNode
types for extended lattices
#54105
Conversation
I don't know if this makes sense. The type was not refined in the base lattice. I think the external absint may want to set this itself when doing the lattice extension. |
In the case I hit this, we're running with an extended optimizer lattice where the input to the PiNode is already an extended element, so that the new type we insert does not end up being a subtype. |
ebd3e24
to
a4cad91
Compare
PiNode
s for refinementtmeet
on inserted PiNode
types for extended lattices
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nanosoldier runbenchmarks("inference", vs=":master")
@nanosoldier |
Your benchmark job has completed - possible performance regressions were detected. A full report can be found here. |
The benchmark looks fine. |
For extended lattice elements, the type of the resulting PiNode can end up imprecise when `tmeet(argextype(argex), mft) ⊑ mft`
The motivation for this is the same as JuliaLang#54105, where the return types being filled in by inference can in general be imprecise when running the compiler with an extended lattice. This PR is very incomplete - There are at least 6+ more places in `inlining.jl` where we hard-code return types that will need similar treatment.
99a6efc
to
140ea49
Compare
The motivation for this is the same as JuliaLang#54105, where the return types being filled in by inference can in general be imprecise when running the compiler with an extended lattice. This PR is very incomplete - There are at least 6+ more places in `inlining.jl` where we hard-code return types that will need similar treatment.
The motivation for this is the same as #54105, where the return types being filled in by inference can in general be imprecise when running the compiler with an extended lattice. Note that this PR is very incomplete. There are at least 6+ more places in `inlining.jl` where we hard-code return types that will need similar treatment, but for now this resolves some downstream bugs from these imprecise types.
For extended lattice elements, the type of the resulting PiNode can end up imprecise when
tmeet(argextype(argex), mft) ⊑ mft
That said, it's not entirely clear to me what our
IR_FLAG_REFINED
obligations are in the first place. Are we supposed to mark any statements that are widened past what inference would have seen? If so, it seems like we fall far short of that.