JIT: cleanup redundant exact type tests (dotnet/coreclr#27397)
authorAndy Ayers <andya@microsoft.com>
Tue, 5 Nov 2019 16:02:52 +0000 (08:02 -0800)
committerGitHub <noreply@github.com>
Tue, 5 Nov 2019 16:02:52 +0000 (08:02 -0800)
commit1ffbfcbb99abde5f3fd9e53a4bac94591f5b6cac
tree1491a1cdf6c6349c482d01c4590455e6d715db5d
parent3e390a8faca7275f88e7b519fa9e320818ebb85c
JIT: cleanup redundant exact type tests (dotnet/coreclr#27397)

Generate exact type assertions from exact type tests in the IR. Look for these
assertions and set the value number for RELOPs with known outcomes. Process
JTRUE nodes in the main assertion prop optimization loop.

This combination of changes removes residual exact type tests from cast
expansions when they are anticipated by user inserted exact type tests, as in:

```C#
    if (b.GetType() == typeof(D))
    {
        return (D)b;
    }
```

Closes dotnet/coreclr#14471.

Commit migrated from https://github.com/dotnet/coreclr/commit/5216c8c843d2f34efccb070a840dfd42d6e7e230
src/coreclr/src/jit/assertionprop.cpp
src/coreclr/src/jit/compiler.h
src/coreclr/src/jit/morph.cpp