Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JIT: Add some limits in physical promotion #87729

Merged
merged 1 commit into from
Jun 19, 2023

Conversation

jakobbotsch
Copy link
Member

@jakobbotsch jakobbotsch commented Jun 17, 2023

Add limits on how many fields we promote in each struct and how many total fields we promote. These limits are put in place to avoid pathological cases; we do not hit any of them over all of our SPMI collections (at least on win-x64).

The limits were selected based on histograms of physical promotion stats over our collections. Here they are for some of the important collections:

JitEnablePhysicalPromotion=1:

benchmarks.run_pgo
(Per context) How many fields are promoted:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     206 count ( 75% of total)
      2 ..       2 ===>     259 count ( 85% of total)
      3 ..       3 ===>     127 count ( 90% of total)
      4 ..       4 ===>      46 count ( 92% of total)
      5 ..       5 ===>      30 count ( 93% of total)
      6 ..      10 ===>      99 count ( 97% of total)
     11 ..      15 ===>      17 count ( 98% of total)
     16 ..      20 ===>      21 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      40 ===>       3 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     980 count ( 39% of total)
      1 ..       1 ===>     760 count ( 69% of total)
      2 ..       2 ===>     423 count ( 86% of total)
      3 ..       3 ===>      73 count ( 89% of total)
      4 ..       4 ===>      30 count ( 90% of total)
      5 ..       5 ===>      46 count ( 92% of total)
      6 ..       6 ===>     181 count ( 99% of total)
      7 ..       8 ===>       2 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries.pmi
(Per context) How many fields are promoted:
     <=          0 ===>   19677 count ( 76% of total)
      1 ..       1 ===>    1717 count ( 83% of total)
      2 ..       2 ===>     899 count ( 86% of total)
      3 ..       3 ===>     616 count ( 89% of total)
      4 ..       4 ===>     660 count ( 91% of total)
      5 ..       5 ===>     285 count ( 92% of total)
      6 ..      10 ===>     932 count ( 96% of total)
     11 ..      15 ===>     377 count ( 98% of total)
     16 ..      20 ===>     164 count ( 98% of total)
     21 ..      30 ===>     165 count ( 99% of total)
     31 ..      40 ===>      68 count ( 99% of total)
     41 ..      50 ===>      28 count ( 99% of total)
     51 ..     100 ===>      51 count ( 99% of total)
    101 ..     150 ===>      14 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       0 count ( 99% of total)
    301 ..     400 ===>       1 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    6218 count ( 31% of total)
      1 ..       1 ===>    5075 count ( 57% of total)
      2 ..       2 ===>    1440 count ( 65% of total)
      3 ..       3 ===>    1859 count ( 74% of total)
      4 ..       4 ===>    2682 count ( 88% of total)
      5 ..       5 ===>     974 count ( 93% of total)
      6 ..       6 ===>     624 count ( 96% of total)
      7 ..       8 ===>     533 count ( 99% of total)
      9 ..      10 ===>      37 count ( 99% of total)
     11 ..      15 ===>      65 count ( 99% of total)
     16 ..      20 ===>       2 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
realworld
(Per context) How many fields are promoted:
     <=          0 ===>    1807 count ( 54% of total)
      1 ..       1 ===>     407 count ( 66% of total)
      2 ..       2 ===>     230 count ( 73% of total)
      3 ..       3 ===>     146 count ( 77% of total)
      4 ..       4 ===>     122 count ( 81% of total)
      5 ..       5 ===>      86 count ( 83% of total)
      6 ..      10 ===>     218 count ( 90% of total)
     11 ..      15 ===>     147 count ( 94% of total)
     16 ..      20 ===>      59 count ( 96% of total)
     21 ..      30 ===>      66 count ( 98% of total)
     31 ..      40 ===>      19 count ( 98% of total)
     41 ..      50 ===>      12 count ( 99% of total)
     51 ..     100 ===>      14 count ( 99% of total)
    101 ..     150 ===>       3 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       4 count ( 99% of total)
    301 ..     400 ===>       0 count ( 99% of total)
    401 ..     500 ===>       0 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    2012 count ( 32% of total)
      1 ..       1 ===>    1421 count ( 55% of total)
      2 ..       2 ===>     499 count ( 63% of total)
      3 ..       3 ===>     521 count ( 71% of total)
      4 ..       4 ===>     565 count ( 80% of total)
      5 ..       5 ===>     446 count ( 87% of total)
      6 ..       6 ===>     503 count ( 96% of total)
      7 ..       8 ===>     139 count ( 98% of total)
      9 ..      10 ===>      71 count ( 99% of total)
     11 ..      15 ===>      34 count ( 99% of total)
     16 ..      20 ===>       3 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

JitEnablePhysicalPromotion=1;JitStressModeNames=STRESS_NO_OLD_PROMOTION:

benchmarks.run_pgo
(Per context) How many fields are promoted:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     206 count ( 75% of total)
      2 ..       2 ===>     259 count ( 85% of total)
      3 ..       3 ===>     127 count ( 90% of total)
      4 ..       4 ===>      46 count ( 92% of total)
      5 ..       5 ===>      30 count ( 93% of total)
      6 ..      10 ===>      99 count ( 97% of total)
     11 ..      15 ===>      17 count ( 98% of total)
     16 ..      20 ===>      21 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      40 ===>       3 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     980 count ( 39% of total)
      1 ..       1 ===>     760 count ( 69% of total)
      2 ..       2 ===>     423 count ( 86% of total)
      3 ..       3 ===>      73 count ( 89% of total)
      4 ..       4 ===>      30 count ( 90% of total)
      5 ..       5 ===>      46 count ( 92% of total)
      6 ..       6 ===>     181 count ( 99% of total)
      7 ..       8 ===>       2 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries.pmi
(Per context) How many fields are promoted:
     <=          0 ===>   37477 count ( 48% of total)
      1 ..       1 ===>    7987 count ( 58% of total)
      2 ..       2 ===>    7292 count ( 68% of total)
      3 ..       3 ===>    2988 count ( 72% of total)
      4 ..       4 ===>    4927 count ( 78% of total)
      5 ..       5 ===>    1835 count ( 81% of total)
      6 ..      10 ===>    7147 count ( 90% of total)
     11 ..      15 ===>    2694 count ( 93% of total)
     16 ..      20 ===>    1667 count ( 95% of total)
     21 ..      30 ===>    1346 count ( 97% of total)
     31 ..      40 ===>     758 count ( 98% of total)
     41 ..      50 ===>     335 count ( 99% of total)
     51 ..     100 ===>     510 count ( 99% of total)
    101 ..     150 ===>     107 count ( 99% of total)
    151 ..     200 ===>      34 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       2 count ( 99% of total)
    401 ..     500 ===>       2 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>  102669 count ( 39% of total)
      1 ..       1 ===>   57467 count ( 61% of total)
      2 ..       2 ===>   69010 count ( 88% of total)
      3 ..       3 ===>   11494 count ( 92% of total)
      4 ..       4 ===>   16887 count ( 99% of total)
      5 ..       5 ===>    1043 count ( 99% of total)
      6 ..       6 ===>     618 count ( 99% of total)
      7 ..       8 ===>     579 count ( 99% of total)
      9 ..      10 ===>      57 count ( 99% of total)
     11 ..      15 ===>      71 count ( 99% of total)
     16 ..      20 ===>       5 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
realworld
(Per context) How many fields are promoted:
     <=          0 ===>    5617 count ( 41% of total)
      1 ..       1 ===>    1657 count ( 53% of total)
      2 ..       2 ===>    1164 count ( 62% of total)
      3 ..       3 ===>     522 count ( 66% of total)
      4 ..       4 ===>     878 count ( 72% of total)
      5 ..       5 ===>     472 count ( 76% of total)
      6 ..      10 ===>    1383 count ( 86% of total)
     11 ..      15 ===>     619 count ( 91% of total)
     16 ..      20 ===>     335 count ( 93% of total)
     21 ..      30 ===>     361 count ( 96% of total)
     31 ..      40 ===>     165 count ( 97% of total)
     41 ..      50 ===>     101 count ( 98% of total)
     51 ..     100 ===>     177 count ( 99% of total)
    101 ..     150 ===>      38 count ( 99% of total)
    151 ..     200 ===>      18 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       1 count ( 99% of total)
    401 ..     500 ===>       1 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   23630 count ( 37% of total)
      1 ..       1 ===>   13267 count ( 59% of total)
      2 ..       2 ===>   16731 count ( 86% of total)
      3 ..       3 ===>    4677 count ( 93% of total)
      4 ..       4 ===>    2727 count ( 97% of total)
      5 ..       5 ===>     492 count ( 98% of total)
      6 ..       6 ===>     496 count ( 99% of total)
      7 ..       8 ===>     150 count ( 99% of total)
      9 ..      10 ===>      92 count ( 99% of total)
     11 ..      15 ===>      41 count ( 99% of total)
     16 ..      20 ===>       3 count ( 99% of total)
     21 ..      30 ===>       3 count ( 99% of total)
     31 ..      50 ===>       3 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

Add limits on how many fields we promote in each struct and how many
total fields we promote. These limits are put in place to avoid
pathological cases; we do not hit any of them over all of our SPMI
collections (at least on win-x64).

The limits were selected based on histograms of physical promotion stats
over our collections. Here they are for some of the important
collections:

JitEnablePhysicalPromotion=1:
benchmarks.run_pgo:

```
(Per context) How many fields are promoted:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     206 count ( 75% of total)
      2 ..       2 ===>     259 count ( 85% of total)
      3 ..       3 ===>     127 count ( 90% of total)
      4 ..       4 ===>      46 count ( 92% of total)
      5 ..       5 ===>      30 count ( 93% of total)
      6 ..      10 ===>      99 count ( 97% of total)
     11 ..      15 ===>      17 count ( 98% of total)
     16 ..      20 ===>      21 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      40 ===>       3 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     980 count ( 39% of total)
      1 ..       1 ===>     760 count ( 69% of total)
      2 ..       2 ===>     423 count ( 86% of total)
      3 ..       3 ===>      73 count ( 89% of total)
      4 ..       4 ===>      30 count ( 90% of total)
      5 ..       5 ===>      46 count ( 92% of total)
      6 ..       6 ===>     181 count ( 99% of total)
      7 ..       8 ===>       2 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
```

libraries.pmi:

```
(Per context) How many fields are promoted:
     <=          0 ===>   19677 count ( 76% of total)
      1 ..       1 ===>    1717 count ( 83% of total)
      2 ..       2 ===>     899 count ( 86% of total)
      3 ..       3 ===>     616 count ( 89% of total)
      4 ..       4 ===>     660 count ( 91% of total)
      5 ..       5 ===>     285 count ( 92% of total)
      6 ..      10 ===>     932 count ( 96% of total)
     11 ..      15 ===>     377 count ( 98% of total)
     16 ..      20 ===>     164 count ( 98% of total)
     21 ..      30 ===>     165 count ( 99% of total)
     31 ..      40 ===>      68 count ( 99% of total)
     41 ..      50 ===>      28 count ( 99% of total)
     51 ..     100 ===>      51 count ( 99% of total)
    101 ..     150 ===>      14 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       0 count ( 99% of total)
    301 ..     400 ===>       1 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    6218 count ( 31% of total)
      1 ..       1 ===>    5075 count ( 57% of total)
      2 ..       2 ===>    1440 count ( 65% of total)
      3 ..       3 ===>    1859 count ( 74% of total)
      4 ..       4 ===>    2682 count ( 88% of total)
      5 ..       5 ===>     974 count ( 93% of total)
      6 ..       6 ===>     624 count ( 96% of total)
      7 ..       8 ===>     533 count ( 99% of total)
      9 ..      10 ===>      37 count ( 99% of total)
     11 ..      15 ===>      65 count ( 99% of total)
     16 ..      20 ===>       2 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
```

realworld:

```
(Per context) How many fields are promoted:
     <=          0 ===>    1807 count ( 54% of total)
      1 ..       1 ===>     407 count ( 66% of total)
      2 ..       2 ===>     230 count ( 73% of total)
      3 ..       3 ===>     146 count ( 77% of total)
      4 ..       4 ===>     122 count ( 81% of total)
      5 ..       5 ===>      86 count ( 83% of total)
      6 ..      10 ===>     218 count ( 90% of total)
     11 ..      15 ===>     147 count ( 94% of total)
     16 ..      20 ===>      59 count ( 96% of total)
     21 ..      30 ===>      66 count ( 98% of total)
     31 ..      40 ===>      19 count ( 98% of total)
     41 ..      50 ===>      12 count ( 99% of total)
     51 ..     100 ===>      14 count ( 99% of total)
    101 ..     150 ===>       3 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       4 count ( 99% of total)
    301 ..     400 ===>       0 count ( 99% of total)
    401 ..     500 ===>       0 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    2012 count ( 32% of total)
      1 ..       1 ===>    1421 count ( 55% of total)
      2 ..       2 ===>     499 count ( 63% of total)
      3 ..       3 ===>     521 count ( 71% of total)
      4 ..       4 ===>     565 count ( 80% of total)
      5 ..       5 ===>     446 count ( 87% of total)
      6 ..       6 ===>     503 count ( 96% of total)
      7 ..       8 ===>     139 count ( 98% of total)
      9 ..      10 ===>      71 count ( 99% of total)
     11 ..      15 ===>      34 count ( 99% of total)
     16 ..      20 ===>       3 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
```

JitEnablePhysicalPromotion=1;JitStressModeNames=STRESS_NO_OLD_PROMOTION:
benchmarks.run_pgo:

```
(Per context) How many fields are promoted:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     206 count ( 75% of total)
      2 ..       2 ===>     259 count ( 85% of total)
      3 ..       3 ===>     127 count ( 90% of total)
      4 ..       4 ===>      46 count ( 92% of total)
      5 ..       5 ===>      30 count ( 93% of total)
      6 ..      10 ===>      99 count ( 97% of total)
     11 ..      15 ===>      17 count ( 98% of total)
     16 ..      20 ===>      21 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      40 ===>       3 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     980 count ( 39% of total)
      1 ..       1 ===>     760 count ( 69% of total)
      2 ..       2 ===>     423 count ( 86% of total)
      3 ..       3 ===>      73 count ( 89% of total)
      4 ..       4 ===>      30 count ( 90% of total)
      5 ..       5 ===>      46 count ( 92% of total)
      6 ..       6 ===>     181 count ( 99% of total)
      7 ..       8 ===>       2 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
```

libraries.pmi:
```
(Per context) How many fields are promoted:
     <=          0 ===>   37477 count ( 48% of total)
      1 ..       1 ===>    7987 count ( 58% of total)
      2 ..       2 ===>    7292 count ( 68% of total)
      3 ..       3 ===>    2988 count ( 72% of total)
      4 ..       4 ===>    4927 count ( 78% of total)
      5 ..       5 ===>    1835 count ( 81% of total)
      6 ..      10 ===>    7147 count ( 90% of total)
     11 ..      15 ===>    2694 count ( 93% of total)
     16 ..      20 ===>    1667 count ( 95% of total)
     21 ..      30 ===>    1346 count ( 97% of total)
     31 ..      40 ===>     758 count ( 98% of total)
     41 ..      50 ===>     335 count ( 99% of total)
     51 ..     100 ===>     510 count ( 99% of total)
    101 ..     150 ===>     107 count ( 99% of total)
    151 ..     200 ===>      34 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       2 count ( 99% of total)
    401 ..     500 ===>       2 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>  102669 count ( 39% of total)
      1 ..       1 ===>   57467 count ( 61% of total)
      2 ..       2 ===>   69010 count ( 88% of total)
      3 ..       3 ===>   11494 count ( 92% of total)
      4 ..       4 ===>   16887 count ( 99% of total)
      5 ..       5 ===>    1043 count ( 99% of total)
      6 ..       6 ===>     618 count ( 99% of total)
      7 ..       8 ===>     579 count ( 99% of total)
      9 ..      10 ===>      57 count ( 99% of total)
     11 ..      15 ===>      71 count ( 99% of total)
     16 ..      20 ===>       5 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
```

realworld:
```
(Per context) How many fields are promoted:
     <=          0 ===>    5617 count ( 41% of total)
      1 ..       1 ===>    1657 count ( 53% of total)
      2 ..       2 ===>    1164 count ( 62% of total)
      3 ..       3 ===>     522 count ( 66% of total)
      4 ..       4 ===>     878 count ( 72% of total)
      5 ..       5 ===>     472 count ( 76% of total)
      6 ..      10 ===>    1383 count ( 86% of total)
     11 ..      15 ===>     619 count ( 91% of total)
     16 ..      20 ===>     335 count ( 93% of total)
     21 ..      30 ===>     361 count ( 96% of total)
     31 ..      40 ===>     165 count ( 97% of total)
     41 ..      50 ===>     101 count ( 98% of total)
     51 ..     100 ===>     177 count ( 99% of total)
    101 ..     150 ===>      38 count ( 99% of total)
    151 ..     200 ===>      18 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       1 count ( 99% of total)
    401 ..     500 ===>       1 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   23630 count ( 37% of total)
      1 ..       1 ===>   13267 count ( 59% of total)
      2 ..       2 ===>   16731 count ( 86% of total)
      3 ..       3 ===>    4677 count ( 93% of total)
      4 ..       4 ===>    2727 count ( 97% of total)
      5 ..       5 ===>     492 count ( 98% of total)
      6 ..       6 ===>     496 count ( 99% of total)
      7 ..       8 ===>     150 count ( 99% of total)
      9 ..      10 ===>      92 count ( 99% of total)
     11 ..      15 ===>      41 count ( 99% of total)
     16 ..      20 ===>       3 count ( 99% of total)
     21 ..      30 ===>       3 count ( 99% of total)
     31 ..      50 ===>       3 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
```
@dotnet-issue-labeler dotnet-issue-labeler bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 17, 2023
@ghost ghost assigned jakobbotsch Jun 17, 2023
@ghost
Copy link

ghost commented Jun 17, 2023

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

Add limits on how many fields we promote in each struct and how many total fields we promote. These limits are put in place to avoid pathological cases; we do not hit any of them over all of our SPMI collections (at least on win-x64).

The limits were selected based on histograms of physical promotion stats over our collections. Here they are for some of the important collections:

JitEnablePhysicalPromotion=1:
benchmarks.run_pgo:

(Per context) How many fields are promoted:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     206 count ( 75% of total)
      2 ..       2 ===>     259 count ( 85% of total)
      3 ..       3 ===>     127 count ( 90% of total)
      4 ..       4 ===>      46 count ( 92% of total)
      5 ..       5 ===>      30 count ( 93% of total)
      6 ..      10 ===>      99 count ( 97% of total)
     11 ..      15 ===>      17 count ( 98% of total)
     16 ..      20 ===>      21 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      40 ===>       3 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     980 count ( 39% of total)
      1 ..       1 ===>     760 count ( 69% of total)
      2 ..       2 ===>     423 count ( 86% of total)
      3 ..       3 ===>      73 count ( 89% of total)
      4 ..       4 ===>      30 count ( 90% of total)
      5 ..       5 ===>      46 count ( 92% of total)
      6 ..       6 ===>     181 count ( 99% of total)
      7 ..       8 ===>       2 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

libraries.pmi:

(Per context) How many fields are promoted:
     <=          0 ===>   19677 count ( 76% of total)
      1 ..       1 ===>    1717 count ( 83% of total)
      2 ..       2 ===>     899 count ( 86% of total)
      3 ..       3 ===>     616 count ( 89% of total)
      4 ..       4 ===>     660 count ( 91% of total)
      5 ..       5 ===>     285 count ( 92% of total)
      6 ..      10 ===>     932 count ( 96% of total)
     11 ..      15 ===>     377 count ( 98% of total)
     16 ..      20 ===>     164 count ( 98% of total)
     21 ..      30 ===>     165 count ( 99% of total)
     31 ..      40 ===>      68 count ( 99% of total)
     41 ..      50 ===>      28 count ( 99% of total)
     51 ..     100 ===>      51 count ( 99% of total)
    101 ..     150 ===>      14 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       0 count ( 99% of total)
    301 ..     400 ===>       1 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    6218 count ( 31% of total)
      1 ..       1 ===>    5075 count ( 57% of total)
      2 ..       2 ===>    1440 count ( 65% of total)
      3 ..       3 ===>    1859 count ( 74% of total)
      4 ..       4 ===>    2682 count ( 88% of total)
      5 ..       5 ===>     974 count ( 93% of total)
      6 ..       6 ===>     624 count ( 96% of total)
      7 ..       8 ===>     533 count ( 99% of total)
      9 ..      10 ===>      37 count ( 99% of total)
     11 ..      15 ===>      65 count ( 99% of total)
     16 ..      20 ===>       2 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

realworld:

(Per context) How many fields are promoted:
     <=          0 ===>    1807 count ( 54% of total)
      1 ..       1 ===>     407 count ( 66% of total)
      2 ..       2 ===>     230 count ( 73% of total)
      3 ..       3 ===>     146 count ( 77% of total)
      4 ..       4 ===>     122 count ( 81% of total)
      5 ..       5 ===>      86 count ( 83% of total)
      6 ..      10 ===>     218 count ( 90% of total)
     11 ..      15 ===>     147 count ( 94% of total)
     16 ..      20 ===>      59 count ( 96% of total)
     21 ..      30 ===>      66 count ( 98% of total)
     31 ..      40 ===>      19 count ( 98% of total)
     41 ..      50 ===>      12 count ( 99% of total)
     51 ..     100 ===>      14 count ( 99% of total)
    101 ..     150 ===>       3 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       4 count ( 99% of total)
    301 ..     400 ===>       0 count ( 99% of total)
    401 ..     500 ===>       0 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    2012 count ( 32% of total)
      1 ..       1 ===>    1421 count ( 55% of total)
      2 ..       2 ===>     499 count ( 63% of total)
      3 ..       3 ===>     521 count ( 71% of total)
      4 ..       4 ===>     565 count ( 80% of total)
      5 ..       5 ===>     446 count ( 87% of total)
      6 ..       6 ===>     503 count ( 96% of total)
      7 ..       8 ===>     139 count ( 98% of total)
      9 ..      10 ===>      71 count ( 99% of total)
     11 ..      15 ===>      34 count ( 99% of total)
     16 ..      20 ===>       3 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

JitEnablePhysicalPromotion=1;JitStressModeNames=STRESS_NO_OLD_PROMOTION: benchmarks.run_pgo:

(Per context) How many fields are promoted:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     206 count ( 75% of total)
      2 ..       2 ===>     259 count ( 85% of total)
      3 ..       3 ===>     127 count ( 90% of total)
      4 ..       4 ===>      46 count ( 92% of total)
      5 ..       5 ===>      30 count ( 93% of total)
      6 ..      10 ===>      99 count ( 97% of total)
     11 ..      15 ===>      17 count ( 98% of total)
     16 ..      20 ===>      21 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      40 ===>       3 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     980 count ( 39% of total)
      1 ..       1 ===>     760 count ( 69% of total)
      2 ..       2 ===>     423 count ( 86% of total)
      3 ..       3 ===>      73 count ( 89% of total)
      4 ..       4 ===>      30 count ( 90% of total)
      5 ..       5 ===>      46 count ( 92% of total)
      6 ..       6 ===>     181 count ( 99% of total)
      7 ..       8 ===>       2 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

libraries.pmi:

(Per context) How many fields are promoted:
     <=          0 ===>   37477 count ( 48% of total)
      1 ..       1 ===>    7987 count ( 58% of total)
      2 ..       2 ===>    7292 count ( 68% of total)
      3 ..       3 ===>    2988 count ( 72% of total)
      4 ..       4 ===>    4927 count ( 78% of total)
      5 ..       5 ===>    1835 count ( 81% of total)
      6 ..      10 ===>    7147 count ( 90% of total)
     11 ..      15 ===>    2694 count ( 93% of total)
     16 ..      20 ===>    1667 count ( 95% of total)
     21 ..      30 ===>    1346 count ( 97% of total)
     31 ..      40 ===>     758 count ( 98% of total)
     41 ..      50 ===>     335 count ( 99% of total)
     51 ..     100 ===>     510 count ( 99% of total)
    101 ..     150 ===>     107 count ( 99% of total)
    151 ..     200 ===>      34 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       2 count ( 99% of total)
    401 ..     500 ===>       2 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>  102669 count ( 39% of total)
      1 ..       1 ===>   57467 count ( 61% of total)
      2 ..       2 ===>   69010 count ( 88% of total)
      3 ..       3 ===>   11494 count ( 92% of total)
      4 ..       4 ===>   16887 count ( 99% of total)
      5 ..       5 ===>    1043 count ( 99% of total)
      6 ..       6 ===>     618 count ( 99% of total)
      7 ..       8 ===>     579 count ( 99% of total)
      9 ..      10 ===>      57 count ( 99% of total)
     11 ..      15 ===>      71 count ( 99% of total)
     16 ..      20 ===>       5 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

realworld:

(Per context) How many fields are promoted:
     <=          0 ===>    5617 count ( 41% of total)
      1 ..       1 ===>    1657 count ( 53% of total)
      2 ..       2 ===>    1164 count ( 62% of total)
      3 ..       3 ===>     522 count ( 66% of total)
      4 ..       4 ===>     878 count ( 72% of total)
      5 ..       5 ===>     472 count ( 76% of total)
      6 ..      10 ===>    1383 count ( 86% of total)
     11 ..      15 ===>     619 count ( 91% of total)
     16 ..      20 ===>     335 count ( 93% of total)
     21 ..      30 ===>     361 count ( 96% of total)
     31 ..      40 ===>     165 count ( 97% of total)
     41 ..      50 ===>     101 count ( 98% of total)
     51 ..     100 ===>     177 count ( 99% of total)
    101 ..     150 ===>      38 count ( 99% of total)
    151 ..     200 ===>      18 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       1 count ( 99% of total)
    401 ..     500 ===>       1 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   23630 count ( 37% of total)
      1 ..       1 ===>   13267 count ( 59% of total)
      2 ..       2 ===>   16731 count ( 86% of total)
      3 ..       3 ===>    4677 count ( 93% of total)
      4 ..       4 ===>    2727 count ( 97% of total)
      5 ..       5 ===>     492 count ( 98% of total)
      6 ..       6 ===>     496 count ( 99% of total)
      7 ..       8 ===>     150 count ( 99% of total)
      9 ..      10 ===>      92 count ( 99% of total)
     11 ..      15 ===>      41 count ( 99% of total)
     16 ..      20 ===>       3 count ( 99% of total)
     21 ..      30 ===>       3 count ( 99% of total)
     31 ..      50 ===>       3 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
Author: jakobbotsch
Assignees: jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone: -

@jakobbotsch
Copy link
Member Author

Some more stats and for all collections:

JitEnablePhysicalPromotion=1

benchmarks.run
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>     669 count ( 64% of total)
      1 ..       1 ===>     255 count ( 88% of total)
      2 ..       2 ===>      68 count ( 95% of total)
      3 ..       3 ===>      13 count ( 96% of total)
      4 ..       4 ===>      11 count ( 97% of total)
      5 ..       5 ===>       4 count ( 97% of total)
      6 ..      10 ===>      17 count ( 99% of total)
     11 ..      15 ===>       3 count ( 99% of total)
     16 ..      20 ===>       0 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      40 ===>       1 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>     936 count ( 89% of total)
      1 ..       1 ===>      66 count ( 96% of total)
      2 ..       2 ===>      30 count ( 99% of total)
      3 ..       3 ===>       1 count ( 99% of total)
      4 ..       4 ===>       1 count ( 99% of total)
      5 ..       5 ===>       1 count ( 99% of total)
      6 ..       6 ===>       4 count ( 99% of total)
      7 ..       8 ===>       1 count ( 99% of total)
      9 ..      10 ===>       0 count ( 99% of total)
     11 ..      15 ===>       1 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>     669 count ( 64% of total)
      1 ..       1 ===>      91 count ( 73% of total)
      2 ..       2 ===>      41 count ( 76% of total)
      3 ..       3 ===>      44 count ( 81% of total)
      4 ..       4 ===>      45 count ( 85% of total)
      5 ..       5 ===>      10 count ( 86% of total)
      6 ..      10 ===>      87 count ( 94% of total)
     11 ..      15 ===>      28 count ( 97% of total)
     16 ..      20 ===>      13 count ( 98% of total)
     21 ..      30 ===>       7 count ( 99% of total)
     31 ..      40 ===>       1 count ( 99% of total)
     41 ..      50 ===>       2 count ( 99% of total)
     51 ..     100 ===>       2 count ( 99% of total)
    101 ..     150 ===>       0 count ( 99% of total)
    151 ..     200 ===>       1 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     357 count ( 34% of total)
      1 ..       1 ===>     202 count ( 54% of total)
      2 ..       2 ===>      59 count ( 59% of total)
      3 ..       3 ===>     113 count ( 70% of total)
      4 ..       4 ===>     101 count ( 80% of total)
      5 ..       5 ===>      66 count ( 87% of total)
      6 ..       6 ===>      83 count ( 95% of total)
      7 ..       8 ===>      26 count ( 97% of total)
      9 ..      10 ===>       4 count ( 98% of total)
     11 ..      15 ===>      19 count ( 99% of total)
     16 ..      20 ===>       1 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
