diff --git a/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp b/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp --- a/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp +++ b/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp @@ -92,7 +92,6 @@ /// Specific shift implementation. bool expandLSLB7Rd(Block &MBB, BlockIt MBBI); bool expandLSRB7Rd(Block &MBB, BlockIt MBBI); - bool expandASRB6Rd(Block &MBB, BlockIt MBBI); bool expandASRB7Rd(Block &MBB, BlockIt MBBI); bool expandLSLW4Rd(Block &MBB, BlockIt MBBI); bool expandLSRW4Rd(Block &MBB, BlockIt MBBI); @@ -1922,49 +1921,6 @@ } } -bool AVRExpandPseudo::expandASRB6Rd(Block &MBB, BlockIt MBBI) { - MachineInstr &MI = *MBBI; - Register DstReg = MI.getOperand(0).getReg(); - bool DstIsDead = MI.getOperand(0).isDead(); - bool DstIsKill = MI.getOperand(1).isKill(); - bool ImpIsDead = MI.getOperand(3).isDead(); - - // bst r24, 6 - // lsl r24 - // sbc r24, r24 - // bld r24, 0 - - buildMI(MBB, MBBI, AVR::BST) - .addReg(DstReg, getKillRegState(DstIsKill)) - .addImm(6) - ->getOperand(2) - .setIsUndef(true); - - buildMI(MBB, MBBI, AVR::ADDRdRr) // LSL Rd <==> ADD Rd, Rd - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg, getKillRegState(DstIsKill)) - .addReg(DstReg, getKillRegState(DstIsKill)); - - auto MISBC = - buildMI(MBB, MBBI, AVR::SBCRdRr) - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg, getKillRegState(DstIsKill)) - .addReg(DstReg, getKillRegState(DstIsKill)); - - buildMI(MBB, MBBI, AVR::BLD) - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg, getKillRegState(DstIsKill)) - .addImm(0) - ->getOperand(3) - .setIsKill(); - - if (ImpIsDead) - MISBC->getOperand(3).setIsDead(); - - MI.eraseFromParent(); - return true; -} - bool AVRExpandPseudo::expandASRB7Rd(Block &MBB, BlockIt MBBI) { MachineInstr &MI = *MBBI; Register DstReg = MI.getOperand(0).getReg(); @@ -2001,8 +1957,6 @@ MachineInstr &MI = *MBBI; unsigned Imm = MI.getOperand(2).getImm(); switch (Imm) { - case 6: - return expandASRB6Rd(MBB, MBBI); case 7: return expandASRB7Rd(MBB, MBBI); default: diff --git a/llvm/lib/Target/AVR/AVRISelLowering.cpp b/llvm/lib/Target/AVR/AVRISelLowering.cpp --- a/llvm/lib/Target/AVR/AVRISelLowering.cpp +++ b/llvm/lib/Target/AVR/AVRISelLowering.cpp @@ -359,11 +359,6 @@ Victim = DAG.getNode(AVRISD::LSRBN, dl, VT, Victim, DAG.getConstant(7, dl, VT)); ShiftAmount = 0; - } else if (Op.getOpcode() == ISD::SRA && ShiftAmount == 6) { - // Optimize ASR when ShiftAmount == 6. - Victim = DAG.getNode(AVRISD::ASRBN, dl, VT, Victim, - DAG.getConstant(6, dl, VT)); - ShiftAmount = 0; } else if (Op.getOpcode() == ISD::SRA && ShiftAmount == 7) { // Optimize ASR when ShiftAmount == 7. Victim = DAG.getNode(AVRISD::ASRBN, dl, VT, Victim, diff --git a/llvm/test/CodeGen/AVR/shift.ll b/llvm/test/CodeGen/AVR/shift.ll --- a/llvm/test/CodeGen/AVR/shift.ll +++ b/llvm/test/CodeGen/AVR/shift.ll @@ -171,16 +171,6 @@ ret i8 %result } -define i8 @asr_i8_6(i8 %a) { -; CHECK-LABEL: asr_i8_6 -; CHECK: bst r24, 6 -; CHECK-NEXT: lsl r24 -; CHECK-NEXT: sbc r24, r24 -; CHECK-NEXT: bld r24, 0 - %result = ashr i8 %a, 6 - ret i8 %result -} - define i8 @asr_i8_7(i8 %a) { ; CHECK-LABEL: asr_i8_7 ; CHECK: lsl r24