diff options
author | Craig Topper <craig.topper@sifive.com> | 2024-11-18 16:37:48 -0800 |
---|---|---|
committer | Craig Topper <craig.topper@sifive.com> | 2024-11-18 16:37:48 -0800 |
commit | cfc574a6cd13d2d0b77110b579c5cfcec744129f (patch) | |
tree | 677c01bc937ba5fdec764d4270efabc059dfaf4c | |
parent | 204234a69c068032a1adac31f00b51f3b9efa778 (diff) | |
download | llvm-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.td | 28 |
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] |