benchmarks.run_pgo
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     511 count ( 87% of total)
      2 ..       2 ===>      83 count ( 90% of total)
      3 ..       3 ===>     178 count ( 97% of total)
      4 ..       4 ===>      11 count ( 98% of total)
      5 ..       5 ===>      24 count ( 99% of total)
      6 ..      10 ===>      14 count ( 99% of total)
     11 ..      15 ===>       2 count ( 99% of total)
     16 ..      20 ===>       1 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      40 ===>       0 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>    2193 count ( 88% of total)
      1 ..       1 ===>     128 count ( 93% of total)
      2 ..       2 ===>      36 count ( 95% of total)
      3 ..       3 ===>     118 count ( 99% of total)
      4 ..       4 ===>       1 count ( 99% of total)
      5 ..       5 ===>       2 count (100% of total)
      6 ..       6 ===>       0 count (100% of total)
      7 ..       8 ===>       0 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>    1654 count ( 66% of total)
      1 ..       1 ===>     206 count ( 75% of total)
      2 ..       2 ===>     259 count ( 85% of total)
      3 ..       3 ===>     127 count ( 90% of total)
      4 ..       4 ===>      46 count ( 92% of total)
      5 ..       5 ===>      30 count ( 93% of total)
      6 ..      10 ===>      99 count ( 97% of total)
     11 ..      15 ===>      17 count ( 98% of total)
     16 ..      20 ===>      21 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      40 ===>       3 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     980 count ( 39% of total)
      1 ..       1 ===>     760 count ( 69% of total)
      2 ..       2 ===>     423 count ( 86% of total)
      3 ..       3 ===>      73 count ( 89% of total)
      4 ..       4 ===>      30 count ( 90% of total)
      5 ..       5 ===>      46 count ( 92% of total)
      6 ..       6 ===>     181 count ( 99% of total)
      7 ..       8 ===>       2 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
benchmarks.run_tiered
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>     226 count ( 55% of total)
      1 ..       1 ===>     119 count ( 84% of total)
      2 ..       2 ===>      40 count ( 93% of total)
      3 ..       3 ===>      11 count ( 96% of total)
      4 ..       4 ===>       1 count ( 96% of total)
      5 ..       5 ===>       3 count ( 97% of total)
      6 ..      10 ===>       8 count ( 99% of total)
     11 ..      15 ===>       2 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      40 ===>       0 count (100% of total)
     41 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>     325 count ( 79% of total)
      1 ..       1 ===>      54 count ( 92% of total)
      2 ..       2 ===>      22 count ( 97% of total)
      3 ..       3 ===>       6 count ( 99% of total)
      4 ..       4 ===>       0 count ( 99% of total)
      5 ..       5 ===>       2 count ( 99% of total)
      6 ..       6 ===>       0 count ( 99% of total)
      7 ..       8 ===>       1 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>     226 count ( 55% of total)
      1 ..       1 ===>      23 count ( 60% of total)
      2 ..       2 ===>      36 count ( 69% of total)
      3 ..       3 ===>      23 count ( 75% of total)
      4 ..       4 ===>      36 count ( 83% of total)
      5 ..       5 ===>       3 count ( 84% of total)
      6 ..      10 ===>      49 count ( 96% of total)
     11 ..      15 ===>       3 count ( 97% of total)
     16 ..      20 ===>       6 count ( 98% of total)
     21 ..      30 ===>       2 count ( 99% of total)
     31 ..      40 ===>       1 count ( 99% of total)
     41 ..      50 ===>       1 count ( 99% of total)
     51 ..     100 ===>       1 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>     159 count ( 32% of total)
      1 ..       1 ===>      60 count ( 44% of total)
      2 ..       2 ===>     123 count ( 69% of total)
      3 ..       3 ===>      44 count ( 78% of total)
      4 ..       4 ===>      30 count ( 84% of total)
      5 ..       5 ===>      19 count ( 88% of total)
      6 ..       6 ===>      50 count ( 98% of total)
      7 ..       8 ===>       2 count ( 99% of total)
      9 ..      10 ===>       2 count ( 99% of total)
     11 ..      15 ===>       1 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
