Improve narrowing of GT_AND nodes. (dotnet/coreclr#18995)
authorEugene Rozenfeld <erozen@microsoft.com>
Fri, 20 Jul 2018 22:35:47 +0000 (15:35 -0700)
committerGitHub <noreply@github.com>
Fri, 20 Jul 2018 22:35:47 +0000 (15:35 -0700)
commitb03be669540aab25345d4c53e144a0642611d105
tree52a887348c7af8ef8b659beceaf7b5d42b5c54fd
parent5e82fbce8d8aa136ab51aabad3598c2ecaff117f
Improve narrowing of GT_AND nodes. (dotnet/coreclr#18995)

This is a follow-up to to dotnet/coreclr#18816 which resulted in a 6 byte regression in one of the
desktop SuperPMI methods. This change removes that regression and adds a number
of improved diffs.

If we are narrowing GT_AND to an unsigned type and one of the operands can be narrowed
into that type, the result of the GT_AND will also fit into that type and can be narrowed.
The same is true if one of the operands is an int const and can be narrowed into 'dsst'.

The change also ensures that we don't call optNarrowTree(false) more than once on each of the
GT_AND operands.

Commit migrated from https://github.com/dotnet/coreclr/commit/ad09b5820b4aaf40033d930c4b64a89a78ddb556
src/coreclr/src/jit/optimizer.cpp