Kill RCX when used by shift
authorCarol Eidt <carol.eidt@microsoft.com>
Mon, 16 Jul 2018 18:37:40 +0000 (11:37 -0700)
committerCarol Eidt <carol.eidt@microsoft.com>
Tue, 17 Jul 2018 15:57:02 +0000 (08:57 -0700)
commitf48801ea7c1412e228a5230ec6cbeabdf5277ec0
treeda485d0e0aa9196da1ffa4eef2a1a7b8d89dff9b
parentd25bcb8e27c5e583d6abfe6d59d3f32316ac7733
Kill RCX when used by shift

RCX must be explicitly killed. Otherwise, if there's a case of a def/use conflict - as in this test case where the shift amount is defined by a divide that must go in RAX, it won't be explicitly assigned to RCX,.
Also, the handling of conflicts must not use the register assignment of the def on the use  if it conflicts with the use register requirements, and vice versa.

Fix #18884
src/jit/lsra.h
src/jit/lsrabuild.cpp
src/jit/lsraxarch.cpp
tests/src/JIT/Regression/JitBlue/GitHub_18884/GitHub_18884.cs [new file with mode: 0644]
tests/src/JIT/Regression/JitBlue/GitHub_18884/GitHub_18884.csproj [new file with mode: 0644]