Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
Disable the AddLocalVarLoadStore pass to fix #3891. #3898
This was a good experiment, but we're not properly ensuring the
It may be possible to improve the pass so that it localizes the
This was a good experiment, but we're not properly ensuring the heap variables are being loaded live when needed, causing examples like that in #3891 to fail to propagate changes across threads. By implementing LocalVariable load/store logic in JIT and turning off the "Add" pass, we basically revert heap vars to always being read/written immediately, as in JRuby 1.7.25. It may be possible to improve the pass so that it localizes the loads and stores better and ensures we don't miss updates we should see, but this commit will test whether the "nuclear option" passes all our suites.
Many places just used jvmStoreLocal to store the variable, which assumed (because we only ran with call protocol in place) that all such stores would be to Java locals. I refactored this method to support LocalVariable as well as a different form that avoids stack-juggling to insert the value into the scope. This appears to get almost all code compiling that compiled before.
This is now working well, and the fixes here should probably not be squashed because there's other bits and pieces with important history.
I did discover #3906 and related minor issues in the process of getting this passing tests. With #3906 outstanding, there's a chance this PR might cause OptimizeDelegation to never work in the presence of keyword arguments, since we do not keep everything in JVM locals anymore.