coreclr_tests
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   11097 count ( 79% of total)
      1 ..       1 ===>    1491 count ( 90% of total)
      2 ..       2 ===>     504 count ( 93% of total)
      3 ..       3 ===>     379 count ( 96% of total)
      4 ..       4 ===>     167 count ( 97% of total)
      5 ..       5 ===>      75 count ( 98% of total)
      6 ..      10 ===>     172 count ( 99% of total)
     11 ..      15 ===>      23 count ( 99% of total)
     16 ..      20 ===>      11 count ( 99% of total)
     21 ..      30 ===>       7 count ( 99% of total)
     31 ..      40 ===>       3 count ( 99% of total)
     41 ..      50 ===>       0 count ( 99% of total)
     51 ..     100 ===>       6 count ( 99% of total)
    101 ..     150 ===>       6 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   12408 count ( 89% of total)
      1 ..       1 ===>     617 count ( 93% of total)
      2 ..       2 ===>     278 count ( 95% of total)
      3 ..       3 ===>     286 count ( 97% of total)
      4 ..       4 ===>     145 count ( 98% of total)
      5 ..       5 ===>      58 count ( 98% of total)
      6 ..       6 ===>      58 count ( 99% of total)
      7 ..       8 ===>      53 count ( 99% of total)
      9 ..      10 ===>       9 count ( 99% of total)
     11 ..      15 ===>       2 count ( 99% of total)
     16 ..      20 ===>      11 count ( 99% of total)
     21 ..      30 ===>       4 count ( 99% of total)
     31 ..      50 ===>       0 count ( 99% of total)
     51 ..     100 ===>       9 count ( 99% of total)
    101 ..     200 ===>       3 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   11097 count ( 79% of total)
      1 ..       1 ===>     398 count ( 82% of total)
      2 ..       2 ===>     471 count ( 85% of total)
      3 ..       3 ===>     211 count ( 87% of total)
      4 ..       4 ===>     264 count ( 89% of total)
      5 ..       5 ===>      99 count ( 89% of total)
      6 ..      10 ===>     589 count ( 94% of total)
     11 ..      15 ===>     208 count ( 95% of total)
     16 ..      20 ===>     194 count ( 97% of total)
     21 ..      30 ===>     174 count ( 98% of total)
     31 ..      40 ===>     104 count ( 99% of total)
     41 ..      50 ===>      64 count ( 99% of total)
     51 ..     100 ===>      46 count ( 99% of total)
    101 ..     150 ===>       8 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       0 count ( 99% of total)
    301 ..     400 ===>       2 count ( 99% of total)
    401 ..     500 ===>       0 count ( 99% of total)
    501 ..     700 ===>      10 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   20756 count ( 72% of total)
      1 ..       1 ===>    2060 count ( 79% of total)
      2 ..       2 ===>     922 count ( 83% of total)
      3 ..       3 ===>     734 count ( 85% of total)
      4 ..       4 ===>     443 count ( 87% of total)
      5 ..       5 ===>     916 count ( 90% of total)
      6 ..       6 ===>     479 count ( 92% of total)
      7 ..       8 ===>    1062 count ( 95% of total)
      9 ..      10 ===>     585 count ( 97% of total)
     11 ..      15 ===>     569 count ( 99% of total)
     16 ..      20 ===>      54 count ( 99% of total)
     21 ..      30 ===>       2 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries.crossgen2
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   18475 count ( 89% of total)
      1 ..       1 ===>    1470 count ( 96% of total)
      2 ..       2 ===>     377 count ( 98% of total)
      3 ..       3 ===>     153 count ( 98% of total)
      4 ..       4 ===>     114 count ( 99% of total)
      5 ..       5 ===>      40 count ( 99% of total)
      6 ..      10 ===>      73 count ( 99% of total)
     11 ..      15 ===>      14 count ( 99% of total)
     16 ..      20 ===>       5 count ( 99% of total)
     21 ..      30 ===>       2 count ( 99% of total)
     31 ..      40 ===>       0 count ( 99% of total)
     41 ..      50 ===>       1 count ( 99% of total)
     51 ..     100 ===>       2 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   20253 count ( 97% of total)
      1 ..       1 ===>     297 count ( 99% of total)
      2 ..       2 ===>      69 count ( 99% of total)
      3 ..       3 ===>      29 count ( 99% of total)
      4 ..       4 ===>      50 count ( 99% of total)
      5 ..       5 ===>      11 count ( 99% of total)
      6 ..       6 ===>       8 count ( 99% of total)
      7 ..       8 ===>       1 count ( 99% of total)
      9 ..      10 ===>       1 count ( 99% of total)
     11 ..      15 ===>       2 count ( 99% of total)
     16 ..      20 ===>       2 count ( 99% of total)
     21 ..      30 ===>       1 count ( 99% of total)
     31 ..      50 ===>       1 count ( 99% of total)
     51 ..     100 ===>       1 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   18475 count ( 89% of total)
      1 ..       1 ===>     571 count ( 91% of total)
      2 ..       2 ===>     699 count ( 95% of total)
      3 ..       3 ===>     182 count ( 96% of total)
      4 ..       4 ===>     221 count ( 97% of total)
      5 ..       5 ===>     149 count ( 97% of total)
      6 ..      10 ===>     274 count ( 99% of total)
     11 ..      15 ===>      70 count ( 99% of total)
     16 ..      20 ===>      43 count ( 99% of total)
     21 ..      30 ===>      31 count ( 99% of total)
     31 ..      40 ===>       2 count ( 99% of total)
     41 ..      50 ===>       2 count ( 99% of total)
     51 ..     100 ===>       3 count ( 99% of total)
    101 ..     150 ===>       2 count ( 99% of total)
    151 ..     200 ===>       0 count ( 99% of total)
    201 ..     300 ===>       0 count ( 99% of total)
    301 ..     400 ===>       1 count ( 99% of total)
    401 ..     500 ===>       1 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    3581 count ( 44% of total)
      1 ..       1 ===>    1472 count ( 63% of total)
      2 ..       2 ===>    1947 count ( 87% of total)
      3 ..       3 ===>     257 count ( 91% of total)
      4 ..       4 ===>     216 count ( 93% of total)
      5 ..       5 ===>     281 count ( 97% of total)
      6 ..       6 ===>      56 count ( 98% of total)
      7 ..       8 ===>     122 count ( 99% of total)
      9 ..      10 ===>       4 count ( 99% of total)
     11 ..      15 ===>      23 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries.pmi
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   19677 count ( 76% of total)
      1 ..       1 ===>    3602 count ( 90% of total)
      2 ..       2 ===>    1090 count ( 94% of total)
      3 ..       3 ===>     450 count ( 96% of total)
      4 ..       4 ===>     259 count ( 97% of total)
      5 ..       5 ===>     168 count ( 98% of total)
      6 ..      10 ===>     297 count ( 99% of total)
     11 ..      15 ===>      54 count ( 99% of total)
     16 ..      20 ===>      26 count ( 99% of total)
     21 ..      30 ===>      28 count ( 99% of total)
     31 ..      40 ===>       2 count ( 99% of total)
     41 ..      50 ===>       2 count ( 99% of total)
     51 ..     100 ===>       1 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   24492 count ( 95% of total)
      1 ..       1 ===>     495 count ( 97% of total)
      2 ..       2 ===>     292 count ( 98% of total)
      3 ..       3 ===>      97 count ( 98% of total)
      4 ..       4 ===>      93 count ( 99% of total)
      5 ..       5 ===>      39 count ( 99% of total)
      6 ..       6 ===>      39 count ( 99% of total)
      7 ..       8 ===>      30 count ( 99% of total)
      9 ..      10 ===>      14 count ( 99% of total)
     11 ..      15 ===>      21 count ( 99% of total)
     16 ..      20 ===>      25 count ( 99% of total)
     21 ..      30 ===>      16 count ( 99% of total)
     31 ..      50 ===>       2 count ( 99% of total)
     51 ..     100 ===>       1 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   19677 count ( 76% of total)
      1 ..       1 ===>    1717 count ( 83% of total)
      2 ..       2 ===>     899 count ( 86% of total)
      3 ..       3 ===>     616 count ( 89% of total)
      4 ..       4 ===>     660 count ( 91% of total)
      5 ..       5 ===>     285 count ( 92% of total)
      6 ..      10 ===>     932 count ( 96% of total)
     11 ..      15 ===>     377 count ( 98% of total)
     16 ..      20 ===>     164 count ( 98% of total)
     21 ..      30 ===>     165 count ( 99% of total)
     31 ..      40 ===>      68 count ( 99% of total)
     41 ..      50 ===>      28 count ( 99% of total)
     51 ..     100 ===>      51 count ( 99% of total)
    101 ..     150 ===>      14 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       0 count ( 99% of total)
    301 ..     400 ===>       1 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    6218 count ( 31% of total)
      1 ..       1 ===>    5075 count ( 57% of total)
      2 ..       2 ===>    1440 count ( 65% of total)
      3 ..       3 ===>    1859 count ( 74% of total)
      4 ..       4 ===>    2682 count ( 88% of total)
      5 ..       5 ===>     974 count ( 93% of total)
      6 ..       6 ===>     624 count ( 96% of total)
      7 ..       8 ===>     533 count ( 99% of total)
      9 ..      10 ===>      37 count ( 99% of total)
     11 ..      15 ===>      65 count ( 99% of total)
     16 ..      20 ===>       2 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries_tests
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   22638 count ( 80% of total)
      1 ..       1 ===>    3074 count ( 91% of total)
      2 ..       2 ===>    1113 count ( 94% of total)
      3 ..       3 ===>     390 count ( 96% of total)
      4 ..       4 ===>     305 count ( 97% of total)
      5 ..       5 ===>     294 count ( 98% of total)
      6 ..      10 ===>     305 count ( 99% of total)
     11 ..      15 ===>      75 count ( 99% of total)
     16 ..      20 ===>       9 count ( 99% of total)
     21 ..      30 ===>      13 count ( 99% of total)
     31 ..      40 ===>       9 count ( 99% of total)
     41 ..      50 ===>       3 count ( 99% of total)
     51 ..     100 ===>       9 count ( 99% of total)
    101 ..     150 ===>       5 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   26908 count ( 95% of total)
      1 ..       1 ===>     708 count ( 97% of total)
      2 ..       2 ===>     299 count ( 98% of total)
      3 ..       3 ===>     120 count ( 99% of total)
      4 ..       4 ===>     100 count ( 99% of total)
      5 ..       5 ===>      28 count ( 99% of total)
      6 ..       6 ===>      24 count ( 99% of total)
      7 ..       8 ===>      22 count ( 99% of total)
      9 ..      10 ===>       5 count ( 99% of total)
     11 ..      15 ===>      14 count ( 99% of total)
     16 ..      20 ===>       3 count ( 99% of total)
     21 ..      30 ===>       4 count ( 99% of total)
     31 ..      50 ===>       4 count ( 99% of total)
     51 ..     100 ===>       3 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   22638 count ( 80% of total)
      1 ..       1 ===>    1503 count ( 85% of total)
      2 ..       2 ===>     644 count ( 87% of total)
      3 ..       3 ===>     460 count ( 89% of total)
      4 ..       4 ===>     735 count ( 91% of total)
      5 ..       5 ===>     402 count ( 93% of total)
      6 ..      10 ===>     986 count ( 96% of total)
     11 ..      15 ===>     416 count ( 98% of total)
     16 ..      20 ===>     159 count ( 98% of total)
     21 ..      30 ===>     141 count ( 99% of total)
     31 ..      40 ===>      79 count ( 99% of total)
     41 ..      50 ===>      26 count ( 99% of total)
     51 ..     100 ===>      38 count ( 99% of total)
    101 ..     150 ===>      11 count ( 99% of total)
    151 ..     200 ===>       1 count ( 99% of total)
    201 ..     300 ===>       1 count ( 99% of total)
    301 ..     400 ===>       1 count ( 99% of total)
    401 ..     500 ===>       1 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   10147 count ( 41% of total)
      1 ..       1 ===>    6173 count ( 66% of total)
      2 ..       2 ===>    1611 count ( 73% of total)
      3 ..       3 ===>    2728 count ( 84% of total)
      4 ..       4 ===>    2149 count ( 92% of total)
      5 ..       5 ===>     736 count ( 95% of total)
      6 ..       6 ===>     585 count ( 98% of total)
      7 ..       8 ===>     248 count ( 99% of total)
      9 ..      10 ===>      16 count ( 99% of total)
     11 ..      15 ===>     107 count ( 99% of total)
     16 ..      20 ===>      13 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>      10 count ( 99% of total)
     51 ..     100 ===>       4 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
realworld
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>    1807 count ( 54% of total)
      1 ..       1 ===>     786 count ( 77% of total)
      2 ..       2 ===>     324 count ( 87% of total)
      3 ..       3 ===>     126 count ( 90% of total)
      4 ..       4 ===>      90 count ( 93% of total)
      5 ..       5 ===>      66 count ( 95% of total)
      6 ..      10 ===>     107 count ( 98% of total)
     11 ..      15 ===>      18 count ( 99% of total)
     16 ..      20 ===>       3 count ( 99% of total)
     21 ..      30 ===>       9 count ( 99% of total)
     31 ..      40 ===>       3 count ( 99% of total)
     41 ..      50 ===>       3 count ( 99% of total)
     51 ..     100 ===>       2 count (100% of total)
    101 ..     150 ===>       0 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>    3005 count ( 89% of total)
      1 ..       1 ===>     150 count ( 94% of total)
      2 ..       2 ===>      80 count ( 96% of total)
      3 ..       3 ===>      43 count ( 98% of total)
      4 ..       4 ===>      29 count ( 98% of total)
      5 ..       5 ===>       4 count ( 99% of total)
      6 ..       6 ===>       6 count ( 99% of total)
      7 ..       8 ===>      10 count ( 99% of total)
      9 ..      10 ===>       3 count ( 99% of total)
     11 ..      15 ===>       4 count ( 99% of total)
     16 ..      20 ===>       0 count ( 99% of total)
     21 ..      30 ===>       5 count ( 99% of total)
     31 ..      50 ===>       3 count ( 99% of total)
     51 ..     100 ===>       2 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>    1807 count ( 54% of total)
      1 ..       1 ===>     407 count ( 66% of total)
      2 ..       2 ===>     230 count ( 73% of total)
      3 ..       3 ===>     146 count ( 77% of total)
      4 ..       4 ===>     122 count ( 81% of total)
      5 ..       5 ===>      86 count ( 83% of total)
      6 ..      10 ===>     218 count ( 90% of total)
     11 ..      15 ===>     147 count ( 94% of total)
     16 ..      20 ===>      59 count ( 96% of total)
     21 ..      30 ===>      66 count ( 98% of total)
     31 ..      40 ===>      19 count ( 98% of total)
     41 ..      50 ===>      12 count ( 99% of total)
     51 ..     100 ===>      14 count ( 99% of total)
    101 ..     150 ===>       3 count ( 99% of total)
    151 ..     200 ===>       2 count ( 99% of total)
    201 ..     300 ===>       4 count ( 99% of total)
    301 ..     400 ===>       0 count ( 99% of total)
    401 ..     500 ===>       0 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    2012 count ( 32% of total)
      1 ..       1 ===>    1421 count ( 55% of total)
      2 ..       2 ===>     499 count ( 63% of total)
      3 ..       3 ===>     521 count ( 71% of total)
      4 ..       4 ===>     565 count ( 80% of total)
      5 ..       5 ===>     446 count ( 87% of total)
      6 ..       6 ===>     503 count ( 96% of total)
      7 ..       8 ===>     139 count ( 98% of total)
      9 ..      10 ===>      71 count ( 99% of total)
     11 ..      15 ===>      34 count ( 99% of total)
     16 ..      20 ===>       3 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

