Add paths to *DynamicScope that don't check nulls, offsets.#4168
Merged
headius merged 2 commits intojruby:masterfrom Sep 22, 2016
Merged
Add paths to *DynamicScope that don't check nulls, offsets.#4168headius merged 2 commits intojruby:masterfrom
headius merged 2 commits intojruby:masterfrom
Conversation
Our IR performes liveness checks on variables and should never emit code that accesses variable indices outside the prescribed scope size. This patch adds new getters that do not perform these unnecessary checks, and wires up the JIT to call them. This patch does not modify Full interpretation to use these unchecked paths, because it would require either a boolean in LocalVariaable operand and LoadLocalVariable instruction or a pass to replace them with "Unchecked" versions. It would also be better if we could generate these shapes of DynamicScope on the fly, rather than maintaining a finite set of mostly-identical subclasses. See jruby#4167.
Member
Author
|
The one JIT failure appears to be in this method; the "object" variable here is coming back as null. Why? lib/ruby/stdlib/test/unit/assertions.rb:393 def assert_nil(object, message="")
full_message = build_message(message, <<EOT, object)
<?> expected to be nil.
EOT
assert_block(full_message) { object.nil? } # this nil? call fails
end |
Member
Author
|
Ok I think the error is because Thread#name is not initialized to any value. It's returning nulls into Ruby! Pushing a fix shortly. |
This was returning null into Ruby for any thread that did not have a name, which could cause NullPointerException far away from the point of call. It was masked in some cases by our DynamicScope logic that checks for null values, but jruby#4168 removes those checks for the JIT.
Member
Author
|
At least the Thread#name fix needs to get into 9.1.6.0. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Our IR performes liveness checks on variables and should never
emit code that accesses variable indices outside the prescribed
scope size. This patch adds new getters that do not perform these
unnecessary checks, and wires up the JIT to call them.
This patch does not modify Full interpretation to use these
unchecked paths, because it would require either a boolean in
LocalVariaable operand and LoadLocalVariable instruction or a
pass to replace them with "Unchecked" versions.
It would also be better if we could generate these shapes of
DynamicScope on the fly, rather than maintaining a finite set of
mostly-identical subclasses.
See #4167.