Disable LLVM Global Isel#9401
Conversation
It's not enabled by default on x86, but on other targets it is. At least until https://reviews.llvm.org/D80898 is released, it doesn't like us generating a value of a zero sized type We may need to fix doing that, but until then this workarounds the issue. See crystal-lang#9297 (comment) for more background.
|
Oh yeah, fixes #8080 / worksaround (I didn't know we had an issue ticket for this). |
|
@jhass is it GlobalIsel used in x86_64? Do you know what are the zero sized values that are currently being generated? |
|
According to the hints I got in IRC it's not by default and barely implemented there. I don't know for certain why they are generated, but I suspect something around I found it through bugpoint, so it's a bit hard to correlate back to the original code. |
|
nil is such a type: |
|
Yeah, I forgot, in the comment linked above I actually related it back to (an instance of) the original code. So it has to do with nil return type procs. |
|
Strange, for nil return type procs I would expect that to translate to Also, nothing prevents a user from creating an empty struct... |
|
Also LLVM acknowledged and fixed this as a bug, so while I got a few why the hell do you do this in response, it seems legit if we do the easy thing right now and apply this workaround. |
|
Ok, but what's the current implication of disabling it? Are we going to get less performance in some platforms or what? |
|
Maybe? But I think it's only slightly and a big point is also an architectural change within LLVM allowing them to do more or different things in the future. |
It's not enabled by default on x86, but on other targets it is. At least until https://reviews.llvm.org/D80898 is released, it doesn't like us generating a value of a zero sized type
We may need to fix doing that, but until then this workarounds the issue.
See #9297 (comment) for more background.