Hi Jochen, you wrote: I also see potential for cases in which the MethodHandle gets overly complex. In Groovy we have for example up to N+1 guards for a method call with N arguments plus a catchException part and a switchpoint. Most of them ending up in selecting the method new. I could imagine things getting even more complicated.
I was wondering how deep your GWT chains get and how complex the inserted LambdaForms are. I put two examples of my stack traces the first where it succeeds at the first GWT the second is where the second GWT is taken. I get about 7 extra frames per GWT. I still seems to me that a different PIC choice other than chained GWTs would get rid of a lot of the extra frames. Though again my profiling shows 97% of call sites for me are 3 or less GWTs and 75% are monomorphic. So except when I have recursive like calls it may not be so big in practice. (tails calls anyone?) regards mark rtPbc.r938.invoke(Object printInspectStringOn:indent::4) java.lang.invoke.LambdaForm$DMH/1323468230.invokeStatic_LLL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$DMH/38997010.invokeSpecial_LLLL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$NamedFunction.invoke_LLLL_L(LambdaForm.java:1118) java.lang.invoke.LambdaForm$DMH/1555093762.invokeStatic_LL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:1147) java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:625) java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:604) java.lang.invoke.LambdaForm$LFI/580024961.interpret_L(LambdaForm$LFI) java.lang.invoke.LambdaForm$MH/425918570.linkToCallSite(LambdaForm$MH) rtPbc.r728.invoke(Object printInspectorString:113) second example rtPbc.r938.invoke(Object printInspectStringOn:indent::4) java.lang.invoke.LambdaForm$DMH/1323468230.invokeStatic_LLL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$DMH/38997010.invokeSpecial_LLLL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$NamedFunction.invoke_LLLL_L(LambdaForm.java:1118) java.lang.invoke.LambdaForm$DMH/1555093762.invokeStatic_LL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:1147) java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:625) java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:604) java.lang.invoke.LambdaForm$LFI/580024961.interpret_L(LambdaForm$LFI) java.lang.invoke.LambdaForm$DMH/38997010.invokeSpecial_LLLL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$NamedFunction.invoke_LLLL_L(LambdaForm.java:1118) java.lang.invoke.LambdaForm$DMH/1555093762.invokeStatic_LL_L(LambdaForm$DMH) java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:1147) java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:625) java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:604) java.lang.invoke.LambdaForm$LFI/580024961.interpret_L(LambdaForm$LFI) java.lang.invoke.LambdaForm$MH/425918570.linkToCallSite(LambdaForm$MH) rtPbc.r728.invoke(Object printInspectorString:113)
_______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev