aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@sifive.com>2024-11-18 16:37:48 -0800
committerCraig Topper <craig.topper@sifive.com>2024-11-18 16:37:48 -0800
commitcfc574a6cd13d2d0b77110b579c5cfcec744129f (patch)
tree677c01bc937ba5fdec764d4270efabc059dfaf4c
parent204234a69c068032a1adac31f00b51f3b9efa778 (diff)
downloadllvm-cfc574a6cd13d2d0b77110b579c5cfcec744129f.zip
llvm-cfc574a6cd13d2d0b77110b579c5cfcec744129f.tar.gz
llvm-cfc574a6cd13d2d0b77110b579c5cfcec744129f.tar.bz2
[RISCV] Use the OperandTransform field of a couple PatLeafs to simplify isel patterns. NFC
-rw-r--r--llvm/lib/Target/RISCV/RISCVInstrInfoZb.td28
1 files changed, 14 insertions, 14 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td
index 69e4b30..c57e7af 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td
@@ -149,13 +149,23 @@ def BCLRIANDIMaskLow : SDNodeXForm<imm, [{
SDLoc(N), N->getValueType(0));
}]>;
+def SimmShiftRightBy2XForm : SDNodeXForm<imm, [{
+ return CurDAG->getSignedTargetConstant(N->getSExtValue() >> 2, SDLoc(N),
+ N->getValueType(0));
+}]>;
+
+def SimmShiftRightBy3XForm : SDNodeXForm<imm, [{
+ return CurDAG->getSignedTargetConstant(N->getSExtValue() >> 3, SDLoc(N),
+ N->getValueType(0));
+}]>;
+
def CSImm12MulBy4 : PatLeaf<(imm), [{
if (!N->hasOneUse())
return false;
int64_t C = N->getSExtValue();
// Skip if C is simm12, an lui, or can be optimized by the PatLeaf AddiPair.
return !isInt<13>(C) && !isShiftedInt<20, 12>(C) && isShiftedInt<12, 2>(C);
-}]>;
+}], SimmShiftRightBy2XForm>;
def CSImm12MulBy8 : PatLeaf<(imm), [{
if (!N->hasOneUse())
@@ -164,17 +174,7 @@ def CSImm12MulBy8 : PatLeaf<(imm), [{
// Skip if C is simm12, an lui or can be optimized by the PatLeaf AddiPair or
// CSImm12MulBy4.
return !isInt<14>(C) && !isShiftedInt<20, 12>(C) && isShiftedInt<12, 3>(C);
-}]>;
-
-def SimmShiftRightBy2XForm : SDNodeXForm<imm, [{
- return CurDAG->getSignedTargetConstant(N->getSExtValue() >> 2, SDLoc(N),
- N->getValueType(0));
-}]>;
-
-def SimmShiftRightBy3XForm : SDNodeXForm<imm, [{
- return CurDAG->getSignedTargetConstant(N->getSExtValue() >> 3, SDLoc(N),
- N->getValueType(0));
-}]>;
+}], SimmShiftRightBy3XForm>;
// Pattern to exclude simm12 immediates from matching, namely `non_imm12`.
// GISel currently doesn't support PatFrag for leaf nodes, so `non_imm12`
@@ -654,10 +654,10 @@ foreach i = {1,2,3} in {
}
def : Pat<(add_like (XLenVT GPR:$r), CSImm12MulBy4:$i),
- (SH2ADD (XLenVT (ADDI (XLenVT X0), (SimmShiftRightBy2XForm CSImm12MulBy4:$i))),
+ (SH2ADD (XLenVT (ADDI (XLenVT X0), CSImm12MulBy4:$i)),
GPR:$r)>;
def : Pat<(add_like (XLenVT GPR:$r), CSImm12MulBy8:$i),
- (SH3ADD (XLenVT (ADDI (XLenVT X0), (SimmShiftRightBy3XForm CSImm12MulBy8:$i))),
+ (SH3ADD (XLenVT (ADDI (XLenVT X0), CSImm12MulBy8:$i)),
GPR:$r)>;
} // Predicates = [HasStdExtZba]