Loop cloning with value types and some small fixes
tobias.hartmann at oracle.com
Wed Mar 15 11:58:42 UTC 2017
please review the following patch that fixes multiple problem (see below):
- Loop cloning creates phi nodes to merge loop exit values from the old and new loop bodies. ValueTypeNodes should not be merged through phi nodes but through their input values. I tried different approaches but Roland suggested to go with a PhiNode::Ideal transformation.
- Added safepoint re-wiring code to ValueTypeNode::Ideal because it can happen that the oop input is replaced by a non-NULL value without re-processing by Safepoint::Ideal()
- Changed oop null check to 'higher_equal' for consistency (for example, with LibraryCallKit::inline_unsafe_access)
- Added an assert to split if in case we ever try to split a value type through a phi
- Added -XX:+IgnoreUnrecognizedVMOptions to tests to ignore debug flag settings in product builds
- Only disable ValueTypePassFieldsAsArgs on non-x86_64 (was disabled on all non-Linux platforms by accident)
- Disable IR verification if ValueTypePassFieldsAsArgs is not supported because we would need to add additional matching rules for those flag combinations
Thanks to Mr. Simms and Frederic for reporting some of the problems. Thanks to Roland for helping to fix clone_loop.
More information about the valhalla-dev