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