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 dotnet/coreclr#18884
Commit migrated from https://github.com/dotnet/coreclr/commit/
f48801ea7c1412e228a5230ec6cbeabdf5277ec0