Skip to content

Optimize narrowTypeByEquality and narrowTypeBySwitchOnDiscriminant - #4781

Open
ahejlsberg wants to merge 6 commits into
mainfrom
cfa-narrowing-optimization
Open

Optimize narrowTypeByEquality and narrowTypeBySwitchOnDiscriminant#4781
ahejlsberg wants to merge 6 commits into
mainfrom
cfa-narrowing-optimization

Conversation

@ahejlsberg

Copy link
Copy Markdown
Member

Inspired by the performance gains in #4711, this PR further optimizes union type narrowing in control flow analysis.

Copilot AI review requested due to automatic review settings July 28, 2026 21:26
@ahejlsberg

Copy link
Copy Markdown
Member Author

@typescript-bot test it

@typescript-automation

typescript-automation Bot commented Jul 28, 2026

Copy link
Copy Markdown

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
test top400 ✅ Started ✅ Results
perf test this faster ✅ Started 👀 Results

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Optimizes primitive-union narrowing during control-flow analysis.

Changes:

  • Adds fast paths for equality and switch narrowing.
  • Optimizes type removal and centralizes union membership checks.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
internal/checker/flow.go Adds narrowing fast paths.
internal/checker/checker.go Optimizes union helpers and type removal.

Comment thread internal/checker/flow.go Outdated
Comment on lines +601 to +603
filteredType := c.removeType(t, c.getRegularTypeOfLiteralType(valueType))
if filteredType != t {
return filteredType
Comment thread internal/checker/flow.go Outdated
Comment on lines +589 to +594
if !doubleEquals && t.objectFlags&ObjectFlagsPrimitiveUnion != 0 && valueType.flags&TypeFlagsPrimitive != 0 {
regularType := c.getRegularTypeOfLiteralType(valueType)
if c.unionContainsType(t, regularType) {
return regularType
}
}
Comment thread internal/checker/flow.go Outdated
Comment on lines +1123 to +1128
if t.objectFlags&ObjectFlagsPrimitiveUnion != 0 && discriminantType.flags&TypeFlagsPrimitive != 0 {
regularType := c.getRegularTypeOfLiteralType(discriminantType)
if c.unionContainsType(t, regularType) {
caseType = regularType
}
}
@typescript-automation

Copy link
Copy Markdown

@ahejlsberg
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 4 4 ~ ~ ~ p=1.000 n=6
Symbols 81,795 (± 0.02%) 81,829 (± 0.02%) +35 (+ 0.04%) 81,801 81,858 p=0.013 n=6
Types 98,817 98,817 ~ ~ ~ p=1.000 n=6
Memory Used 173,358k (± 0.48%) 173,758k (± 0.70%) ~ 171,734k 175,061k p=0.471 n=6
Memory Allocs 2,694,527 (± 0.01%) 2,686,094 (± 0.01%) -8,433 (- 0.31%) 2,685,696 2,686,313 p=0.005 n=6
Config Time 0.000s (±244.70%) 0.000s (±244.70%) ~ 0.000s 0.001s p=1.000 n=6
Parse Time 0.061s (±13.53%) 0.056s (±12.14%) ~ 0.049s 0.069s p=0.259 n=6
Bind Time 0.017s (±13.13%) 0.019s (±34.10%) ~ 0.013s 0.032s p=0.571 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.820s (± 0.56%) 0.815s (± 0.73%) ~ 0.808s 0.824s p=0.149 n=6
Total Time 0.899s (± 0.97%) 0.892s (± 1.34%) ~ 0.878s 0.913s p=0.108 n=6
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 871,302 (± 0.14%) 872,158 (± 0.16%) ~ 869,607 873,509 p=0.378 n=6
Types 263,961 (± 0.00%) 263,962 (± 0.00%) ~ 263,960 263,965 p=0.564 n=6
Memory Used 812,489k (± 0.03%) 812,589k (± 0.02%) ~ 812,192k 812,702k p=0.378 n=6
Memory Allocs 13,145,041 (± 0.13%) 13,134,291 (± 0.04%) ~ 13,127,967 13,143,651 p=0.128 n=6
Config Time 0.017s (± 2.98%) 0.017s (± 2.38%) ~ 0.017s 0.018s p=0.595 n=6
Parse Time 0.244s (± 4.34%) 0.242s (± 4.26%) ~ 0.227s 0.259s p=0.873 n=6
Bind Time 0.045s (±23.07%) 0.052s (±33.07%) ~ 0.040s 0.079s p=0.370 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 1.896s (± 2.19%) 1.897s (± 1.28%) ~ 1.851s 1.916s p=1.000 n=6
Total Time 2.213s (± 1.63%) 2.219s (± 0.94%) ~ 2.180s 2.241s p=0.810 n=6
mui-docs - native
Errors 11,275 (± 0.13%) 11,281 (± 0.01%) ~ 11,279 11,282 p=0.797 n=6
Symbols 4,447,880 4,447,880 ~ ~ ~ p=1.000 n=6
Types 1,662,215 1,662,215 ~ ~ ~ p=1.000 n=6
Memory Used 5,053,044k (± 0.04%) 5,053,470k (± 0.01%) ~ 5,052,600k 5,054,485k p=0.936 n=6
Memory Allocs 51,349,959 (± 0.08%) 51,332,091 (± 0.07%) ~ 51,289,014 51,379,547 p=0.689 n=6
Config Time 0.016s (± 3.16%) 0.017s (± 7.26%) ~ 0.016s 0.019s p=0.923 n=6
Parse Time 0.520s (± 2.25%) 0.528s (± 2.37%) ~ 0.510s 0.542s p=0.298 n=6
Bind Time 0.002s 0.002s ~ ~ ~ p=1.000 n=6
Check Time 16.709s (± 0.96%) 16.676s (± 0.85%) ~ 16.564s 16.932s p=1.000 n=6
Emit Time 0.470s (± 3.43%) 0.516s (±25.78%) ~ 0.456s 0.788s p=0.688 n=6
Total Time 18.461s (± 1.03%) 18.465s (± 1.18%) ~ 18.241s 18.739s p=0.936 n=6
self-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,394,220 1,394,220 ~ ~ ~ p=1.000 n=6
Types 442,210 442,210 ~ ~ ~ p=1.000 n=6
Memory Used 1,611,398k (± 0.31%) 1,605,555k (± 0.33%) -5,843k (- 0.36%) 1,599,587k 1,615,027k p=0.045 n=6
Memory Allocs 97,100,651 (± 0.07%) 96,794,372 (± 0.06%) -306,279 (- 0.32%) 96,741,613 96,906,047 p=0.005 n=6
Config Time 0.016s (±17.42%) 0.018s (±29.64%) ~ 0.010s 0.025s p=0.465 n=6
Parse Time 0.238s (± 2.87%) 0.237s (± 2.61%) ~ 0.230s 0.246s p=0.688 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 2.169s (± 0.72%) 2.109s (± 0.41%) -0.060s (- 2.76%) 2.095s 2.119s p=0.005 n=6
Emit Time 0.299s (± 3.87%) 0.300s (± 3.45%) ~ 0.282s 0.313s p=0.872 n=6
Total Time 28.304s (± 0.39%) 27.507s (± 0.75%) -0.797s (- 2.82%) 27.155s 27.744s p=0.005 n=6
self-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 337,681 337,681 ~ ~ ~ p=1.000 n=6
Types 199,559 199,559 ~ ~ ~ p=1.000 n=6
Memory Used 320,591k (± 0.03%) 320,730k (± 0.03%) +139k (+ 0.04%) 320,603k 320,857k p=0.045 n=6
Memory Allocs 4,676,102 (± 0.02%) 4,661,662 (± 0.01%) -14,440 (- 0.31%) 4,661,179 4,662,410 p=0.005 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.114s (± 3.94%) 0.114s (± 2.42%) ~ 0.111s 0.119s p=0.868 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 1.282s (± 1.43%) 1.222s (± 0.77%) 🟩-0.059s (- 4.63%) 1.212s 1.234s p=0.005 n=6
Emit Time 0.115s (± 7.36%) 0.122s (± 6.51%) ~ 0.113s 0.137s p=0.108 n=6
Total Time 1.569s (± 1.28%) 1.508s (± 1.02%) 🟩-0.061s (- 3.92%) 1.489s 1.530s p=0.005 n=6
ts-pre-modules - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 97,488 97,488 ~ ~ ~ p=1.000 n=6
Types 356 356 ~ ~ ~ p=1.000 n=6
Memory Used 128,877k (± 0.01%) 128,903k (± 0.02%) +27k (+ 0.02%) 128,886k 128,958k p=0.031 n=6
Memory Allocs 177,864 (± 0.24%) 177,424 (± 0.07%) ~ 177,263 177,534 p=0.093 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.102s (± 4.48%) 0.105s (± 5.77%) ~ 0.096s 0.115s p=0.294 n=6
Bind Time 0.037s (±11.07%) 0.041s (± 7.23%) ~ 0.037s 0.044s p=0.147 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Total Time 0.143s (± 3.78%) 0.149s (± 4.04%) ~ 0.139s 0.155s p=0.173 n=6
vscode - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 7,454,611 7,454,611 ~ ~ ~ p=1.000 n=6
Types 2,602,333 2,602,328 -5 (- 0.00%) ~ ~ p=0.001 n=6
Memory Used 5,025,743k (± 0.02%) 5,025,215k (± 0.01%) ~ 5,024,804k 5,026,304k p=0.128 n=6
Memory Allocs 38,097,508 (± 0.09%) 38,027,882 (± 0.13%) -69,626 (- 0.18%) 38,000,252 38,126,979 p=0.045 n=6
Config Time 0.072s (± 6.03%) 0.073s (±12.22%) ~ 0.066s 0.090s p=0.872 n=6
Parse Time 0.919s (± 3.59%) 0.940s (± 5.39%) ~ 0.887s 1.032s p=0.689 n=6
Bind Time 0.183s (±29.58%) 0.161s (± 2.11%) ~ 0.158s 0.167s p=0.416 n=6
Check Time 8.422s (± 0.85%) 8.368s (± 0.39%) ~ 8.340s 8.426s p=0.173 n=6
Emit Time 2.442s (± 7.18%) 2.559s (± 4.78%) ~ 2.453s 2.743s p=0.423 n=6
Total Time 12.060s (± 0.96%) 12.118s (± 0.97%) ~ 11.959s 12.270s p=0.471 n=6
webpack - native
Errors 2 2 ~ ~ ~ p=1.000 n=6
Symbols 193,769 193,769 ~ ~ ~ p=1.000 n=6
Types 340 340 ~ ~ ~ p=1.000 n=6
Memory Used 229,991k (± 0.16%) 230,177k (± 0.08%) ~ 229,846k 230,377k p=0.336 n=6
Memory Allocs 974,035 (± 0.79%) 977,511 (± 0.68%) ~ 968,848 987,982 p=0.471 n=6
Config Time 0.012s (±17.55%) 0.010s (±14.55%) ~ 0.009s 0.012s p=0.157 n=6
Parse Time 0.149s (± 4.26%) 0.144s (± 4.29%) ~ 0.133s 0.150s p=0.228 n=6
Bind Time 0s 0s ~ ~ ~ p=1.000 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.041s (±22.05%) 0.041s (±13.95%) ~ 0.036s 0.048s p=0.686 n=6
Total Time 0.202s (± 3.12%) 0.196s (± 4.87%) ~ 0.179s 0.203s p=0.297 n=6
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,064,618 1,064,618 ~ ~ ~ p=1.000 n=6
Types 392,776 392,776 ~ ~ ~ p=1.000 n=6
Memory Used 637,894k (± 0.02%) 638,074k (± 0.02%) +181k (+ 0.03%) 637,936k 638,195k p=0.045 n=6
Memory Allocs 4,993,724 (± 0.25%) 4,989,485 (± 0.06%) ~ 4,984,899 4,994,096 p=1.000 n=6
Config Time 0.005s 0.005s ~ ~ ~ p=1.000 n=6
Parse Time 0.133s (± 2.56%) 0.126s (± 3.09%) 🟩-0.007s (- 5.51%) 0.121s 0.131s p=0.016 n=6
Bind Time 0.038s (±27.93%) 0.032s (±26.82%) ~ 0.024s 0.046s p=0.195 n=6
Check Time 1.233s (± 0.61%) 1.243s (± 0.78%) ~ 1.234s 1.254s p=0.173 n=6
Emit Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Total Time 1.415s (± 0.54%) 1.411s (± 0.65%) ~ 1.397s 1.422s p=0.421 n=6
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • self-build-src - native
  • self-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

@typescript-automation

Copy link
Copy Markdown

@ahejlsberg Here are the results of running the top 400 repos with tsc comparing main and refs/pull/4781/merge:

Everything looks good!

@ahejlsberg

Copy link
Copy Markdown
Member Author

@typescript-bot perf test this faster

@typescript-automation

typescript-automation Bot commented Jul 29, 2026

Copy link
Copy Markdown

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test this faster ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown

@ahejlsberg
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 4 4 ~ ~ ~ p=1.000 n=6
Symbols 79,338 (± 0.04%) 79,354 (± 0.03%) ~ 79,322 79,393 p=0.377 n=6
Types 71,547 71,547 ~ ~ ~ p=1.000 n=6
Memory Used 118,510k (± 0.42%) 117,986k (± 0.48%) ~ 117,149k 118,599k p=0.066 n=6
Memory Allocs 1,964,242 (± 0.01%) 1,956,369 (± 0.01%) -7,873 (- 0.40%) 1,956,129 1,956,931 p=0.005 n=6
Config Time 0.000s (±244.70%) 0.000s ~ ~ ~ p=0.405 n=6
Parse Time 0.057s (± 7.35%) 0.058s (± 4.53%) ~ 0.055s 0.062s p=0.372 n=6
Bind Time 0.019s (±15.18%) 0.016s (±18.94%) ~ 0.012s 0.020s p=0.258 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.681s (± 1.66%) 0.689s (± 1.58%) ~ 0.679s 0.710s p=0.423 n=6
Total Time 0.758s (± 1.92%) 0.765s (± 1.62%) ~ 0.755s 0.789s p=0.936 n=6
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 871,559 (± 0.11%) 872,249 (± 0.05%) ~ 871,545 872,679 p=0.173 n=6
Types 263,961 (± 0.00%) 263,961 (± 0.00%) ~ 263,960 263,962 p=0.794 n=6
Memory Used 812,597k (± 0.07%) 812,822k (± 0.05%) ~ 812,403k 813,655k p=1.000 n=6
Memory Allocs 13,149,183 (± 0.12%) 13,145,986 (± 0.12%) ~ 13,130,126 13,168,528 p=0.575 n=6
Config Time 0.017s 0.018s (± 6.99%) ~ 0.017s 0.020s p=0.405 n=6
Parse Time 0.234s (± 5.57%) 0.245s (± 5.45%) ~ 0.231s 0.262s p=0.335 n=6
Bind Time 0.056s (±26.09%) 0.045s (±17.74%) ~ 0.041s 0.061s p=0.121 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 1.894s (± 2.84%) 1.890s (± 1.41%) ~ 1.839s 1.910s p=0.810 n=6
Total Time 2.215s (± 2.12%) 2.209s (± 0.76%) ~ 2.177s 2.225s p=0.936 n=6
mui-docs - native
Errors 11,277 (± 0.05%) 11,281 (± 0.01%) ~ 11,279 11,282 p=0.192 n=6
Symbols 4,384,004 4,384,004 ~ ~ ~ p=1.000 n=6
Types 1,536,962 1,536,962 ~ ~ ~ p=1.000 n=6
Memory Used 4,966,516k (± 0.05%) 4,967,041k (± 0.06%) ~ 4,963,426k 4,970,461k p=1.000 n=6
Memory Allocs 46,010,396 (± 0.07%) 45,991,230 (± 0.11%) ~ 45,921,404 46,070,430 p=0.471 n=6
Config Time 0.017s (± 9.79%) 0.017s (± 5.83%) ~ 0.016s 0.018s p=0.445 n=6
Parse Time 0.499s (± 4.69%) 0.490s (± 1.76%) ~ 0.476s 0.498s p=0.423 n=6
Bind Time 0.002s 0.002s ~ ~ ~ p=1.000 n=6
Check Time 16.025s (± 0.60%) 16.047s (± 0.44%) ~ 15.958s 16.157s p=0.810 n=6
Emit Time 0.469s (± 4.16%) 0.468s (± 4.45%) ~ 0.448s 0.488s p=0.805 n=6
Total Time 17.712s (± 0.66%) 17.730s (± 0.47%) ~ 17.597s 17.844s p=0.936 n=6
self-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,394,220 1,394,220 ~ ~ ~ p=1.000 n=6
Types 442,210 442,210 ~ ~ ~ p=1.000 n=6
Memory Used 1,609,857k (± 0.36%) 1,610,113k (± 0.23%) ~ 1,605,133k 1,614,822k p=0.936 n=6
Memory Allocs 97,081,828 (± 0.03%) 96,807,238 (± 0.06%) -274,590 (- 0.28%) 96,722,743 96,887,292 p=0.005 n=6
Config Time 0.021s (±18.55%) 0.024s (±41.84%) ~ 0.011s 0.037s p=0.378 n=6
Parse Time 0.259s (± 5.47%) 0.251s (± 4.08%) ~ 0.234s 0.264s p=0.378 n=6
Bind Time 0.000s (±244.70%) 0.000s ~ ~ ~ p=0.405 n=6
Check Time 2.169s (± 0.63%) 2.118s (± 1.18%) -0.051s (- 2.36%) 2.082s 2.157s p=0.010 n=6
Emit Time 0.314s (± 4.99%) 0.305s (± 5.17%) ~ 0.284s 0.322s p=0.630 n=6
Total Time 28.896s (± 1.11%) 27.875s (± 0.38%) 🟩-1.021s (- 3.53%) 27.738s 27.998s p=0.005 n=6
self-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 337,681 337,681 ~ ~ ~ p=1.000 n=6
Types 199,559 199,559 ~ ~ ~ p=1.000 n=6
Memory Used 320,612k (± 0.04%) 320,747k (± 0.05%) ~ 320,574k 320,998k p=0.173 n=6
Memory Allocs 4,676,759 (± 0.01%) 4,661,996 (± 0.02%) -14,763 (- 0.32%) 4,661,310 4,662,920 p=0.005 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.111s (± 1.36%) 0.113s (± 3.91%) ~ 0.108s 0.119s p=0.625 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 1.276s (± 0.43%) 1.226s (± 0.91%) 🟩-0.050s (- 3.92%) 1.213s 1.241s p=0.005 n=6
Emit Time 0.117s (± 7.80%) 0.118s (± 5.48%) ~ 0.110s 0.126s p=1.000 n=6
Total Time 1.559s (± 0.50%) 1.510s (± 1.10%) 🟩-0.049s (- 3.13%) 1.493s 1.534s p=0.005 n=6
ts-pre-modules - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 97,488 97,488 ~ ~ ~ p=1.000 n=6
Types 356 356 ~ ~ ~ p=1.000 n=6
Memory Used 128,887k (± 0.00%) 128,884k (± 0.01%) ~ 128,875k 128,896k p=0.572 n=6
Memory Allocs 177,390 (± 0.11%) 177,439 (± 0.23%) ~ 177,200 178,247 p=1.000 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.105s (± 3.92%) 0.103s (± 2.74%) ~ 0.100s 0.107s p=0.253 n=6
Bind Time 0.039s (±10.12%) 0.042s (± 9.35%) ~ 0.037s 0.046s p=0.468 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Total Time 0.148s (± 1.81%) 0.148s (± 2.39%) ~ 0.142s 0.152s p=0.746 n=6
vscode - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 7,500,898 7,500,898 ~ ~ ~ p=1.000 n=6
Types 2,616,924 2,616,919 -5 (- 0.00%) ~ ~ p=0.001 n=6
Memory Used 5,050,015k (± 0.03%) 5,049,860k (± 0.03%) ~ 5,048,080k 5,051,220k p=0.936 n=6
Memory Allocs 38,243,871 (± 0.12%) 38,168,697 (± 0.09%) -75,174 (- 0.20%) 38,137,395 38,222,037 p=0.020 n=6
Config Time 0.076s (± 9.82%) 0.080s (± 9.31%) ~ 0.069s 0.089s p=0.520 n=6
Parse Time 0.905s (± 4.95%) 0.935s (± 2.57%) ~ 0.894s 0.954s p=0.297 n=6
Bind Time 0.212s (±31.61%) 0.169s (± 7.49%) ~ 0.160s 0.193s p=0.128 n=6
Check Time 8.614s (± 1.42%) 8.585s (± 1.22%) ~ 8.445s 8.721s p=0.689 n=6
Emit Time 2.354s (±10.95%) 2.408s (±10.68%) ~ 2.080s 2.663s p=0.873 n=6
Total Time 12.186s (± 1.02%) 12.199s (± 1.59%) ~ 11.990s 12.427s p=0.936 n=6
webpack - native
Errors 2 2 ~ ~ ~ p=1.000 n=6
Symbols 193,872 193,872 ~ ~ ~ p=1.000 n=6
Types 340 340 ~ ~ ~ p=1.000 n=6
Memory Used 230,159k (± 0.16%) 230,472k (± 0.07%) ~ 230,237k 230,720k p=0.128 n=6
Memory Allocs 972,870 (± 0.88%) 976,803 (± 0.43%) ~ 970,334 982,440 p=0.298 n=6
Config Time 0.010s (±21.00%) 0.012s (± 6.18%) ~ 0.011s 0.013s p=0.075 n=6
Parse Time 0.152s (± 4.83%) 0.151s (± 3.93%) ~ 0.142s 0.160s p=0.872 n=6
Bind Time 0s 0s ~ ~ ~ p=1.000 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.047s (±15.35%) 0.036s (± 7.91%) 🟩-0.011s (-22.42%) 0.034s 0.040s p=0.013 n=6
Total Time 0.209s (± 1.92%) 0.200s (± 4.61%) ~ 0.186s 0.213s p=0.053 n=6
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,064,618 1,064,618 ~ ~ ~ p=1.000 n=6
Types 392,776 392,776 ~ ~ ~ p=1.000 n=6
Memory Used 637,948k (± 0.04%) 637,990k (± 0.02%) ~ 637,859k 638,134k p=0.936 n=6
Memory Allocs 4,985,976 (± 0.07%) 4,989,381 (± 0.14%) ~ 4,982,382 5,002,524 p=0.575 n=6
Config Time 0.005s (±18.57%) 0.005s (±17.48%) ~ 0.003s 0.005s p=0.673 n=6
Parse Time 0.133s (± 5.79%) 0.123s (± 2.65%) 🟩-0.009s (- 6.91%) 0.117s 0.126s p=0.045 n=6
Bind Time 0.034s (±22.75%) 0.031s (± 8.79%) ~ 0.027s 0.035s p=0.628 n=6
Check Time 1.234s (± 0.80%) 1.238s (± 1.19%) ~ 1.218s 1.263s p=0.810 n=6
Emit Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Total Time 1.411s (± 1.02%) 1.403s (± 0.93%) ~ 1.391s 1.427s p=0.575 n=6
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • self-build-src - native
  • self-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

@ahejlsberg

Copy link
Copy Markdown
Member Author

@typescript-bot perf test this faster

@typescript-automation

typescript-automation Bot commented Jul 29, 2026

Copy link
Copy Markdown

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test this faster ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown

@ahejlsberg
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=6
Symbols 119,733 119,733 ~ ~ ~ p=1.000 n=6
Types 99,032 99,032 ~ ~ ~ p=1.000 n=6
Memory Used 152,286k (± 1.06%) 151,521k (± 0.89%) ~ 150,228k 153,629k p=0.378 n=6
Memory Allocs 2,275,764 (± 0.01%) 2,263,382 (± 0.01%) -12,382 (- 0.54%) 2,263,213 2,263,581 p=0.005 n=6
Config Time 0.000s (±244.70%) 0.000s (±244.70%) ~ 0.000s 0.001s p=1.000 n=6
Parse Time 0.055s (± 8.03%) 0.057s (± 4.48%) ~ 0.055s 0.062s p=0.291 n=6
Bind Time 0.018s (±30.19%) 0.019s (±21.29%) ~ 0.016s 0.027s p=0.167 n=6
Check Time 0.760s (± 0.60%) 0.744s (± 0.46%) -0.017s (- 2.24%) 0.740s 0.748s p=0.005 n=6
Emit Time 0.313s (± 2.28%) 0.314s (± 1.46%) ~ 0.306s 0.320s p=0.294 n=6
Total Time 1.149s (± 0.55%) 1.136s (± 0.48%) -0.013s (- 1.15%) 1.130s 1.144s p=0.010 n=6
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 872,125 (± 0.14%) 871,947 (± 0.18%) ~ 869,284 873,651 p=0.689 n=6
Types 263,962 (± 0.00%) 263,961 (± 0.00%) ~ 263,960 263,962 p=0.071 n=6
Memory Used 809,435k (± 0.07%) 809,558k (± 0.06%) ~ 809,013k 810,082k p=0.689 n=6
Memory Allocs 13,146,135 (± 0.10%) 13,161,150 (± 0.23%) ~ 13,132,285 13,220,244 p=0.575 n=6
Config Time 0.017s (± 2.38%) 0.018s (± 4.78%) ~ 0.017s 0.019s p=0.527 n=6
Parse Time 0.239s (± 5.52%) 0.248s (± 3.39%) ~ 0.235s 0.259s p=0.230 n=6
Bind Time 0.051s (±33.81%) 0.055s (±29.23%) ~ 0.038s 0.075s p=0.630 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 1.902s (± 2.12%) 1.890s (± 2.03%) ~ 1.828s 1.930s p=0.689 n=6
Total Time 2.221s (± 1.83%) 2.225s (± 1.53%) ~ 2.187s 2.264s p=1.000 n=6
mui-docs - native
Errors 11,274 (± 0.07%) 11,276 (± 0.06%) ~ 11,263 11,282 p=0.872 n=6
Symbols 4,384,004 4,384,004 ~ ~ ~ p=1.000 n=6
Types 1,536,962 1,536,962 ~ ~ ~ p=1.000 n=6
Memory Used 4,961,924k (± 0.05%) 4,963,204k (± 0.05%) ~ 4,960,249k 4,966,983k p=0.810 n=6
Memory Allocs 46,000,735 (± 0.06%) 45,978,550 (± 0.06%) ~ 45,931,634 46,010,929 p=0.298 n=6
Config Time 0.017s (± 5.07%) 0.018s (±13.45%) ~ 0.016s 0.022s p=0.371 n=6
Parse Time 0.497s (± 2.99%) 0.498s (± 3.49%) ~ 0.472s 0.524s p=1.000 n=6
Bind Time 0.002s 0.002s ~ ~ ~ p=1.000 n=6
Check Time 16.062s (± 0.49%) 16.055s (± 0.59%) ~ 15.925s 16.162s p=1.000 n=6
Emit Time 0.464s (± 4.06%) 0.461s (± 4.16%) ~ 0.447s 0.487s p=0.470 n=6
Total Time 17.743s (± 0.56%) 17.744s (± 0.63%) ~ 17.599s 17.864s p=1.000 n=6
self-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,394,220 1,394,220 ~ ~ ~ p=1.000 n=6
Types 442,210 442,210 ~ ~ ~ p=1.000 n=6
Memory Used 1,592,641k (± 0.27%) 1,598,266k (± 0.23%) +5,626k (+ 0.35%) 1,593,129k 1,603,584k p=0.045 n=6
Memory Allocs 97,050,204 (± 0.06%) 96,805,774 (± 0.04%) -244,430 (- 0.25%) 96,726,929 96,850,624 p=0.005 n=6
Config Time 0.024s (±65.51%) 0.014s (±31.27%) ~ 0.007s 0.017s p=0.128 n=6
Parse Time 0.264s (± 4.47%) 0.255s (± 5.08%) ~ 0.242s 0.276s p=0.378 n=6
Bind Time 0.000s (±244.70%) 0.000s (±244.70%) ~ 0.000s 0.001s p=1.000 n=6
Check Time 2.160s (± 0.46%) 2.112s (± 1.36%) -0.048s (- 2.23%) 2.074s 2.147s p=0.008 n=6
Emit Time 0.307s (± 3.30%) 0.300s (± 3.56%) ~ 0.292s 0.320s p=0.227 n=6
Total Time 28.779s (± 0.94%) 27.855s (± 0.66%) 🟩-0.924s (- 3.21%) 27.627s 28.012s p=0.005 n=6
self-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 337,681 337,681 ~ ~ ~ p=1.000 n=6
Types 199,559 199,559 ~ ~ ~ p=1.000 n=6
Memory Used 319,410k (± 0.05%) 319,562k (± 0.03%) ~ 319,445k 319,686k p=0.128 n=6
Memory Allocs 4,676,196 (± 0.02%) 4,661,881 (± 0.01%) -14,315 (- 0.31%) 4,661,489 4,662,903 p=0.005 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.115s (± 2.11%) 0.117s (± 6.50%) ~ 0.110s 0.129s p=0.747 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 1.282s (± 1.18%) 1.226s (± 1.28%) 🟩-0.057s (- 4.42%) 1.204s 1.251s p=0.005 n=6
Emit Time 0.121s (±12.89%) 0.111s (± 4.35%) ~ 0.104s 0.116s p=0.296 n=6
Total Time 1.570s (± 1.42%) 1.511s (± 1.10%) 🟩-0.059s (- 3.76%) 1.486s 1.536s p=0.005 n=6
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=6
Symbols 302,232 302,232 ~ ~ ~ p=1.000 n=6
Types 181,595 181,594 -1 (- 0.00%) ~ ~ p=0.001 n=6
Memory Used 274,995k (± 0.05%) 275,245k (± 0.02%) +250k (+ 0.09%) 275,144k 275,338k p=0.013 n=6
Memory Allocs 1,675,311 (± 0.03%) 1,663,498 (± 0.01%) -11,813 (- 0.71%) 1,663,242 1,663,833 p=0.005 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.106s (± 4.23%) 0.104s (± 5.63%) ~ 0.097s 0.113s p=0.378 n=6
Bind Time 0.037s (±19.06%) 0.035s (±10.17%) ~ 0.031s 0.039s p=0.936 n=6
Check Time 1.084s (± 0.77%) 0.992s (± 1.28%) 🟩-0.092s (- 8.52%) 0.981s 1.012s p=0.005 n=6
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Total Time 1.233s (± 0.61%) 1.136s (± 1.46%) 🟩-0.097s (- 7.88%) 1.119s 1.164s p=0.005 n=6
vscode - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 7,461,365 7,461,365 ~ ~ ~ p=1.000 n=6
Types 2,603,445 2,603,439 -6 (- 0.00%) ~ ~ p=0.001 n=6
Memory Used 5,023,073k (± 0.02%) 5,022,717k (± 0.02%) ~ 5,021,736k 5,023,971k p=0.689 n=6
Memory Allocs 38,144,289 (± 0.09%) 38,071,706 (± 0.10%) -72,583 (- 0.19%) 38,036,002 38,142,151 p=0.020 n=6
Config Time 0.075s (± 7.10%) 0.084s (± 4.95%) 🔻+0.008s (+11.09%) 0.080s 0.090s p=0.035 n=6
Parse Time 0.937s (± 6.26%) 0.906s (± 3.00%) ~ 0.866s 0.940s p=0.471 n=6
Bind Time 0.189s (±34.88%) 0.181s (±24.37%) ~ 0.156s 0.270s p=1.000 n=6
Check Time 8.539s (± 0.73%) 8.548s (± 0.79%) ~ 8.498s 8.680s p=1.000 n=6
Emit Time 2.478s (± 8.48%) 2.438s (± 6.52%) ~ 2.129s 2.572s p=0.575 n=6
Total Time 12.236s (± 1.46%) 12.175s (± 0.57%) ~ 12.062s 12.264s p=0.689 n=6
webpack - native
Errors 2 2 ~ ~ ~ p=1.000 n=6
Symbols 193,897 193,897 ~ ~ ~ p=1.000 n=6
Types 340 340 ~ ~ ~ p=1.000 n=6
Memory Used 228,049k (± 0.10%) 227,834k (± 0.06%) ~ 227,670k 228,015k p=0.108 n=6
Memory Allocs 973,234 (± 0.50%) 968,213 (± 0.28%) ~ 965,486 971,640 p=0.066 n=6
Config Time 0.012s (±11.70%) 0.011s (±22.90%) ~ 0.008s 0.014s p=0.568 n=6
Parse Time 0.147s (± 3.99%) 0.147s (± 4.03%) ~ 0.141s 0.155s p=0.936 n=6
Bind Time 0s 0s ~ ~ ~ p=1.000 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.047s (±18.38%) 0.045s (±20.46%) ~ 0.037s 0.061s p=0.376 n=6
Total Time 0.206s (± 3.94%) 0.202s (± 5.87%) ~ 0.188s 0.222s p=0.468 n=6
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,064,618 1,064,618 ~ ~ ~ p=1.000 n=6
Types 392,776 392,776 ~ ~ ~ p=1.000 n=6
Memory Used 634,356k (± 0.01%) 634,352k (± 0.03%) ~ 634,049k 634,576k p=1.000 n=6
Memory Allocs 4,995,015 (± 0.18%) 4,998,267 (± 0.22%) ~ 4,983,262 5,008,811 p=0.378 n=6
Config Time 0.005s 0.005s (± 7.89%) ~ 0.005s 0.006s p=0.405 n=6
Parse Time 0.128s (± 4.17%) 0.130s (± 6.13%) ~ 0.123s 0.140s p=0.872 n=6
Bind Time 0.030s (±13.38%) 0.032s (±29.48%) ~ 0.025s 0.050s p=0.747 n=6
Check Time 1.247s (± 0.88%) 1.248s (± 1.57%) ~ 1.219s 1.270s p=0.810 n=6
Emit Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Total Time 1.416s (± 0.85%) 1.420s (± 1.41%) ~ 1.389s 1.438s p=0.810 n=6
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • self-build-src - native
  • self-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

@ahejlsberg

Copy link
Copy Markdown
Member Author

@typescript-bot perf test this faster

@typescript-automation

typescript-automation Bot commented Jul 30, 2026

Copy link
Copy Markdown

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test this faster ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown

@ahejlsberg
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=6
Symbols 119,733 119,733 ~ ~ ~ p=1.000 n=6
Types 99,032 99,032 ~ ~ ~ p=1.000 n=6
Memory Used 152,795k (± 0.67%) 152,587k (± 0.60%) ~ 151,310k 153,702k p=0.699 n=6
Memory Allocs 2,275,832 (± 0.01%) 2,263,560 (± 0.00%) -12,273 (- 0.54%) 2,263,449 2,263,738 p=0.002 n=6
Config Time 0.000s 0.000s (±244.70%) ~ 0.000s 0.001s p=1.000 n=6
Parse Time 0.050s (± 5.26%) 0.054s (± 1.92%) 🔻+0.004s (+ 6.98%) 0.052s 0.055s p=0.045 n=6
Bind Time 0.019s (±16.62%) 0.018s (±18.63%) ~ 0.014s 0.024s p=0.898 n=6
Check Time 0.763s (± 0.86%) 0.741s (± 0.76%) -0.023s (- 2.97%) 0.732s 0.747s p=0.002 n=6
Emit Time 0.304s (± 1.86%) 0.312s (± 3.78%) ~ 0.304s 0.335s p=0.143 n=6
Total Time 1.143s (± 0.73%) 1.131s (± 1.26%) ~ 1.115s 1.158s p=0.167 n=6
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 872,048 (± 0.09%) 872,148 (± 0.09%) ~ 871,281 873,257 p=0.699 n=6
Types 263,961 (± 0.00%) 263,962 (± 0.00%) ~ 263,960 263,964 p=0.784 n=6
Memory Used 808,026k (± 0.09%) 808,118k (± 0.06%) ~ 807,535k 808,970k p=0.485 n=6
Memory Allocs 13,144,489 (± 0.16%) 13,142,423 (± 0.07%) ~ 13,133,290 13,157,627 p=0.589 n=6
Config Time 0.017s (± 2.38%) 0.018s (± 9.23%) ~ 0.017s 0.021s p=1.000 n=6
Parse Time 0.237s (± 3.38%) 0.233s (±10.62%) ~ 0.197s 0.260s p=0.937 n=6
Bind Time 0.067s (±46.30%) 0.050s (±35.77%) ~ 0.039s 0.083s p=0.225 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 1.859s (± 1.51%) 1.886s (± 2.57%) ~ 1.800s 1.931s p=0.225 n=6
Total Time 2.190s (± 1.06%) 2.196s (± 2.82%) ~ 2.108s 2.279s p=0.937 n=6
mui-docs - native
Errors 11,276 (± 0.05%) 11,281 (± 0.01%) +6 (+ 0.05%) 11,280 11,282 p=0.039 n=6
Symbols 4,386,587 4,386,587 ~ ~ ~ p=1.000 n=6
Types 1,537,077 1,537,077 ~ ~ ~ p=1.000 n=6
Memory Used 4,961,900k (± 0.06%) 4,961,201k (± 0.04%) ~ 4,959,491k 4,964,166k p=0.699 n=6
Memory Allocs 46,021,968 (± 0.10%) 46,002,452 (± 0.07%) ~ 45,946,844 46,029,715 p=0.937 n=6
Config Time 0.017s (± 8.68%) 0.017s (± 6.44%) ~ 0.016s 0.019s p=1.000 n=6
Parse Time 0.512s (± 4.24%) 0.506s (± 3.34%) ~ 0.491s 0.538s p=0.589 n=6
Bind Time 0.002s 0.002s ~ ~ ~ p=1.000 n=6
Check Time 16.039s (± 0.40%) 16.040s (± 0.30%) ~ 15.988s 16.094s p=0.667 n=6
Emit Time 0.463s (± 4.28%) 0.468s (± 4.39%) ~ 0.448s 0.494s p=0.699 n=6
Total Time 17.745s (± 0.38%) 17.760s (± 0.43%) ~ 17.670s 17.854s p=0.589 n=6
self-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,394,491 1,394,491 ~ ~ ~ p=1.000 n=6
Types 442,212 442,212 ~ ~ ~ p=1.000 n=6
Memory Used 1,592,281k (± 0.29%) 1,595,166k (± 0.17%) ~ 1,591,130k 1,598,719k p=0.132 n=6
Memory Allocs 97,084,094 (± 0.04%) 96,815,363 (± 0.04%) -268,731 (- 0.28%) 96,761,699 96,865,732 p=0.002 n=6
Config Time 0.022s (±37.39%) 0.025s (±15.76%) ~ 0.021s 0.031s p=0.589 n=6
Parse Time 0.255s (± 5.26%) 0.254s (± 2.81%) ~ 0.248s 0.263s p=0.788 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 2.163s (± 0.57%) 2.100s (± 0.48%) -0.063s (- 2.89%) 2.089s 2.115s p=0.002 n=6
Emit Time 0.304s (± 7.51%) 0.297s (± 3.31%) ~ 0.281s 0.311s p=0.937 n=6
Total Time 28.841s (± 1.15%) 28.067s (± 0.81%) -0.774s (- 2.68%) 27.776s 28.285s p=0.002 n=6
self-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 337,834 337,834 ~ ~ ~ p=1.000 n=6
Types 199,561 199,561 ~ ~ ~ p=1.000 n=6
Memory Used 318,757k (± 0.05%) 319,049k (± 0.03%) +292k (+ 0.09%) 318,926k 319,185k p=0.009 n=6
Memory Allocs 4,677,877 (± 0.02%) 4,663,666 (± 0.02%) -14,212 (- 0.30%) 4,662,407 4,664,720 p=0.002 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.116s (± 6.30%) 0.112s (± 1.75%) ~ 0.110s 0.115s p=0.903 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 1.286s (± 1.26%) 1.211s (± 0.67%) 🟩-0.075s (- 5.82%) 1.197s 1.221s p=0.002 n=6
Emit Time 0.116s (± 9.58%) 0.121s (± 8.90%) ~ 0.107s 0.138s p=0.619 n=6
Total Time 1.571s (± 1.53%) 1.497s (± 0.96%) 🟩-0.074s (- 4.71%) 1.474s 1.511s p=0.002 n=6
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=6
Symbols 302,246 302,246 ~ ~ ~ p=1.000 n=6
Types 181,595 181,594 -1 (- 0.00%) ~ ~ p=0.002 n=6
Memory Used 274,899k (± 0.03%) 275,022k (± 0.01%) +123k (+ 0.04%) 274,980k 275,055k p=0.009 n=6
Memory Allocs 1,675,361 (± 0.02%) 1,663,746 (± 0.02%) -11,615 (- 0.69%) 1,663,427 1,664,411 p=0.002 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.099s (± 5.57%) 0.101s (± 4.69%) ~ 0.095s 0.107s p=0.511 n=6
Bind Time 0.039s (± 2.98%) 0.038s (±11.15%) ~ 0.030s 0.042s p=1.000 n=6
Check Time 1.074s (± 1.27%) 0.984s (± 1.42%) 🟩-0.091s (- 8.43%) 0.967s 1.009s p=0.002 n=6
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Total Time 1.229s (± 1.08%) 1.137s (± 1.17%) 🟩-0.092s (- 7.48%) 1.126s 1.163s p=0.002 n=6
vscode - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 7,495,321 7,495,321 ~ ~ ~ p=1.000 n=6
Types 2,609,114 2,609,110 -4 (- 0.00%) ~ ~ p=0.002 n=6
Memory Used 5,009,518k (± 0.01%) 5,009,363k (± 0.01%) ~ 5,008,626k 5,010,015k p=0.818 n=6
Memory Allocs 38,261,014 (± 0.04%) 38,185,617 (± 0.09%) -75,397 (- 0.20%) 38,157,364 38,243,085 p=0.002 n=6
Config Time 0.079s (± 9.59%) 0.075s (±15.69%) ~ 0.061s 0.091s p=0.667 n=6
Parse Time 0.931s (± 1.18%) 0.900s (± 3.63%) ~ 0.856s 0.949s p=0.093 n=6
Bind Time 0.164s (± 3.45%) 0.188s (±18.84%) ~ 0.156s 0.234s p=0.331 n=6
Check Time 8.628s (± 1.26%) 8.675s (± 1.28%) ~ 8.550s 8.823s p=0.699 n=6
Emit Time 2.542s (± 8.21%) 2.333s (± 9.79%) ~ 2.097s 2.599s p=0.132 n=6
Total Time 12.360s (± 1.00%) 12.195s (± 0.88%) -0.165s (- 1.34%) 12.025s 12.312s p=0.026 n=6
webpack - native
Errors 2 2 ~ ~ ~ p=1.000 n=6
Symbols 193,897 193,897 ~ ~ ~ p=1.000 n=6
Types 340 340 ~ ~ ~ p=1.000 n=6
Memory Used 227,925k (± 0.17%) 227,984k (± 0.06%) ~ 227,784k 228,234k p=0.699 n=6
Memory Allocs 970,865 (± 0.62%) 972,808 (± 0.60%) ~ 967,772 982,255 p=0.699 n=6
Config Time 0.012s (±14.89%) 0.011s (±13.17%) ~ 0.009s 0.013s p=0.714 n=6
Parse Time 0.150s (± 5.60%) 0.151s (± 3.95%) ~ 0.145s 0.162s p=0.972 n=6
Bind Time 0s 0s ~ ~ ~ p=1.000 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.047s (±27.20%) 0.040s (±14.87%) ~ 0.036s 0.052s p=0.773 n=6
Total Time 0.210s (± 4.28%) 0.204s (± 2.90%) ~ 0.197s 0.212s p=0.240 n=6
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,066,055 1,066,055 ~ ~ ~ p=1.000 n=6
Types 392,847 392,847 ~ ~ ~ p=1.000 n=6
Memory Used 634,804k (± 0.02%) 634,860k (± 0.01%) ~ 634,793k 634,968k p=0.310 n=6
Memory Allocs 5,005,925 (± 0.18%) 5,002,898 (± 0.18%) ~ 4,995,662 5,020,778 p=0.699 n=6
Config Time 0.005s (± 8.44%) 0.005s (± 8.44%) ~ 0.004s 0.005s p=1.000 n=6
Parse Time 0.128s (± 5.01%) 0.124s (± 5.47%) ~ 0.116s 0.132s p=0.310 n=6
Bind Time 0.030s (±24.71%) 0.032s (±24.58%) ~ 0.023s 0.042s p=0.844 n=6
Check Time 1.241s (± 0.86%) 1.242s (± 0.91%) ~ 1.226s 1.261s p=0.981 n=6
Emit Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Total Time 1.408s (± 1.29%) 1.407s (± 0.56%) ~ 1.395s 1.415s p=1.000 n=6
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • self-build-src - native
  • self-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The fast paths introduce incorrect narrowing for computed enums and non-primitive union constituents.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Comments suppressed due to low confidence (1)

internal/checker/flow.go:1129

  • This shortcut never applies to grouped case labels. Their discriminantType is a union, whose flags do not include TypeFlagsPrimitive, and unionContainsType would in any event look for that whole union as one direct constituent. Large switches with many empty fallthrough labels therefore still use the O(union constituents × grouped cases) relational fallback. Check membership for each regular discriminant constituent instead, and cover a grouped-case switch in the performance regression.
		if t.objectFlags&ObjectFlagsPrimitiveUnion != 0 && discriminantType.flags&TypeFlagsPrimitive != 0 && c.isUniformUnionType(t) {
			regularType := c.getRegularTypeOfLiteralType(discriminantType)
			if c.unionContainsType(t, regularType, false /*matchSymbol*/) {
				caseType = regularType
  • Files reviewed: 8/8 changed files
  • Comments generated: 2
  • Review effort level: Medium

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment thread internal/checker/flow.go
return c.replacePrimitivesWithLiterals(filteredType, valueType)
}
if isUnitType(valueType) {
if c.isUniformUnionType(t) {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup, an oversight.

Comment thread internal/checker/checker.go Outdated
var enumSymbol *ast.Symbol
var hasStringOrNumberLiteral bool
for _, t := range types {
if t.flags&TypeFlagsEnumLiteral != 0 {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We all hate that rule, but yeah.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants