Handle small memory compares against 0
authorMike Danes <onemihaid@hotmail.com>
Mon, 19 Dec 2016 06:36:02 +0000 (08:36 +0200)
committerMike Danes <onemihaid@hotmail.com>
Tue, 17 Jan 2017 18:26:26 +0000 (20:26 +0200)
commit5cb6f33ffdfb82dcbc0c5d9519bbc685963d657c
tree1ec2ba92694839364293ee3696eff5ba1e4e2953
parent0a11abf3937064529dd9985cdd7650355d31f31b
Handle small memory compares against 0

The previous commit missed the TYP_BOOL case that the original code handled. But then the original code failed to do this thinking that "test" will be used. But that means we end up with a "movzx" as well:
       movzx    rax, byte  ptr [rsi+24]
       test     eax, eax
instead of just
       cmp      byte  ptr [rsi+24], 0

The Intel manual actually recomends against using the "cmp mem, imm" form but not if other instructions need to be added. This may warrant further investigation though.

FX diff shows a 7579 bytes improvement without any regressions.

Commit migrated from https://github.com/dotnet/coreclr/commit/9bc2e775a85667fa85a1254fa4138fb98f417543
src/coreclr/src/jit/lower.cpp