CFA branches=150
tsz is 1.1x faster 893 lines 27 KB
Timing
Files
// Control flow analysis stress test
type Entity =
| { kind: "type0"; data0: string; common: number }
| { kind: "type1"; data1: string; common: number }
| { kind: "type2"; data2: string; common: number }
| { kind: "type3"; data3: string; common: number }
| { kind: "type4"; data4: string; common: number }
| { kind: "type5"; data5: string; common: number }
| { kind: "type6"; data6: string; common: number }
| { kind: "type7"; data7: string; common: number }
| { kind: "type8"; data8: string; common: number }
| { kind: "type9"; data9: string; common: number }
| { kind: "type10"; data10: string; common: number }
| { kind: "type11"; data11: string; common: number }
| { kind: "type12"; data12: string; common: number }
| { kind: "type13"; data13: string; common: number }
| { kind: "type14"; data14: string; common: number }
| { kind: "type15"; data15: string; common: number }
| { kind: "type16"; data16: string; common: number }
| { kind: "type17"; data17: string; common: number }
| { kind: "type18"; data18: string; common: number }
| { kind: "type19"; data19: string; common: number }
| { kind: "type20"; data20: string; common: number }
| { kind: "type21"; data21: string; common: number }
| { kind: "type22"; data22: string; common: number }
| { kind: "type23"; data23: string; common: number }
| { kind: "type24"; data24: string; common: number }
| { kind: "type25"; data25: string; common: number }
| { kind: "type26"; data26: string; common: number }
| { kind: "type27"; data27: string; common: number }
| { kind: "type28"; data28: string; common: number }
| { kind: "type29"; data29: string; common: number }
| { kind: "type30"; data30: string; common: number }
| { kind: "type31"; data31: string; common: number }
| { kind: "type32"; data32: string; common: number }
| { kind: "type33"; data33: string; common: number }
| { kind: "type34"; data34: string; common: number }
| { kind: "type35"; data35: string; common: number }
| { kind: "type36"; data36: string; common: number }
| { kind: "type37"; data37: string; common: number }
| { kind: "type38"; data38: string; common: number }
| { kind: "type39"; data39: string; common: number }
| { kind: "type40"; data40: string; common: number }
| { kind: "type41"; data41: string; common: number }
| { kind: "type42"; data42: string; common: number }
| { kind: "type43"; data43: string; common: number }
| { kind: "type44"; data44: string; common: number }
| { kind: "type45"; data45: string; common: number }
| { kind: "type46"; data46: string; common: number }
| { kind: "type47"; data47: string; common: number }
| { kind: "type48"; data48: string; common: number }
| { kind: "type49"; data49: string; common: number }
| { kind: "type50"; data50: string; common: number }
| { kind: "type51"; data51: string; common: number }
| { kind: "type52"; data52: string; common: number }
| { kind: "type53"; data53: string; common: number }
| { kind: "type54"; data54: string; common: number }
| { kind: "type55"; data55: string; common: number }
| { kind: "type56"; data56: string; common: number }
| { kind: "type57"; data57: string; common: number }
| { kind: "type58"; data58: string; common: number }
| { kind: "type59"; data59: string; common: number }
| { kind: "type60"; data60: string; common: number }
| { kind: "type61"; data61: string; common: number }
| { kind: "type62"; data62: string; common: number }
| { kind: "type63"; data63: string; common: number }
| { kind: "type64"; data64: string; common: number }
| { kind: "type65"; data65: string; common: number }
| { kind: "type66"; data66: string; common: number }
| { kind: "type67"; data67: string; common: number }
| { kind: "type68"; data68: string; common: number }
| { kind: "type69"; data69: string; common: number }
| { kind: "type70"; data70: string; common: number }
| { kind: "type71"; data71: string; common: number }
| { kind: "type72"; data72: string; common: number }
| { kind: "type73"; data73: string; common: number }
| { kind: "type74"; data74: string; common: number }
| { kind: "type75"; data75: string; common: number }
| { kind: "type76"; data76: string; common: number }
| { kind: "type77"; data77: string; common: number }
| { kind: "type78"; data78: string; common: number }
| { kind: "type79"; data79: string; common: number }
| { kind: "type80"; data80: string; common: number }
| { kind: "type81"; data81: string; common: number }
| { kind: "type82"; data82: string; common: number }
| { kind: "type83"; data83: string; common: number }
| { kind: "type84"; data84: string; common: number }
| { kind: "type85"; data85: string; common: number }
| { kind: "type86"; data86: string; common: number }
| { kind: "type87"; data87: string; common: number }
| { kind: "type88"; data88: string; common: number }
| { kind: "type89"; data89: string; common: number }
| { kind: "type90"; data90: string; common: number }
| { kind: "type91"; data91: string; common: number }
| { kind: "type92"; data92: string; common: number }
| { kind: "type93"; data93: string; common: number }
| { kind: "type94"; data94: string; common: number }
| { kind: "type95"; data95: string; common: number }
| { kind: "type96"; data96: string; common: number }
| { kind: "type97"; data97: string; common: number }
| { kind: "type98"; data98: string; common: number }
| { kind: "type99"; data99: string; common: number }
| { kind: "type100"; data100: string; common: number }
| { kind: "type101"; data101: string; common: number }
| { kind: "type102"; data102: string; common: number }
| { kind: "type103"; data103: string; common: number }
| { kind: "type104"; data104: string; common: number }
| { kind: "type105"; data105: string; common: number }
| { kind: "type106"; data106: string; common: number }
| { kind: "type107"; data107: string; common: number }
| { kind: "type108"; data108: string; common: number }
| { kind: "type109"; data109: string; common: number }
| { kind: "type110"; data110: string; common: number }
| { kind: "type111"; data111: string; common: number }
| { kind: "type112"; data112: string; common: number }
| { kind: "type113"; data113: string; common: number }
| { kind: "type114"; data114: string; common: number }
| { kind: "type115"; data115: string; common: number }
| { kind: "type116"; data116: string; common: number }
| { kind: "type117"; data117: string; common: number }
| { kind: "type118"; data118: string; common: number }
| { kind: "type119"; data119: string; common: number }
| { kind: "type120"; data120: string; common: number }
| { kind: "type121"; data121: string; common: number }
| { kind: "type122"; data122: string; common: number }
| { kind: "type123"; data123: string; common: number }
| { kind: "type124"; data124: string; common: number }
| { kind: "type125"; data125: string; common: number }
| { kind: "type126"; data126: string; common: number }
| { kind: "type127"; data127: string; common: number }
| { kind: "type128"; data128: string; common: number }
| { kind: "type129"; data129: string; common: number }
| { kind: "type130"; data130: string; common: number }
| { kind: "type131"; data131: string; common: number }
| { kind: "type132"; data132: string; common: number }
| { kind: "type133"; data133: string; common: number }
| { kind: "type134"; data134: string; common: number }
| { kind: "type135"; data135: string; common: number }
| { kind: "type136"; data136: string; common: number }
| { kind: "type137"; data137: string; common: number }
| { kind: "type138"; data138: string; common: number }
| { kind: "type139"; data139: string; common: number }
| { kind: "type140"; data140: string; common: number }
| { kind: "type141"; data141: string; common: number }
| { kind: "type142"; data142: string; common: number }
| { kind: "type143"; data143: string; common: number }
| { kind: "type144"; data144: string; common: number }
| { kind: "type145"; data145: string; common: number }
| { kind: "type146"; data146: string; common: number }
| { kind: "type147"; data147: string; common: number }
| { kind: "type148"; data148: string; common: number }
| { kind: "type149"; data149: string; common: number };
function processEntity(e: Entity): string {
switch (e.kind) {
case "type0": return e.data0;
case "type1": return e.data1;
case "type2": return e.data2;
case "type3": return e.data3;
case "type4": return e.data4;
case "type5": return e.data5;
case "type6": return e.data6;
case "type7": return e.data7;
case "type8": return e.data8;
case "type9": return e.data9;
case "type10": return e.data10;
case "type11": return e.data11;
case "type12": return e.data12;
case "type13": return e.data13;
case "type14": return e.data14;
case "type15": return e.data15;
case "type16": return e.data16;
case "type17": return e.data17;
case "type18": return e.data18;
case "type19": return e.data19;
case "type20": return e.data20;
case "type21": return e.data21;
case "type22": return e.data22;
case "type23": return e.data23;
case "type24": return e.data24;
case "type25": return e.data25;
case "type26": return e.data26;
case "type27": return e.data27;
case "type28": return e.data28;
case "type29": return e.data29;
case "type30": return e.data30;
case "type31": return e.data31;
case "type32": return e.data32;
case "type33": return e.data33;
case "type34": return e.data34;
case "type35": return e.data35;
case "type36": return e.data36;
case "type37": return e.data37;
case "type38": return e.data38;
case "type39": return e.data39;
case "type40": return e.data40;
case "type41": return e.data41;
case "type42": return e.data42;
case "type43": return e.data43;
case "type44": return e.data44;
case "type45": return e.data45;
case "type46": return e.data46;
case "type47": return e.data47;
case "type48": return e.data48;
case "type49": return e.data49;
case "type50": return e.data50;
case "type51": return e.data51;
case "type52": return e.data52;
case "type53": return e.data53;
case "type54": return e.data54;
case "type55": return e.data55;
case "type56": return e.data56;
case "type57": return e.data57;
case "type58": return e.data58;
case "type59": return e.data59;
case "type60": return e.data60;
case "type61": return e.data61;
case "type62": return e.data62;
case "type63": return e.data63;
case "type64": return e.data64;
case "type65": return e.data65;
case "type66": return e.data66;
case "type67": return e.data67;
case "type68": return e.data68;
case "type69": return e.data69;
case "type70": return e.data70;
case "type71": return e.data71;
case "type72": return e.data72;
case "type73": return e.data73;
case "type74": return e.data74;
case "type75": return e.data75;
case "type76": return e.data76;
case "type77": return e.data77;
case "type78": return e.data78;
case "type79": return e.data79;
case "type80": return e.data80;
case "type81": return e.data81;
case "type82": return e.data82;
case "type83": return e.data83;
case "type84": return e.data84;
case "type85": return e.data85;
case "type86": return e.data86;
case "type87": return e.data87;
case "type88": return e.data88;
case "type89": return e.data89;
case "type90": return e.data90;
case "type91": return e.data91;
case "type92": return e.data92;
case "type93": return e.data93;
case "type94": return e.data94;
case "type95": return e.data95;
case "type96": return e.data96;
case "type97": return e.data97;
case "type98": return e.data98;
case "type99": return e.data99;
case "type100": return e.data100;
case "type101": return e.data101;
case "type102": return e.data102;
case "type103": return e.data103;
case "type104": return e.data104;
case "type105": return e.data105;
case "type106": return e.data106;
case "type107": return e.data107;
case "type108": return e.data108;
case "type109": return e.data109;
case "type110": return e.data110;
case "type111": return e.data111;
case "type112": return e.data112;
case "type113": return e.data113;
case "type114": return e.data114;
case "type115": return e.data115;
case "type116": return e.data116;
case "type117": return e.data117;
case "type118": return e.data118;
case "type119": return e.data119;
case "type120": return e.data120;
case "type121": return e.data121;
case "type122": return e.data122;
case "type123": return e.data123;
case "type124": return e.data124;
case "type125": return e.data125;
case "type126": return e.data126;
case "type127": return e.data127;
case "type128": return e.data128;
case "type129": return e.data129;
case "type130": return e.data130;
case "type131": return e.data131;
case "type132": return e.data132;
case "type133": return e.data133;
case "type134": return e.data134;
case "type135": return e.data135;
case "type136": return e.data136;
case "type137": return e.data137;
case "type138": return e.data138;
case "type139": return e.data139;
case "type140": return e.data140;
case "type141": return e.data141;
case "type142": return e.data142;
case "type143": return e.data143;
case "type144": return e.data144;
case "type145": return e.data145;
case "type146": return e.data146;
case "type147": return e.data147;
case "type148": return e.data148;
case "type149": return e.data149;
default: throw new Error("unreachable");
}
}
function processWithIf(e: Entity): string {
if (e.kind === "type0") return e.data0;
if (e.kind === "type1") return e.data1;
if (e.kind === "type2") return e.data2;
if (e.kind === "type3") return e.data3;
if (e.kind === "type4") return e.data4;
if (e.kind === "type5") return e.data5;
if (e.kind === "type6") return e.data6;
if (e.kind === "type7") return e.data7;
if (e.kind === "type8") return e.data8;
if (e.kind === "type9") return e.data9;
if (e.kind === "type10") return e.data10;
if (e.kind === "type11") return e.data11;
if (e.kind === "type12") return e.data12;
if (e.kind === "type13") return e.data13;
if (e.kind === "type14") return e.data14;
if (e.kind === "type15") return e.data15;
if (e.kind === "type16") return e.data16;
if (e.kind === "type17") return e.data17;
if (e.kind === "type18") return e.data18;
if (e.kind === "type19") return e.data19;
if (e.kind === "type20") return e.data20;
if (e.kind === "type21") return e.data21;
if (e.kind === "type22") return e.data22;
if (e.kind === "type23") return e.data23;
if (e.kind === "type24") return e.data24;
if (e.kind === "type25") return e.data25;
if (e.kind === "type26") return e.data26;
if (e.kind === "type27") return e.data27;
if (e.kind === "type28") return e.data28;
if (e.kind === "type29") return e.data29;
if (e.kind === "type30") return e.data30;
if (e.kind === "type31") return e.data31;
if (e.kind === "type32") return e.data32;
if (e.kind === "type33") return e.data33;
if (e.kind === "type34") return e.data34;
if (e.kind === "type35") return e.data35;
if (e.kind === "type36") return e.data36;
if (e.kind === "type37") return e.data37;
if (e.kind === "type38") return e.data38;
if (e.kind === "type39") return e.data39;
if (e.kind === "type40") return e.data40;
if (e.kind === "type41") return e.data41;
if (e.kind === "type42") return e.data42;
if (e.kind === "type43") return e.data43;
if (e.kind === "type44") return e.data44;
if (e.kind === "type45") return e.data45;
if (e.kind === "type46") return e.data46;
if (e.kind === "type47") return e.data47;
if (e.kind === "type48") return e.data48;
if (e.kind === "type49") return e.data49;
if (e.kind === "type50") return e.data50;
if (e.kind === "type51") return e.data51;
if (e.kind === "type52") return e.data52;
if (e.kind === "type53") return e.data53;
if (e.kind === "type54") return e.data54;
if (e.kind === "type55") return e.data55;
if (e.kind === "type56") return e.data56;
if (e.kind === "type57") return e.data57;
if (e.kind === "type58") return e.data58;
if (e.kind === "type59") return e.data59;
if (e.kind === "type60") return e.data60;
if (e.kind === "type61") return e.data61;
if (e.kind === "type62") return e.data62;
if (e.kind === "type63") return e.data63;
if (e.kind === "type64") return e.data64;
if (e.kind === "type65") return e.data65;
if (e.kind === "type66") return e.data66;
if (e.kind === "type67") return e.data67;
if (e.kind === "type68") return e.data68;
if (e.kind === "type69") return e.data69;
if (e.kind === "type70") return e.data70;
if (e.kind === "type71") return e.data71;
if (e.kind === "type72") return e.data72;
if (e.kind === "type73") return e.data73;
if (e.kind === "type74") return e.data74;
if (e.kind === "type75") return e.data75;
if (e.kind === "type76") return e.data76;
if (e.kind === "type77") return e.data77;
if (e.kind === "type78") return e.data78;
if (e.kind === "type79") return e.data79;
if (e.kind === "type80") return e.data80;
if (e.kind === "type81") return e.data81;
if (e.kind === "type82") return e.data82;
if (e.kind === "type83") return e.data83;
if (e.kind === "type84") return e.data84;
if (e.kind === "type85") return e.data85;
if (e.kind === "type86") return e.data86;
if (e.kind === "type87") return e.data87;
if (e.kind === "type88") return e.data88;
if (e.kind === "type89") return e.data89;
if (e.kind === "type90") return e.data90;
if (e.kind === "type91") return e.data91;
if (e.kind === "type92") return e.data92;
if (e.kind === "type93") return e.data93;
if (e.kind === "type94") return e.data94;
if (e.kind === "type95") return e.data95;
if (e.kind === "type96") return e.data96;
if (e.kind === "type97") return e.data97;
if (e.kind === "type98") return e.data98;
if (e.kind === "type99") return e.data99;
if (e.kind === "type100") return e.data100;
if (e.kind === "type101") return e.data101;
if (e.kind === "type102") return e.data102;
if (e.kind === "type103") return e.data103;
if (e.kind === "type104") return e.data104;
if (e.kind === "type105") return e.data105;
if (e.kind === "type106") return e.data106;
if (e.kind === "type107") return e.data107;
if (e.kind === "type108") return e.data108;
if (e.kind === "type109") return e.data109;
if (e.kind === "type110") return e.data110;
if (e.kind === "type111") return e.data111;
if (e.kind === "type112") return e.data112;
if (e.kind === "type113") return e.data113;
if (e.kind === "type114") return e.data114;
if (e.kind === "type115") return e.data115;
if (e.kind === "type116") return e.data116;
if (e.kind === "type117") return e.data117;
if (e.kind === "type118") return e.data118;
if (e.kind === "type119") return e.data119;
if (e.kind === "type120") return e.data120;
if (e.kind === "type121") return e.data121;
if (e.kind === "type122") return e.data122;
if (e.kind === "type123") return e.data123;
if (e.kind === "type124") return e.data124;
if (e.kind === "type125") return e.data125;
if (e.kind === "type126") return e.data126;
if (e.kind === "type127") return e.data127;
if (e.kind === "type128") return e.data128;
if (e.kind === "type129") return e.data129;
if (e.kind === "type130") return e.data130;
if (e.kind === "type131") return e.data131;
if (e.kind === "type132") return e.data132;
if (e.kind === "type133") return e.data133;
if (e.kind === "type134") return e.data134;
if (e.kind === "type135") return e.data135;
if (e.kind === "type136") return e.data136;
if (e.kind === "type137") return e.data137;
if (e.kind === "type138") return e.data138;
if (e.kind === "type139") return e.data139;
if (e.kind === "type140") return e.data140;
if (e.kind === "type141") return e.data141;
if (e.kind === "type142") return e.data142;
if (e.kind === "type143") return e.data143;
if (e.kind === "type144") return e.data144;
if (e.kind === "type145") return e.data145;
if (e.kind === "type146") return e.data146;
if (e.kind === "type147") return e.data147;
if (e.kind === "type148") return e.data148;
if (e.kind === "type149") return e.data149;
return processEntity(e);
}