Use while loop for progressions that cannot overflow (instead of
do-while with enclosing "not empty" check). Also do not add additional "not empty" condition for `until` loops when the given bound is a constant != MIN_VALUE.
This commit is contained in:
committed by
max-kammerer
parent
ba0e016c4e
commit
7680e7fd56
@@ -0,0 +1,14 @@
|
||||
const val M = Char.MIN_VALUE
|
||||
|
||||
fun f(a: Char) {
|
||||
for (i in a downTo M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 2 IF
|
||||
@@ -0,0 +1,14 @@
|
||||
const val M = Int.MIN_VALUE
|
||||
|
||||
fun f(a: Int) {
|
||||
for (i in a downTo M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 2 IF_ICMP
|
||||
@@ -0,0 +1,15 @@
|
||||
const val M = Long.MIN_VALUE
|
||||
|
||||
fun f(a: Long) {
|
||||
for (i in a downTo M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 2 LCMP
|
||||
// 2 IF
|
||||
+1
-4
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
fun test() {
|
||||
var sum = 0
|
||||
for (i in arrayOf("", "", "", "").indices) {
|
||||
@@ -12,6 +11,4 @@ fun test() {
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
|
||||
// 0 IF_ICMPGT
|
||||
// 0 IF_ICMPEQ
|
||||
// 1 IF_ICMPGE
|
||||
// 1 IF_ICMP
|
||||
|
||||
+1
-4
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
fun test() {
|
||||
var sum = 0
|
||||
for (i in intArrayOf(0, 0, 0, 0).indices) {
|
||||
@@ -12,6 +11,4 @@ fun test() {
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
|
||||
// 0 IF_ICMPGT
|
||||
// 0 IF_ICMPEQ
|
||||
// 1 IF_ICMPGE
|
||||
// 1 IF_ICMP
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
const val N = 'Z'
|
||||
|
||||
fun test(): Int {
|
||||
@@ -9,5 +8,10 @@ fun test(): Int {
|
||||
return sum
|
||||
}
|
||||
|
||||
// 0 IF_ICMPEQ
|
||||
// 1 IF_ICMPGT
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 1 IF_ICMP
|
||||
@@ -0,0 +1,14 @@
|
||||
const val M = Char.MAX_VALUE
|
||||
|
||||
fun f(a: Char) {
|
||||
for (i in a..M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 2 IF_ICMP
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
const val N = 42
|
||||
|
||||
fun test(): Int {
|
||||
@@ -9,5 +8,10 @@ fun test(): Int {
|
||||
return sum
|
||||
}
|
||||
|
||||
// 0 IF_ICMPEQ
|
||||
// 1 IF_ICMPGT
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 1 IF_ICMP
|
||||
@@ -0,0 +1,14 @@
|
||||
const val M = Int.MAX_VALUE
|
||||
|
||||
fun f(a: Int) {
|
||||
for (i in a..M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 2 IF_ICMP
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
const val N = 42L
|
||||
|
||||
fun test(): Long {
|
||||
@@ -9,6 +8,14 @@ fun test(): Long {
|
||||
return sum
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 1 LCMP
|
||||
// 0 IFEQ
|
||||
// 1 IFGT
|
||||
// 1 IFGT
|
||||
// 0 L2I
|
||||
// 0 I2L
|
||||
@@ -0,0 +1,15 @@
|
||||
const val M = Long.MAX_VALUE
|
||||
|
||||
fun f(a: Long) {
|
||||
for (i in a..M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 2 LCMP
|
||||
// 2 IF
|
||||
+7
-3
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
object Host {
|
||||
const val M = 1
|
||||
const val N = 4
|
||||
@@ -12,5 +11,10 @@ fun test(): Int {
|
||||
return s
|
||||
}
|
||||
|
||||
// 0 IF_ICMPEQ
|
||||
// 1 IF_ICMPGT
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 1 IF_ICMP
|
||||
@@ -11,4 +11,5 @@ fun test(): Int {
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 0 getStep
|
||||
// 1 IF_ICMP
|
||||
@@ -0,0 +1,14 @@
|
||||
const val M = Char.MAX_VALUE
|
||||
|
||||
fun f(a: Char) {
|
||||
for (i in a until M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 1 IF_ICMP
|
||||
@@ -0,0 +1,14 @@
|
||||
const val M = Int.MAX_VALUE
|
||||
|
||||
fun f(a: Int) {
|
||||
for (i in a until M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 1 IF_ICMP
|
||||
@@ -0,0 +1,15 @@
|
||||
const val M = Long.MAX_VALUE
|
||||
|
||||
fun f(a: Long) {
|
||||
for (i in a until M) {
|
||||
}
|
||||
}
|
||||
|
||||
// 0 iterator
|
||||
// 0 getStart
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 1 LCMP
|
||||
// 1 IF
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
fun test(): Int {
|
||||
var sum = 0
|
||||
for (i in 4 downTo 1) {
|
||||
@@ -12,5 +11,4 @@ fun test(): Int {
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 IF_ICMPEQ
|
||||
// 1 IF_ICMPLT
|
||||
// 1 IF_ICMP
|
||||
@@ -8,4 +8,5 @@ fun f() {
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 0 getStep
|
||||
// 1 IF_ICMP
|
||||
@@ -8,4 +8,5 @@ fun f(a: Int, b: Int) {
|
||||
// 0 getEnd
|
||||
// 0 getFirst
|
||||
// 0 getLast
|
||||
// 0 getStep
|
||||
// 0 getStep
|
||||
// 2 IF_ICMP
|
||||
Reference in New Issue
Block a user