Skip to content

Commit c85c77c

Browse files
authored
[AVR] Fix shift node descriptions (#117456)
Wide shift nodes produce two results, not one. Reuse the added type profile to define the standard "shift parts" nodes.
1 parent 8d65073 commit c85c77c

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

llvm/include/llvm/Target/TargetSelectionDAG.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ def SDTIntBinOp : SDTypeProfile<1, 2, [ // add, and, or, xor, udiv, etc.
118118
def SDTIntShiftOp : SDTypeProfile<1, 2, [ // shl, sra, srl
119119
SDTCisSameAs<0, 1>, SDTCisInt<0>, SDTCisInt<2>
120120
]>;
121+
def SDTIntShiftPairOp : SDTypeProfile<2, 3, [ // shl_parts, sra_parts, srl_parts
122+
SDTCisInt<0>, SDTCisSameAs<1, 0>,
123+
SDTCisSameAs<2, 0>, SDTCisSameAs<3, 0>, SDTCisInt<4>
124+
]>;
121125
def SDTIntShiftDOp: SDTypeProfile<1, 3, [ // fshl, fshr
122126
SDTCisSameAs<0, 1>, SDTCisSameAs<0, 2>, SDTCisInt<0>, SDTCisInt<3>
123127
]>;
@@ -422,6 +426,9 @@ def sra : SDNode<"ISD::SRA" , SDTIntShiftOp>;
422426
def shl : SDNode<"ISD::SHL" , SDTIntShiftOp>;
423427
def rotl : SDNode<"ISD::ROTL" , SDTIntShiftOp>;
424428
def rotr : SDNode<"ISD::ROTR" , SDTIntShiftOp>;
429+
def shl_parts : SDNode<"ISD::SHL_PARTS" , SDTIntShiftPairOp>;
430+
def sra_parts : SDNode<"ISD::SRA_PARTS" , SDTIntShiftPairOp>;
431+
def srl_parts : SDNode<"ISD::SRL_PARTS" , SDTIntShiftPairOp>;
425432
def fshl : SDNode<"ISD::FSHL" , SDTIntShiftDOp>;
426433
def fshr : SDNode<"ISD::FSHR" , SDTIntShiftDOp>;
427434
def and : SDNode<"ISD::AND" , SDTIntBinOp,

llvm/lib/Target/AVR/AVRInstrInfo.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ def AVRasrbn : SDNode<"AVRISD::ASRBN", SDTIntBinOp>;
6969
def AVRlslwn : SDNode<"AVRISD::LSLWN", SDTIntBinOp>;
7070
def AVRlsrwn : SDNode<"AVRISD::LSRWN", SDTIntBinOp>;
7171
def AVRasrwn : SDNode<"AVRISD::ASRWN", SDTIntBinOp>;
72-
def AVRlslw : SDNode<"AVRISD::LSLW", SDTIntShiftDOp>;
73-
def AVRlsrw : SDNode<"AVRISD::LSRW", SDTIntShiftDOp>;
74-
def AVRasrw : SDNode<"AVRISD::ASRW", SDTIntShiftDOp>;
72+
def AVRlslw : SDNode<"AVRISD::LSLW", SDTIntShiftPairOp>;
73+
def AVRlsrw : SDNode<"AVRISD::LSRW", SDTIntShiftPairOp>;
74+
def AVRasrw : SDNode<"AVRISD::ASRW", SDTIntShiftPairOp>;
7575

7676
// Pseudo shift nodes for non-constant shift amounts.
7777
def AVRlslLoop : SDNode<"AVRISD::LSLLOOP", SDTIntShiftOp>;

0 commit comments

Comments
 (0)