IR to CFG: member access unrolling

This commit is contained in:
Mikhail Glukhikh
2016-09-23 17:28:39 +03:00
committed by Dmitry Petrov
parent 5a04c72e75
commit ea13386d0b
9 changed files with 135 additions and 32 deletions
+6
View File
@@ -4,12 +4,18 @@ BB 0
CONTENT
1 FUN public fun compare(x: kotlin.Int, y: kotlin.Int): kotlin.Int
2 WHEN type=kotlin.Int origin=WHEN
3 GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
4 GET_VAR 'value-parameter y: Int' type=kotlin.Int origin=null
5 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 1, 3
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
BB 1
INCOMING <- BB 0
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
2 GET_VAR 'value-parameter y: Int' type=kotlin.Int origin=null
3 CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 2, 4
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
BB 2
+3
View File
@@ -4,6 +4,9 @@ BB 0
CONTENT
1 FUN public fun max(x: kotlin.Int, y: kotlin.Int): kotlin.Int
2 WHEN type=kotlin.Int origin=null
3 GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
4 GET_VAR 'value-parameter y: Int' type=kotlin.Int origin=null
5 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 1, 2
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
BB 1
+57 -14
View File
@@ -4,6 +4,8 @@ BB 0
CONTENT
1 FUN public fun minBiRoot(a: kotlin.Double, b: kotlin.Double, c: kotlin.Double): kotlin.Double
2 WHEN type=kotlin.Unit origin=null
3 GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
4 CONST Double type=kotlin.Double value='0.0'
OUTGOING -> BB 1, 6
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 1
@@ -11,6 +13,8 @@ INCOMING <- BB 0
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 WHEN type=kotlin.Unit origin=null
2 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
3 CONST Double type=kotlin.Double value='0.0'
OUTGOING -> BB 2, 3
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 2
@@ -25,9 +29,15 @@ BB 3
INCOMING <- BB 1
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 CALL 'div(Double): Double' type=kotlin.Double origin=DIV
2 VAR val bc: kotlin.Double
3 WHEN type=kotlin.Unit origin=null
1 GET_VAR 'value-parameter c: Double' type=kotlin.Double origin=null
2 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
3 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
4 CALL 'div(Double): Double' type=kotlin.Double origin=DIV
5 VAR val bc: kotlin.Double
6 WHEN type=kotlin.Unit origin=null
7 GET_VAR 'bc: Double' type=kotlin.Double origin=null
8 CONST Double type=kotlin.Double value='0.0'
9 CALL 'compareTo(Double): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 4, 5
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
BB 4
@@ -42,17 +52,29 @@ BB 5
INCOMING <- BB 3
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
2 RETURN type=kotlin.Nothing from='minBiRoot(Double, Double, Double): Double'
1 GET_VAR 'bc: Double' type=kotlin.Double origin=null
2 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
3 RETURN type=kotlin.Nothing from='minBiRoot(Double, Double, Double): Double'
OUTGOING -> NONE
Function exit: FUN public fun minBiRoot(a: kotlin.Double, b: kotlin.Double, c: kotlin.Double): kotlin.Double
BB 6
INCOMING <- BB 0
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 CALL 'minus(Double): Double' type=kotlin.Double origin=MINUS
2 VAR val d: kotlin.Double
3 WHEN type=kotlin.Unit origin=null
1 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
2 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
3 CALL 'times(Double): Double' type=kotlin.Double origin=MUL
4 CONST Int type=kotlin.Int value='4'
5 GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
6 CALL 'times(Double): Double' type=kotlin.Double origin=MUL
7 GET_VAR 'value-parameter c: Double' type=kotlin.Double origin=null
8 CALL 'times(Double): Double' type=kotlin.Double origin=MUL
9 CALL 'minus(Double): Double' type=kotlin.Double origin=MINUS
10 VAR val d: kotlin.Double
11 WHEN type=kotlin.Unit origin=null
12 GET_VAR 'd: Double' type=kotlin.Double origin=null
13 CONST Double type=kotlin.Double value='0.0'
14 CALL 'compareTo(Double): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 7, 8
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
BB 7
@@ -67,11 +89,28 @@ BB 8
INCOMING <- BB 6
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 CALL 'div(Double): Double' type=kotlin.Double origin=DIV
2 VAR val y1: kotlin.Double
3 CALL 'div(Double): Double' type=kotlin.Double origin=DIV
4 VAR val y2: kotlin.Double
5 WHEN type=kotlin.Double origin=null
1 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
2 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
3 GET_VAR 'd: Double' type=kotlin.Double origin=null
4 CALL 'plus(Double): Double' type=kotlin.Double origin=PLUS
5 CONST Int type=kotlin.Int value='2'
6 GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
7 CALL 'times(Double): Double' type=kotlin.Double origin=MUL
8 CALL 'div(Double): Double' type=kotlin.Double origin=DIV
9 VAR val y1: kotlin.Double
10 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
11 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
12 GET_VAR 'd: Double' type=kotlin.Double origin=null
13 CALL 'minus(Double): Double' type=kotlin.Double origin=MINUS
14 CONST Int type=kotlin.Int value='2'
15 GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
16 CALL 'times(Double): Double' type=kotlin.Double origin=MUL
17 CALL 'div(Double): Double' type=kotlin.Double origin=DIV
18 VAR val y2: kotlin.Double
19 WHEN type=kotlin.Double origin=null
20 GET_VAR 'y1: Double' type=kotlin.Double origin=null
21 GET_VAR 'y2: Double' type=kotlin.Double origin=null
22 CALL 'compareTo(Double): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 9, 10
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
BB 9
@@ -100,6 +139,9 @@ INCOMING <- BB 10, 11
CONTENT
1 VAR val y3: kotlin.Double
2 WHEN type=kotlin.Double origin=null
3 GET_VAR 'y3: Double' type=kotlin.Double origin=null
4 CONST Double type=kotlin.Double value='0.0'
5 CALL 'compareTo(Double): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 13, 14
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
BB 13
@@ -119,7 +161,8 @@ BB 15
INCOMING <- BB 13
CONST Boolean type=kotlin.Boolean value='true'
CONTENT
1 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
1 GET_VAR 'y3: Double' type=kotlin.Double origin=null
2 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
OUTGOING -> BB 16
When exit: WHEN type=kotlin.Double origin=null
BB 16
+8
View File
@@ -6,24 +6,32 @@ CONTENT
2 GET_VAR 'value-parameter grade: String' type=kotlin.String origin=null
3 VAR IR_TEMPORARY_VARIABLE val tmp0_subject: kotlin.String
4 WHEN type=kotlin.Nothing origin=WHEN
5 GET_VAR 'tmp0_subject: String' type=kotlin.String origin=null
6 CONST String type=kotlin.String value='A'
OUTGOING -> BB 1, 5
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 1
INCOMING <- BB 0
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 GET_VAR 'tmp0_subject: String' type=kotlin.String origin=null
2 CONST String type=kotlin.String value='B'
OUTGOING -> BB 2, 6
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 2
INCOMING <- BB 1
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 GET_VAR 'tmp0_subject: String' type=kotlin.String origin=null
2 CONST String type=kotlin.String value='C'
OUTGOING -> BB 3, 7
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 3
INCOMING <- BB 2
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 GET_VAR 'tmp0_subject: String' type=kotlin.String origin=null
2 CONST String type=kotlin.String value='D'
OUTGOING -> BB 4, 8
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 4