summaryrefslogtreecommitdiff
path: root/src/jit/gentree.h
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2018-07-26 13:44:47 -0700
committerCarol Eidt <carol.eidt@microsoft.com>2018-07-26 13:54:32 -0700
commit8f020204f27aa10f778f9e549e01c6717d939d47 (patch)
treeae6fda97cb5f869437ed0dbbccecbb2c36cbe581 /src/jit/gentree.h
parent51c390f3d009e36a72ca0b1e8b90a4d14a395ff9 (diff)
downloadcoreclr-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.h16
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