CFG exhaustive when else instruction for KT-8700
This commit is contained in:
committed by
Mikhail Glukhikh
parent
697228eae0
commit
b805ce06c2
@@ -0,0 +1,46 @@
|
||||
== Direction ==
|
||||
enum class Direction {
|
||||
NORTH, SOUTH, WEST, EAST
|
||||
}
|
||||
---------------------
|
||||
=====================
|
||||
== foo ==
|
||||
fun foo(dir: Direction): Int {
|
||||
val res: Int
|
||||
when (dir) {
|
||||
Direction.NORTH -> res = 1
|
||||
Direction.SOUTH -> res = 2
|
||||
Direction.WEST -> res = 3
|
||||
Direction.EAST -> res = 4
|
||||
}
|
||||
return res
|
||||
}
|
||||
---------------------
|
||||
<v0>: Direction NEW: magic[FAKE_INITIALIZER](dir: Direction) -> <v0>
|
||||
<v14>: * NEW: magic[EXHAUSTIVE_WHEN_ELSE](when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }) -> <v14>
|
||||
dir <v1>: * NEW: r(dir) -> <v1>
|
||||
NORTH <v2>: * NEW: r(NORTH) -> <v2>
|
||||
Direction.NORTH <v2>: * COPY
|
||||
Direction.NORTH <v3>: * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.NORTH|<v1>, <v2>) -> <v3>
|
||||
1 <v4>: Int NEW: r(1) -> <v4>
|
||||
res = 1 !<v15>: *
|
||||
SOUTH <v5>: * NEW: r(SOUTH) -> <v5>
|
||||
Direction.SOUTH <v5>: * COPY
|
||||
Direction.SOUTH <v6>: * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.SOUTH|<v1>, <v5>) -> <v6>
|
||||
2 <v7>: Int NEW: r(2) -> <v7>
|
||||
res = 2 !<v16>: *
|
||||
WEST <v8>: * NEW: r(WEST) -> <v8>
|
||||
Direction.WEST <v8>: * COPY
|
||||
Direction.WEST <v9>: * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.WEST|<v1>, <v8>) -> <v9>
|
||||
3 <v10>: Int NEW: r(3) -> <v10>
|
||||
res = 3 !<v17>: *
|
||||
EAST <v11>: * NEW: r(EAST) -> <v11>
|
||||
Direction.EAST <v11>: * COPY
|
||||
Direction.EAST <v12>: * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.EAST|<v1>, <v11>) -> <v12>
|
||||
4 <v13>: Int NEW: r(4) -> <v13>
|
||||
res = 4 !<v18>: *
|
||||
when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 } <v19>: * NEW: merge(when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }|!<v15>, !<v16>, !<v17>, !<v18>) -> <v19>
|
||||
res <v20>: Int NEW: r(res) -> <v20>
|
||||
return res !<v21>: *
|
||||
{ val res: Int when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 } return res } !<v21>: * COPY
|
||||
=====================
|
||||
Reference in New Issue
Block a user