< prev index next >

test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/MainKlassFactory.java

Print this page

        

@@ -115,17 +115,18 @@
     private void ensureMaxDepth(List<IRNode> childs) {
         int maxDepth = ProductionParams.maxCfgDepth.value();
         List<IRNode> filtered = childs.stream()
             .filter(c -> c.isCFDeviation() && c.countDepth() > maxDepth)
             .collect(Collectors.toList());
+        /* Now attempt to reduce depth by removing optional parts of control deviation
+           blocks in case IRTree has oversized depth */
         for (IRNode child : filtered) {
-            List<IRNode> leaves;
-            do {
-                long depth = Math.max(child.countDepth(), maxDepth + 1);
-                leaves = child.getDeviantBlocks(depth);
-                leaves.get(0).removeSelf();
-            } while (!leaves.isEmpty() && child.countDepth() > maxDepth);
+            for (IRNode leaf : child.getDeviantBlocks(Math.max(child.countDepth(), maxDepth + 1))) {
+                if (child.countDepth() > maxDepth) {
+                    leaf.removeSelf(); // Doesn't remove control deviation block. Just some parts.
+                }
+            }
         }
     }
 
     private void ensureMinDepth(List<IRNode> childs, IRNodeBuilder builder)
             throws ProductionFailedException {

@@ -134,10 +135,15 @@
         addMoreChildren(filtered, minDepth, builder);
     }
 
     private void addMoreChildren(List<IRNode> childs, int minDepth, IRNodeBuilder builder)
             throws ProductionFailedException {
+        /* check when no stackable leaves available in all childs and skip addition for this case */
+        if (childs.stream().filter(c -> c.getStackableLeaves().size() > 0).count() == 0) {
+            return;
+        }
+        /* now let's try to add children */
         while (!childs.isEmpty() && IRNode.countDepth(childs) < minDepth) {
             IRNode randomChild = childs.get(PseudoRandom.randomNotNegative(childs.size()));
             List<IRNode> leaves = randomChild.getStackableLeaves();
             if (!leaves.isEmpty()) {
                 Block randomLeaf = (Block) leaves.get(PseudoRandom.randomNotNegative(leaves.size()));
< prev index next >