JIT: don't set edge weights to zero for inconsistent profiles (#87947)
authorAndy Ayers <andya@microsoft.com>
Sat, 24 Jun 2023 02:14:11 +0000 (19:14 -0700)
committerGitHub <noreply@github.com>
Sat, 24 Jun 2023 02:14:11 +0000 (19:14 -0700)
commit5180e8a3e6233f9d9daee759fe3ff3d640bd3756
treeaf3063a62741a8c8f4f338c3bc096af1a545e37c
parentfeb1fe25d5dd92546fd639c9aabff3517916ee81
JIT: don't set edge weights to zero for inconsistent profiles (#87947)

With the advent of scalable profile counters (or even with the old racing
counters) counts might be approximate or inconsistent. When we run across a
negative count during reconstruction, set the afflicted count to a small
positive value instead of to zero, since zero has special meaning to the JIT.

The aim is to reduce some of the benchmark instability we are seeing in #87324.
Depending on exact counter values, we can see different sets of edge weights
(and hence block weights) from run to run.
src/coreclr/jit/fgprofile.cpp
src/coreclr/jit/fgprofilesynthesis.h