RFR: 8279258: Auto-vectorization enhancement for two-dimensional array operations [v5]
Jie Fu
jiefu at openjdk.java.net
Wed Jan 5 08:56:17 UTC 2022
On Wed, 5 Jan 2022 02:33:36 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
> Can you investigate why `HasRangeChecks` flag is still set?
This is because once HasRangeChecks flag is set, it will never be cleared.
Proposed fix:
diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp
index beb6c5a2830..e0b2fb77c35 100644
--- a/src/hotspot/share/opto/loopTransform.cpp
+++ b/src/hotspot/share/opto/loopTransform.cpp
@@ -3540,6 +3540,8 @@ bool IdealLoopTree::iteration_split_impl(PhaseIdealLoop *phase, Node_List &old_n
if (should_rce) {
if (phase->do_range_check(this, old_new) != 0) {
cl->mark_has_range_checks();
+ } else {
+ cl->clear_has_range_checks();
}
} else if (PostLoopMultiversioning) {
phase->has_range_checks(this);
diff --git a/src/hotspot/share/opto/loopnode.hpp b/src/hotspot/share/opto/loopnode.hpp
index 4e6a56f60ba..18145a51839 100644
--- a/src/hotspot/share/opto/loopnode.hpp
+++ b/src/hotspot/share/opto/loopnode.hpp
@@ -114,6 +114,7 @@ public:
void mark_loop_vectorized() { _loop_flags |= VectorizedLoop; }
void mark_has_atomic_post_loop() { _loop_flags |= HasAtomicPostLoop; }
void mark_has_range_checks() { _loop_flags |= HasRangeChecks; }
+ void clear_has_range_checks() { _loop_flags &= ~HasRangeChecks; }
void mark_is_multiversioned() { _loop_flags |= IsMultiversioned; }
void mark_strip_mined() { _loop_flags |= StripMined; }
void clear_strip_mined() { _loop_flags &= ~StripMined; }
But I would suggest fixing it in a separate JBS issue.
What do you think?
-------------
PR: https://git.openjdk.java.net/jdk/pull/6933
More information about the hotspot-compiler-dev
mailing list