-
Bug
-
Resolution: Fixed
-
P3
-
8, 9, 10, 11, 12, 13, 14, 15, 16
-
The issue affects all LP64 platforms.
-
b24
The execution time and memory consumption of ConvI2LNode::Ideal() grows exponentially in programs with AddI operation chains followed by an int-to-long conversion. This seems to be due to the ConvI2L(AddI(x, y)) to AddL(ConvI2L(x), ConvI2L(y)) conversion growing exponentially with the length of AddI operation chains. This behavior can be seen in the attached plot. Beyond n = 24, the JVM exhausts the main memory (32 GB) and is killed.
To reproduce the (preliminary) measurements shown in the plot, run the following on the attached TestReduced.java.orig:
for n in {1..25}; do echo "$n" && cat TestReduced.java.orig | sed "s/N/$n/g" > TestReduced.java && java -Xcomp -XX:-TieredCompilation -XX:CompileOnly=TestReduced -XX:+CITime TestReduced.java | grep IdealLoop | grep -v "0,000"; done
To reproduce the (preliminary) measurements shown in the plot, run the following on the attached TestReduced.java.orig:
for n in {1..25}; do echo "$n" && cat TestReduced.java.orig | sed "s/N/$n/g" > TestReduced.java && java -Xcomp -XX:-TieredCompilation -XX:CompileOnly=TestReduced -XX:+CITime TestReduced.java | grep IdealLoop | grep -v "0,000"; done
- relates to
-
JDK-8237950 C2 compilation fails with "Live Node limit exceeded limit" during ConvI2L::Ideal optimization
- Resolved
-
JDK-8253404 C2: assert(C->live_nodes() <= C->max_node_limit()) failed: Live Node limit exceeded limit
- Resolved