JitEnablePhysicalPromotion=1;JitStressModeNames=STRESS_NO_OLD_PROMOTION

benchmarks.run
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>    1787 count ( 23% of total)
      1 ..       1 ===>    1162 count ( 39% of total)
      2 ..       2 ===>     630 count ( 47% of total)
      3 ..       3 ===>     413 count ( 53% of total)
      4 ..       4 ===>     482 count ( 59% of total)
      5 ..       5 ===>     463 count ( 65% of total)
      6 ..      10 ===>    2034 count ( 93% of total)
     11 ..      15 ===>     206 count ( 95% of total)
     16 ..      20 ===>     125 count ( 97% of total)
     21 ..      30 ===>     105 count ( 98% of total)
     31 ..      40 ===>      31 count ( 99% of total)
     41 ..      50 ===>      25 count ( 99% of total)
     51 ..     100 ===>      21 count ( 99% of total)
    101 ..     150 ===>       5 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>    2141 count ( 28% of total)
      1 ..       1 ===>    1042 count ( 42% of total)
      2 ..       2 ===>     551 count ( 49% of total)
      3 ..       3 ===>     398 count ( 55% of total)
      4 ..       4 ===>     453 count ( 61% of total)
      5 ..       5 ===>     445 count ( 67% of total)
      6 ..       6 ===>    1466 count ( 86% of total)
      7 ..       8 ===>     376 count ( 91% of total)
      9 ..      10 ===>     157 count ( 93% of total)
     11 ..      15 ===>     193 count ( 96% of total)
     16 ..      20 ===>     110 count ( 97% of total)
     21 ..      30 ===>      88 count ( 99% of total)
     31 ..      50 ===>      46 count ( 99% of total)
     51 ..     100 ===>      20 count ( 99% of total)
    101 ..     200 ===>       3 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>    1787 count ( 23% of total)
      1 ..       1 ===>     400 count ( 29% of total)
      2 ..       2 ===>     639 count ( 37% of total)
      3 ..       3 ===>     234 count ( 40% of total)
      4 ..       4 ===>     431 count ( 46% of total)
      5 ..       5 ===>      90 count ( 47% of total)
      6 ..      10 ===>    1321 count ( 65% of total)
     11 ..      15 ===>    1725 count ( 88% of total)
     16 ..      20 ===>     331 count ( 92% of total)
     21 ..      30 ===>     217 count ( 95% of total)
     31 ..      40 ===>     122 count ( 97% of total)
     41 ..      50 ===>      71 count ( 98% of total)
     51 ..     100 ===>      88 count ( 99% of total)
    101 ..     150 ===>      24 count ( 99% of total)
    151 ..     200 ===>       4 count ( 99% of total)
    201 ..     300 ===>       4 count ( 99% of total)
    301 ..     400 ===>       0 count ( 99% of total)
    401 ..     500 ===>       1 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   15062 count ( 31% of total)
      1 ..       1 ===>    3666 count ( 39% of total)
      2 ..       2 ===>   26858 count ( 95% of total)
      3 ..       3 ===>    1541 count ( 98% of total)
      4 ..       4 ===>     640 count ( 99% of total)
      5 ..       5 ===>      58 count ( 99% of total)
      6 ..       6 ===>      63 count ( 99% of total)
      7 ..       8 ===>      47 count ( 99% of total)
      9 ..      10 ===>      13 count ( 99% of total)
     11 ..      15 ===>      22 count ( 99% of total)
     16 ..      20 ===>       1 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
benchmarks.run_pgo
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>    2151 count ( 18% of total)
      1 ..       1 ===>    2050 count ( 35% of total)
      2 ..       2 ===>    1773 count ( 50% of total)
      3 ..       3 ===>     682 count ( 56% of total)
      4 ..       4 ===>     594 count ( 61% of total)
      5 ..       5 ===>     459 count ( 65% of total)
      6 ..      10 ===>    2771 count ( 89% of total)
     11 ..      15 ===>     798 count ( 95% of total)
     16 ..      20 ===>     293 count ( 98% of total)
     21 ..      30 ===>     117 count ( 99% of total)
     31 ..      40 ===>      51 count ( 99% of total)
     41 ..      50 ===>       9 count ( 99% of total)
     51 ..     100 ===>       6 count ( 99% of total)
    101 ..     150 ===>       0 count ( 99% of total)
    151 ..     200 ===>      11 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>    2650 count ( 22% of total)
      1 ..       1 ===>    1910 count ( 38% of total)
      2 ..       2 ===>    1598 count ( 52% of total)
      3 ..       3 ===>     643 count ( 57% of total)
      4 ..       4 ===>     557 count ( 62% of total)
      5 ..       5 ===>     471 count ( 66% of total)
      6 ..       6 ===>    1677 count ( 80% of total)
      7 ..       8 ===>     847 count ( 87% of total)
      9 ..      10 ===>     241 count ( 90% of total)
     11 ..      15 ===>     753 count ( 96% of total)
     16 ..      20 ===>     241 count ( 98% of total)
     21 ..      30 ===>     103 count ( 99% of total)
     31 ..      50 ===>      59 count ( 99% of total)
     51 ..     100 ===>       4 count ( 99% of total)
    101 ..     200 ===>      11 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>    2151 count ( 18% of total)
      1 ..       1 ===>     565 count ( 23% of total)
      2 ..       2 ===>    1947 count ( 39% of total)
      3 ..       3 ===>     716 count ( 45% of total)
      4 ..       4 ===>     954 count ( 53% of total)
      5 ..       5 ===>     191 count ( 55% of total)
      6 ..      10 ===>    1783 count ( 70% of total)
     11 ..      15 ===>    1862 count ( 86% of total)
     16 ..      20 ===>     502 count ( 90% of total)
     21 ..      30 ===>     777 count ( 97% of total)
     31 ..      40 ===>     169 count ( 98% of total)
     41 ..      50 ===>      72 count ( 99% of total)
     51 ..     100 ===>      60 count ( 99% of total)
    101 ..     150 ===>       5 count ( 99% of total)
    151 ..     200 ===>       0 count ( 99% of total)
    201 ..     300 ===>       0 count ( 99% of total)
    301 ..     400 ===>      11 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   29783 count ( 35% of total)
      1 ..       1 ===>   16635 count ( 55% of total)
      2 ..       2 ===>   36734 count ( 98% of total)
      3 ..       3 ===>     484 count ( 99% of total)
      4 ..       4 ===>     426 count ( 99% of total)
      5 ..       5 ===>      48 count ( 99% of total)
      6 ..       6 ===>     134 count ( 99% of total)
      7 ..       8 ===>      52 count (100% of total)
      9 ..      10 ===>       0 count (100% of total)
     11 ..      15 ===>       0 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
benchmarks.run_tiered
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>     701 count ( 17% of total)
      1 ..       1 ===>     446 count ( 28% of total)
      2 ..       2 ===>     237 count ( 33% of total)
      3 ..       3 ===>     197 count ( 38% of total)
      4 ..       4 ===>     310 count ( 46% of total)
      5 ..       5 ===>     304 count ( 53% of total)
      6 ..      10 ===>    1688 count ( 94% of total)
     11 ..      15 ===>      81 count ( 96% of total)
     16 ..      20 ===>      51 count ( 98% of total)
     21 ..      30 ===>      46 count ( 99% of total)
     31 ..      40 ===>      12 count ( 99% of total)
     41 ..      50 ===>       3 count ( 99% of total)
     51 ..     100 ===>      11 count ( 99% of total)
    101 ..     150 ===>       1 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>     809 count ( 19% of total)
      1 ..       1 ===>     424 count ( 30% of total)
      2 ..       2 ===>     210 count ( 35% of total)
      3 ..       3 ===>     190 count ( 39% of total)
      4 ..       4 ===>     290 count ( 47% of total)
      5 ..       5 ===>     295 count ( 54% of total)
      6 ..       6 ===>    1348 count ( 87% of total)
      7 ..       8 ===>     258 count ( 93% of total)
      9 ..      10 ===>      79 count ( 95% of total)
     11 ..      15 ===>      72 count ( 97% of total)
     16 ..      20 ===>      51 count ( 98% of total)
     21 ..      30 ===>      39 count ( 99% of total)
     31 ..      50 ===>      12 count ( 99% of total)
     51 ..     100 ===>      10 count ( 99% of total)
    101 ..     200 ===>       1 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>     701 count ( 17% of total)
      1 ..       1 ===>     146 count ( 20% of total)
      2 ..       2 ===>     286 count ( 27% of total)
      3 ..       3 ===>      82 count ( 29% of total)
      4 ..       4 ===>     162 count ( 33% of total)
      5 ..       5 ===>      25 count ( 34% of total)
      6 ..      10 ===>     782 count ( 53% of total)
     11 ..      15 ===>    1521 count ( 90% of total)
     16 ..      20 ===>     179 count ( 95% of total)
     21 ..      30 ===>      83 count ( 97% of total)
     31 ..      40 ===>      51 count ( 98% of total)
     41 ..      50 ===>      29 count ( 98% of total)
     51 ..     100 ===>      28 count ( 99% of total)
    101 ..     150 ===>       9 count ( 99% of total)
    151 ..     200 ===>       3 count ( 99% of total)
    201 ..     300 ===>       1 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>    8031 count ( 29% of total)
      1 ..       1 ===>    1406 count ( 34% of total)
      2 ..       2 ===>   17674 count ( 98% of total)
      3 ..       3 ===>     288 count ( 99% of total)
      4 ..       4 ===>     159 count ( 99% of total)
      5 ..       5 ===>      20 count ( 99% of total)
      6 ..       6 ===>      22 count ( 99% of total)
      7 ..       8 ===>      33 count ( 99% of total)
      9 ..      10 ===>       2 count ( 99% of total)
     11 ..      15 ===>       1 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
