when: emit lookupswitch/tableswitch if possible
A lookupswitch or tableswitch can be used if all conditions are equality
checks to constants. To be more specific, it can be done if:
1. All conditions are CALL 'EQEQ(Any?, Any?)': Boolean
2. All types of variables involved in comparison are in the same group
of Char/Byte/Short/Int, String or enum.
3. All arg0 refer to the same value.
4. All arg1 are IrConst<*>.
Change-Id: Ifd7cb618395f6c5cc64601018b446f0bb7f5891c
This commit is contained in:
committed by
max-kammerer
parent
f5d0a38629
commit
c1d721a15f
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
const val A = 10
|
||||
private const val B = 20
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fun foo(x: Int): String {
|
||||
return when (x) {
|
||||
100 -> "1"
|
||||
200 -> "2"
|
||||
300 -> "3"
|
||||
else -> "else"
|
||||
}
|
||||
}
|
||||
|
||||
// 1 LOOKUPSWITCH
|
||||
// 0 TABLESWITCH
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
object Constants {
|
||||
const val A = 30
|
||||
const val B = 40
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
const val A = 10
|
||||
private const val B = 20
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fun foo(x: Int): String {
|
||||
return when (x) {
|
||||
101 -> "1"
|
||||
102 -> "2"
|
||||
103 -> "3"
|
||||
else -> "else"
|
||||
}
|
||||
}
|
||||
|
||||
// 0 LOOKUPSWITCH
|
||||
// 1 TABLESWITCH
|
||||
Reference in New Issue
Block a user