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
+7
View File
@@ -15,6 +15,10 @@ INCOMING <- BB 0, 4
Do..while entry: DO_WHILE label=null origin=DO_WHILE_LOOP
CONTENT
1 WHEN type=kotlin.Unit origin=null
2 GET_VAR 'value-parameter m: Int' type=kotlin.Int origin=null
3 GET_VAR 'number: Int' type=kotlin.Int origin=null
4 CONST Int type=kotlin.Int value='10'
5 CALL 'mod(Int): Int' type=kotlin.Int origin=PERC
OUTGOING -> BB 2
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 2
@@ -29,6 +33,9 @@ INCOMING <- BB 2
When exit: WHEN type=kotlin.Unit origin=null
CONTENT
1 SET_VAR 'number: Int' type=kotlin.Unit origin=DIVEQ
2 GET_VAR 'number: Int' type=kotlin.Int origin=null
3 CONST Int type=kotlin.Int value='0'
4 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 4, 5
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
BB 4
+11 -6
View File
@@ -5,24 +5,29 @@ CONTENT
1 FUN public fun factorial(i: kotlin.Int): kotlin.Int
2 CONST Int type=kotlin.Int value='1'
3 VAR var result: kotlin.Int
4 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
5 VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.IntIterator
6 WHILE label=null origin=FOR_LOOP_INNER_WHILE
4 CONST Int type=kotlin.Int value='2'
5 GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null
6 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE
7 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
8 VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.IntIterator
9 WHILE label=null origin=FOR_LOOP_INNER_WHILE
OUTGOING -> BB 1
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
BB 1
INCOMING <- BB 0, 2
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
CONTENT
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
OUTGOING -> BB 2, 3
CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
BB 2
INCOMING <- BB 1
CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
CONTENT
1 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
2 VAR val j: kotlin.Int
3 SET_VAR 'result: Int' type=kotlin.Unit origin=MULTEQ
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
2 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
3 VAR val j: kotlin.Int
4 SET_VAR 'result: Int' type=kotlin.Unit origin=MULTEQ
OUTGOING -> BB 1
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
BB 3
+25 -8
View File
@@ -5,24 +5,36 @@ CONTENT
1 FUN public fun isPerfect(n: kotlin.Int): kotlin.Boolean
2 CONST Int type=kotlin.Int value='1'
3 VAR var sum: kotlin.Int
4 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
5 VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.IntIterator
6 WHILE label=null origin=FOR_LOOP_INNER_WHILE
4 CONST Int type=kotlin.Int value='2'
5 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null
6 CONST Int type=kotlin.Int value='2'
7 CALL 'div(Int): Int' type=kotlin.Int origin=DIV
8 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE
9 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
10 VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.IntIterator
11 WHILE label=null origin=FOR_LOOP_INNER_WHILE
OUTGOING -> BB 1
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
BB 1
INCOMING <- BB 0, 3, 6
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
CONTENT
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
OUTGOING -> BB 2, 7
CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
BB 2
INCOMING <- BB 1
CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
CONTENT
1 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
2 VAR val m: kotlin.Int
3 WHEN type=kotlin.Unit origin=null
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
2 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
3 VAR val m: kotlin.Int
4 WHEN type=kotlin.Unit origin=null
5 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null
6 GET_VAR 'm: Int' type=kotlin.Int origin=null
7 CALL 'mod(Int): Int' type=kotlin.Int origin=PERC
8 CONST Int type=kotlin.Int value='0'
9 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 3, 4
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
BB 3
@@ -38,6 +50,9 @@ INCOMING <- BB 2
CONTENT
1 SET_VAR 'sum: Int' type=kotlin.Unit origin=PLUSEQ
2 WHEN type=kotlin.Unit origin=null
3 GET_VAR 'sum: Int' type=kotlin.Int origin=null
4 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null
5 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 5, 6
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
BB 5
@@ -63,8 +78,10 @@ BB 8
INCOMING <- BB 5, 7
While exit: WHILE label=null origin=FOR_LOOP_INNER_WHILE
CONTENT
1 CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
2 RETURN type=kotlin.Nothing from='isPerfect(Int): Boolean'
1 GET_VAR 'sum: Int' type=kotlin.Int origin=null
2 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null
3 CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
4 RETURN type=kotlin.Nothing from='isPerfect(Int): Boolean'
OUTGOING -> NONE
Function exit: FUN public fun isPerfect(n: kotlin.Int): kotlin.Boolean