coreclr_tests
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   19748 count ( 29% of total)
      1 ..       1 ===>    6804 count ( 40% of total)
      2 ..       2 ===>    7166 count ( 50% of total)
      3 ..       3 ===>    3133 count ( 55% of total)
      4 ..       4 ===>   18876 count ( 84% of total)
      5 ..       5 ===>    2488 count ( 87% of total)
      6 ..      10 ===>    2919 count ( 92% of total)
     11 ..      15 ===>    3354 count ( 97% of total)
     16 ..      20 ===>     961 count ( 98% of total)
     21 ..      30 ===>     512 count ( 99% of total)
     31 ..      40 ===>     110 count ( 99% of total)
     41 ..      50 ===>      61 count ( 99% of total)
     51 ..     100 ===>     105 count ( 99% of total)
    101 ..     150 ===>      32 count ( 99% of total)
    151 ..     200 ===>       6 count ( 99% of total)
    201 ..     300 ===>       6 count ( 99% of total)
    301 ..     400 ===>       6 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   21172 count ( 31% of total)
      1 ..       1 ===>    6167 count ( 41% of total)
      2 ..       2 ===>    7013 count ( 51% of total)
      3 ..       3 ===>    3003 count ( 56% of total)
      4 ..       4 ===>   18778 count ( 84% of total)
      5 ..       5 ===>    2389 count ( 88% of total)
      6 ..       6 ===>     814 count ( 89% of total)
      7 ..       8 ===>    1314 count ( 91% of total)
      9 ..      10 ===>     657 count ( 92% of total)
     11 ..      15 ===>    3249 count ( 97% of total)
     16 ..      20 ===>     935 count ( 98% of total)
     21 ..      30 ===>     488 count ( 99% of total)
     31 ..      50 ===>     161 count ( 99% of total)
     51 ..     100 ===>     100 count ( 99% of total)
    101 ..     200 ===>      35 count ( 99% of total)
    201 ..     400 ===>      12 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   19748 count ( 29% of total)
      1 ..       1 ===>    2545 count ( 33% of total)
      2 ..       2 ===>    6559 count ( 43% of total)
      3 ..       3 ===>    2509 count ( 47% of total)
      4 ..       4 ===>   21104 count ( 79% of total)
      5 ..       5 ===>     601 count ( 80% of total)
      6 ..      10 ===>    4965 count ( 87% of total)
     11 ..      15 ===>    1829 count ( 90% of total)
     16 ..      20 ===>     917 count ( 91% of total)
     21 ..      30 ===>    3454 count ( 96% of total)
     31 ..      40 ===>    1020 count ( 98% of total)
     41 ..      50 ===>     469 count ( 99% of total)
     51 ..     100 ===>     427 count ( 99% of total)
    101 ..     150 ===>      56 count ( 99% of total)
    151 ..     200 ===>      32 count ( 99% of total)
    201 ..     300 ===>      23 count ( 99% of total)
    301 ..     400 ===>       9 count ( 99% of total)
    401 ..     500 ===>       4 count ( 99% of total)
    501 ..     700 ===>       5 count ( 99% of total)
    701 ..    1000 ===>      11 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>  254914 count ( 52% of total)
      1 ..       1 ===>  109588 count ( 74% of total)
      2 ..       2 ===>  106742 count ( 96% of total)
      3 ..       3 ===>   10732 count ( 98% of total)
      4 ..       4 ===>    2770 count ( 99% of total)
      5 ..       5 ===>    1287 count ( 99% of total)
      6 ..       6 ===>     676 count ( 99% of total)
      7 ..       8 ===>    1347 count ( 99% of total)
      9 ..      10 ===>     593 count ( 99% of total)
     11 ..      15 ===>     663 count ( 99% of total)
     16 ..      20 ===>      59 count ( 99% of total)
     21 ..      30 ===>       2 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries.crossgen2
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   31487 count ( 74% of total)
      1 ..       1 ===>    6553 count ( 89% of total)
      2 ..       2 ===>    1880 count ( 93% of total)
      3 ..       3 ===>     805 count ( 95% of total)
      4 ..       4 ===>     524 count ( 97% of total)
      5 ..       5 ===>     253 count ( 97% of total)
      6 ..      10 ===>     708 count ( 99% of total)
     11 ..      15 ===>     170 count ( 99% of total)
     16 ..      20 ===>      68 count ( 99% of total)
     21 ..      30 ===>      39 count ( 99% of total)
     31 ..      40 ===>      10 count ( 99% of total)
     41 ..      50 ===>       7 count ( 99% of total)
     51 ..     100 ===>      15 count ( 99% of total)
    101 ..     150 ===>       1 count ( 99% of total)
    151 ..     200 ===>       0 count ( 99% of total)
    201 ..     300 ===>       1 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   34232 count ( 80% of total)
      1 ..       1 ===>    4993 count ( 92% of total)
      2 ..       2 ===>    1343 count ( 95% of total)
      3 ..       3 ===>     546 count ( 96% of total)
      4 ..       4 ===>     360 count ( 97% of total)
      5 ..       5 ===>     211 count ( 98% of total)
      6 ..       6 ===>     223 count ( 98% of total)
      7 ..       8 ===>     266 count ( 99% of total)
      9 ..      10 ===>      98 count ( 99% of total)
     11 ..      15 ===>     133 count ( 99% of total)
     16 ..      20 ===>      55 count ( 99% of total)
     21 ..      30 ===>      31 count ( 99% of total)
     31 ..      50 ===>      14 count ( 99% of total)
     51 ..     100 ===>      14 count ( 99% of total)
    101 ..     200 ===>       1 count ( 99% of total)
    201 ..     400 ===>       1 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   31487 count ( 74% of total)
      1 ..       1 ===>    3548 count ( 82% of total)
      2 ..       2 ===>    2750 count ( 88% of total)
      3 ..       3 ===>    1036 count ( 91% of total)
      4 ..       4 ===>    1078 count ( 93% of total)
      5 ..       5 ===>     300 count ( 94% of total)
      6 ..      10 ===>    1272 count ( 97% of total)
     11 ..      15 ===>     414 count ( 98% of total)
     16 ..      20 ===>     317 count ( 99% of total)
     21 ..      30 ===>     175 count ( 99% of total)
     31 ..      40 ===>      66 count ( 99% of total)
     41 ..      50 ===>      31 count ( 99% of total)
     51 ..     100 ===>      29 count ( 99% of total)
    101 ..     150 ===>      10 count ( 99% of total)
    151 ..     200 ===>       1 count ( 99% of total)
    201 ..     300 ===>       2 count ( 99% of total)
    301 ..     400 ===>       3 count ( 99% of total)
    401 ..     500 ===>       2 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   22503 count ( 44% of total)
      1 ..       1 ===>    9162 count ( 63% of total)
      2 ..       2 ===>   15014 count ( 93% of total)
      3 ..       3 ===>    1808 count ( 96% of total)
      4 ..       4 ===>    1092 count ( 99% of total)
      5 ..       5 ===>     271 count ( 99% of total)
      6 ..       6 ===>      60 count ( 99% of total)
      7 ..       8 ===>     135 count ( 99% of total)
      9 ..      10 ===>       8 count ( 99% of total)
     11 ..      15 ===>      25 count (100% of total)
     16 ..      20 ===>       0 count (100% of total)
     21 ..      30 ===>       0 count (100% of total)
     31 ..      50 ===>       0 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries.pmi
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   37477 count ( 48% of total)
      1 ..       1 ===>   15707 count ( 68% of total)
      2 ..       2 ===>    7547 count ( 78% of total)
      3 ..       3 ===>    4355 count ( 84% of total)
      4 ..       4 ===>    2671 count ( 87% of total)
      5 ..       5 ===>    1827 count ( 90% of total)
      6 ..      10 ===>    4599 count ( 96% of total)
     11 ..      15 ===>    1347 count ( 97% of total)
     16 ..      20 ===>     694 count ( 98% of total)
     21 ..      30 ===>     531 count ( 99% of total)
     31 ..      40 ===>     192 count ( 99% of total)
     41 ..      50 ===>      81 count ( 99% of total)
     51 ..     100 ===>      81 count ( 99% of total)
    101 ..     150 ===>      10 count ( 99% of total)
    151 ..     200 ===>       0 count ( 99% of total)
    201 ..     300 ===>       1 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   42891 count ( 55% of total)
      1 ..       1 ===>   13592 count ( 73% of total)
      2 ..       2 ===>    6574 count ( 81% of total)
      3 ..       3 ===>    3868 count ( 86% of total)
      4 ..       4 ===>    2420 count ( 89% of total)
      5 ..       5 ===>    1480 count ( 91% of total)
      6 ..       6 ===>    1304 count ( 93% of total)
      7 ..       8 ===>    1531 count ( 95% of total)
      9 ..      10 ===>    1023 count ( 96% of total)
     11 ..      15 ===>    1122 count ( 98% of total)
     16 ..      20 ===>     611 count ( 99% of total)
     21 ..      30 ===>     389 count ( 99% of total)
     31 ..      50 ===>     237 count ( 99% of total)
     51 ..     100 ===>      70 count ( 99% of total)
    101 ..     200 ===>       7 count ( 99% of total)
    201 ..     400 ===>       1 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   37477 count ( 48% of total)
      1 ..       1 ===>    7987 count ( 58% of total)
      2 ..       2 ===>    7292 count ( 68% of total)
      3 ..       3 ===>    2988 count ( 72% of total)
      4 ..       4 ===>    4927 count ( 78% of total)
      5 ..       5 ===>    1835 count ( 81% of total)
      6 ..      10 ===>    7147 count ( 90% of total)
     11 ..      15 ===>    2694 count ( 93% of total)
     16 ..      20 ===>    1667 count ( 95% of total)
     21 ..      30 ===>    1346 count ( 97% of total)
     31 ..      40 ===>     758 count ( 98% of total)
     41 ..      50 ===>     335 count ( 99% of total)
     51 ..     100 ===>     510 count ( 99% of total)
    101 ..     150 ===>     107 count ( 99% of total)
    151 ..     200 ===>      34 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       2 count ( 99% of total)
    401 ..     500 ===>       2 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>  102669 count ( 39% of total)
      1 ..       1 ===>   57467 count ( 61% of total)
      2 ..       2 ===>   69010 count ( 88% of total)
      3 ..       3 ===>   11494 count ( 92% of total)
      4 ..       4 ===>   16887 count ( 99% of total)
      5 ..       5 ===>    1043 count ( 99% of total)
      6 ..       6 ===>     618 count ( 99% of total)
      7 ..       8 ===>     579 count ( 99% of total)
      9 ..      10 ===>      57 count ( 99% of total)
     11 ..      15 ===>      71 count ( 99% of total)
     16 ..      20 ===>       5 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>       1 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
