diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2018-07-26 13:44:47 -0700 |
---|---|---|
committer | Carol Eidt <carol.eidt@microsoft.com> | 2018-07-26 13:54:32 -0700 |
commit | 8f020204f27aa10f778f9e549e01c6717d939d47 (patch) | |
tree | ae6fda97cb5f869437ed0dbbccecbb2c36cbe581 /src/jit/gentree.h | |
parent | 51c390f3d009e36a72ca0b1e8b90a4d14a395ff9 (diff) | |
download | coreclr-8f020204f27aa10f778f9e549e01c6717d939d47.tar.gz coreclr-8f020204f27aa10f778f9e549e01c6717d939d47.tar.bz2 coreclr-8f020204f27aa10f778f9e549e01c6717d939d47.zip |
Include long shifts in OperIsShiftOrRotate
The register allocator uses `OperIsShiftOrRotate` as the assertion for the method that gets the kills for the class of instructions that use RCX as the shift amount register. Expand it to include `RSH_LO` and `LSH_HI`.
Fix #19081
Diffstat (limited to 'src/jit/gentree.h')
-rw-r--r-- | src/jit/gentree.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/jit/gentree.h b/src/jit/gentree.h index 83f07d3213..4195bf4650 100644 --- a/src/jit/gentree.h +++ b/src/jit/gentree.h @@ -1281,6 +1281,20 @@ public: return OperIsShift(OperGet()); } + static bool OperIsShiftLong(genTreeOps gtOper) + { +#ifdef _TARGET_64BIT_ + return false; +#else + return (gtOper == GT_LSH_HI) || (gtOper == GT_RSH_LO); +#endif + } + + bool OperIsShiftLong() const + { + return OperIsShiftLong(OperGet()); + } + static bool OperIsRotate(genTreeOps gtOper) { return (gtOper == GT_ROL) || (gtOper == GT_ROR); @@ -1293,7 +1307,7 @@ public: static bool OperIsShiftOrRotate(genTreeOps gtOper) { - return OperIsShift(gtOper) || OperIsRotate(gtOper); + return OperIsShift(gtOper) || OperIsRotate(gtOper) || OperIsShiftLong(gtOper); } bool OperIsShiftOrRotate() const |