-
Bug
-
Resolution: Fixed
-
P4
-
8-shenandoah, 11.0.9, 14, 15
-
b26
-
generic
-
generic
Just before expanding LRBs in C2, we check whether or not the LRB is actually used for anything useful. This optimization is a bit odd, it doesn't really follow the usual pattern for such things (it should be done by overwriting Ideal/Identity in the consuming node, and the LRB would be eliminated when it has no users left).
Also, the optimization doesn't actually seem to have any positive effect anymore. It used to be significant when we had to deal with null-checks, but this is gone. The only other thing left is OptimizeStaticFinals, which is already covered by C2 because it inlines such fields as constants.
Also, this blocks an improvement to ensure that there's no safepoints between loads and LRBs because eliminating the LRB can leave from-space oops in local variables.
Also, the optimization doesn't actually seem to have any positive effect anymore. It used to be significant when we had to deal with null-checks, but this is gone. The only other thing left is OptimizeStaticFinals, which is already covered by C2 because it inlines such fields as constants.
Also, this blocks an improvement to ensure that there's no safepoints between loads and LRBs because eliminating the LRB can leave from-space oops in local variables.