libraries_tests
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>   55325 count ( 51% of total)
      1 ..       1 ===>   18489 count ( 68% of total)
      2 ..       2 ===>    9541 count ( 77% of total)
      3 ..       3 ===>    5147 count ( 82% of total)
      4 ..       4 ===>    3496 count ( 85% of total)
      5 ..       5 ===>    3269 count ( 88% of total)
      6 ..      10 ===>    6979 count ( 94% of total)
     11 ..      15 ===>    2234 count ( 96% of total)
     16 ..      20 ===>    1254 count ( 98% of total)
     21 ..      30 ===>     969 count ( 99% of total)
     31 ..      40 ===>     375 count ( 99% of total)
     41 ..      50 ===>     215 count ( 99% of total)
     51 ..     100 ===>     323 count ( 99% of total)
    101 ..     150 ===>      72 count ( 99% of total)
    151 ..     200 ===>      22 count ( 99% of total)
    201 ..     300 ===>       5 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>   59173 count ( 54% of total)
      1 ..       1 ===>   17078 count ( 70% of total)
      2 ..       2 ===>    9143 count ( 79% of total)
      3 ..       3 ===>    4738 count ( 83% of total)
      4 ..       4 ===>    3500 count ( 86% of total)
      5 ..       5 ===>    3147 count ( 89% of total)
      6 ..       6 ===>    1827 count ( 91% of total)
      7 ..       8 ===>    2684 count ( 94% of total)
      9 ..      10 ===>    1718 count ( 95% of total)
     11 ..      15 ===>    2004 count ( 97% of total)
     16 ..      20 ===>    1007 count ( 98% of total)
     21 ..      30 ===>     859 count ( 99% of total)
     31 ..      50 ===>     496 count ( 99% of total)
     51 ..     100 ===>     263 count ( 99% of total)
    101 ..     200 ===>      73 count ( 99% of total)
    201 ..     400 ===>       5 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>   55325 count ( 51% of total)
      1 ..       1 ===>   10030 count ( 60% of total)
      2 ..       2 ===>   10011 count ( 69% of total)
      3 ..       3 ===>    2995 count ( 72% of total)
      4 ..       4 ===>    5955 count ( 78% of total)
      5 ..       5 ===>    1599 count ( 79% of total)
      6 ..      10 ===>    9798 count ( 88% of total)
     11 ..      15 ===>    3839 count ( 92% of total)
     16 ..      20 ===>    2998 count ( 95% of total)
     21 ..      30 ===>    2126 count ( 97% of total)
     31 ..      40 ===>    1107 count ( 98% of total)
     41 ..      50 ===>     580 count ( 98% of total)
     51 ..     100 ===>     999 count ( 99% of total)
    101 ..     150 ===>     195 count ( 99% of total)
    151 ..     200 ===>      68 count ( 99% of total)
    201 ..     300 ===>      73 count ( 99% of total)
    301 ..     400 ===>      14 count ( 99% of total)
    401 ..     500 ===>       1 count ( 99% of total)
    501 ..     700 ===>       1 count ( 99% of total)
    701 ..    1000 ===>       1 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>  222598 count ( 45% of total)
      1 ..       1 ===>   83584 count ( 62% of total)
      2 ..       2 ===>  159574 count ( 94% of total)
      3 ..       3 ===>   16043 count ( 98% of total)
      4 ..       4 ===>    7572 count ( 99% of total)
      5 ..       5 ===>     886 count ( 99% of total)
      6 ..       6 ===>     768 count ( 99% of total)
      7 ..       8 ===>     235 count ( 99% of total)
      9 ..      10 ===>      94 count ( 99% of total)
     11 ..      15 ===>     113 count ( 99% of total)
     16 ..      20 ===>      13 count ( 99% of total)
     21 ..      30 ===>       0 count ( 99% of total)
     31 ..      50 ===>      10 count ( 99% of total)
     51 ..     100 ===>       4 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)
realworld
(Per context) How many structs are physically promoted with at least one replacement:
     <=          0 ===>    5617 count ( 41% of total)
      1 ..       1 ===>    2707 count ( 61% of total)
      2 ..       2 ===>    1402 count ( 71% of total)
      3 ..       3 ===>     912 count ( 78% of total)
      4 ..       4 ===>     625 count ( 83% of total)
      5 ..       5 ===>     413 count ( 86% of total)
      6 ..      10 ===>    1016 count ( 93% of total)
     11 ..      15 ===>     355 count ( 96% of total)
     16 ..      20 ===>     201 count ( 97% of total)
     21 ..      30 ===>     141 count ( 99% of total)
     31 ..      40 ===>      53 count ( 99% of total)
     41 ..      50 ===>      33 count ( 99% of total)
     51 ..     100 ===>      43 count ( 99% of total)
    101 ..     150 ===>       5 count (100% of total)
    151 ..     200 ===>       0 count (100% of total)
    201 ..     300 ===>       0 count (100% of total)
    301 ..     400 ===>       0 count (100% of total)
    401 ..     500 ===>       0 count (100% of total)
    501 ..     700 ===>       0 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per context) How many structs are fully physically promoted:
     <=          0 ===>    6816 count ( 50% of total)
      1 ..       1 ===>    2296 count ( 67% of total)
      2 ..       2 ===>    1202 count ( 76% of total)
      3 ..       3 ===>     834 count ( 82% of total)
      4 ..       4 ===>     505 count ( 86% of total)
      5 ..       5 ===>     333 count ( 88% of total)
      6 ..       6 ===>     319 count ( 90% of total)
      7 ..       8 ===>     339 count ( 93% of total)
      9 ..      10 ===>     203 count ( 95% of total)
     11 ..      15 ===>     297 count ( 97% of total)
     16 ..      20 ===>     158 count ( 98% of total)
     21 ..      30 ===>     113 count ( 99% of total)
     31 ..      50 ===>      70 count ( 99% of total)
     51 ..     100 ===>      35 count ( 99% of total)
    101 ..     200 ===>       3 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

(Per context) How many fields are promoted:
     <=          0 ===>    5617 count ( 41% of total)
      1 ..       1 ===>    1657 count ( 53% of total)
      2 ..       2 ===>    1164 count ( 62% of total)
      3 ..       3 ===>     522 count ( 66% of total)
      4 ..       4 ===>     878 count ( 72% of total)
      5 ..       5 ===>     472 count ( 76% of total)
      6 ..      10 ===>    1383 count ( 86% of total)
     11 ..      15 ===>     619 count ( 91% of total)
     16 ..      20 ===>     335 count ( 93% of total)
     21 ..      30 ===>     361 count ( 96% of total)
     31 ..      40 ===>     165 count ( 97% of total)
     41 ..      50 ===>     101 count ( 98% of total)
     51 ..     100 ===>     177 count ( 99% of total)
    101 ..     150 ===>      38 count ( 99% of total)
    151 ..     200 ===>      18 count ( 99% of total)
    201 ..     300 ===>      12 count ( 99% of total)
    301 ..     400 ===>       1 count ( 99% of total)
    401 ..     500 ===>       1 count ( 99% of total)
    501 ..     700 ===>       2 count (100% of total)
    701 ..    1000 ===>       0 count (100% of total)
   1001 ..    2000 ===>       0 count (100% of total)
   2001 ..    3000 ===>       0 count (100% of total)
   3001 ..    4000 ===>       0 count (100% of total)
   4001 ..    5000 ===>       0 count (100% of total)

(Per struct) How many fields are promoted:
     <=          0 ===>   23630 count ( 37% of total)
      1 ..       1 ===>   13267 count ( 59% of total)
      2 ..       2 ===>   16731 count ( 86% of total)
      3 ..       3 ===>    4677 count ( 93% of total)
      4 ..       4 ===>    2727 count ( 97% of total)
      5 ..       5 ===>     492 count ( 98% of total)
      6 ..       6 ===>     496 count ( 99% of total)
      7 ..       8 ===>     150 count ( 99% of total)
      9 ..      10 ===>      92 count ( 99% of total)
     11 ..      15 ===>      41 count ( 99% of total)
     16 ..      20 ===>       3 count ( 99% of total)
     21 ..      30 ===>       3 count ( 99% of total)
     31 ..      50 ===>       3 count (100% of total)
     51 ..     100 ===>       0 count (100% of total)
    101 ..     200 ===>       0 count (100% of total)
    201 ..     400 ===>       0 count (100% of total)

@jakobbotsch
Copy link
Member Author

cc @dotnet/jit-contrib PTAL @AndyAyersMS

@jakobbotsch jakobbotsch requested a review from AndyAyersMS June 19, 2023 15:54
@jakobbotsch jakobbotsch merged commit feff67d into dotnet:main Jun 19, 2023
@jakobbotsch jakobbotsch deleted the physical-promotion-limits branch June 19, 2023 16:21
@ghost ghost locked as resolved and limited conversation to collaborators Jul 20, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants