Segregate merged returns by constant value (#13792)
authorJoseph Tremoulet <JCTremoulet@gmail.com>
Thu, 7 Sep 2017 01:14:19 +0000 (21:14 -0400)
committerGitHub <noreply@github.com>
Thu, 7 Sep 2017 01:14:19 +0000 (21:14 -0400)
commitbb449c7489a7fb466dda7c7b6bce5122ded913ea
tree47a09b8a825bfd658217e8fac59e6237a7d25bcf
parent9f38303221294f45740feefc1b6ddf72347ff882
Segregate merged returns by constant value (#13792)

The JIT enforces a limit on the number of epilogs emitted in any given
method.  Change the logic so that when this merging kicks in, returns of
constant values are given merged return blocks distinct from each other
and from the general return block, as long as we can do so without going
over the limit.  This particularly helps avoid redundancy (while still
keeping method size down) in methods with a large number of constant
returns but only a few distinct constants, which is true of many
predicate methods with bool return type.

This is the compiler portion of #13466 and dotnet/corefx#23395.
src/jit/flowgraph.cpp
src/jit/gentree.h
src/jit/morph.cpp
tests/src/JIT/opt/Loops/SearchLoopTail.cs [new file with mode: 0644]
tests/src/JIT/opt/Loops/SearchLoopTail.csproj [new file with mode: 0644]