Skip to content

dsc v0.9.6

Latest
Compare
Choose a tag to compare
@jonathanvdc jonathanvdc released this 01 Apr 13:39

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 this

    if (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) as

    switch (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 of private members to internal and makes protected members protected 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.