FIR CFG: do not assume all arguments to inline funs are called in place

Only values for non-noinline, non-crossinline, functional type
parameters qualify.
This commit is contained in:
pyos
2022-11-23 16:02:11 +01:00
committed by teamcity
parent 39f88b9e87
commit d66be3f82d
17 changed files with 165 additions and 112 deletions
@@ -43,14 +43,12 @@ digraph plusAssignWithLambdaInRhs_kt {
7 -> {8 12 9} [style=dotted];
7 -> {12} [style=dashed];
8 -> {9} [style=dotted];
8 -> {7} [color=green style=dotted];
9 -> {10} [style=dotted];
10 -> {11} [style=dotted];
12 -> {13} [style=dotted];
13 -> {14} [style=dotted];
14 -> {15} [style=dotted];
15 -> {16} [style=dotted];
16 -> {8} [style=dotted];
subgraph cluster_4 {
color=red
@@ -120,7 +118,7 @@ digraph plusAssignWithLambdaInRhs_kt {
31 [label="Postponed exit from lambda"];
32 [label="Function call: R|/A.A|<R|T|>(...)" style="filled" fillcolor=yellow];
33 [label="Jump: ^postpone R|/A.A|<R|T|>(<L> = A@fun <anonymous>(resolve: R|(T) -> kotlin/Unit|): R|kotlin/Unit| <inline=NoInline> {
R|<local>/queue|.R|kotlin/collections/plusAssign|<R|() -> kotlin/Unit|>(A@fun <anonymous>(): R|kotlin/Unit| <inline=Inline, kind=UNKNOWN> {
R|<local>/queue|.R|kotlin/collections/plusAssign|<R|() -> kotlin/Unit|>(A@fun <anonymous>(): R|kotlin/Unit| <inline=Inline> {
R|<local>/resolve|.R|SubstitutionOverride<kotlin/Function1.invoke: R|kotlin/Unit|>|(R|<local>/computation|.R|SubstitutionOverride<kotlin/Function0.invoke: R|T|>|())
}
)
@@ -149,7 +147,6 @@ digraph plusAssignWithLambdaInRhs_kt {
40 -> {41 45 42};
40 -> {45} [style=dashed];
41 -> {42};
41 -> {40} [color=green style=dashed];
42 -> {43};
43 -> {44};
45 -> {46};
@@ -157,6 +154,5 @@ digraph plusAssignWithLambdaInRhs_kt {
47 -> {48};
48 -> {49};
49 -> {50};
50 -> {41};
}