This version of Flame/dsc
includes the following improvements:
-
The in-memory IR for gotos has been overhauled and should now play nice with the CFG optimization passes. This change also means that
yield return
/yield break
should work just fine for all optimization settings now. -
Direct IR support for
switch
statements has been added. For integer types,SwitchStatement
uses a combination of linear equality comparisons, bit tests, jump tables and balanced binary search trees to generate efficient code for targets that support branches. -
CFG lowering now tries to create
switch
statements for integral types. What that means is that code like thisif (x == 1 || x == 2 || x == 3 || x == 54) return x; else if (x == 80) return 9; else return x * x;
is compiled (from
-O2
upward) asswitch (x) { case 1: case 2: case 3: case 54: return x; case 80: return 9; default: return x * x; }
-
Signature passes are more powerful now. They can access global metadata for the current assembly and make arbitrary changes to attribute maps now.
-
The
-frelax-access
signature pass was born. It changes the access modifiers ofprivate
members tointernal
and makesprotected
membersprotected internal
. That exposes optimization opportunities for other passes, which previously constrained by access modifiers. -
Flame's Json.NET package dependency has been updated to version
10.0.1
.