Lines Matching refs:RISCV
15 #include "RISCV.h"
63 using namespace RISCV;
70 namespace llvm::RISCV {
75 } // end namespace llvm::RISCV
78 : RISCVGenInstrInfo(RISCV::ADJCALLSTACKDOWN, RISCV::ADJCALLSTACKUP),
83 return MCInstBuilder(RISCV::C_NOP);
84 return MCInstBuilder(RISCV::ADDI)
85 .addReg(RISCV::X0)
86 .addReg(RISCV::X0)
102 case RISCV::LB:
103 case RISCV::LBU:
106 case RISCV::LH:
107 case RISCV::LHU:
108 case RISCV::FLH:
111 case RISCV::LW:
112 case RISCV::FLW:
113 case RISCV::LWU:
116 case RISCV::LD:
117 case RISCV::FLD:
143 case RISCV::SB:
146 case RISCV::SH:
147 case RISCV::FSH:
150 case RISCV::SW:
151 case RISCV::FSW:
154 case RISCV::SD:
155 case RISCV::FSD:
171 if (RISCV::getRVVMCOpcode(MI.getOpcode()) == RISCV::VID_V &&
176 !MI.hasRegisterImplicitUseOperand(RISCV::VTYPE))
207 if (MBBI->getOpcode() == RISCV::PseudoVSETVLI ||
208 MBBI->getOpcode() == RISCV::PseudoVSETVLIX0 ||
209 MBBI->getOpcode() == RISCV::PseudoVSETIVLI) {
229 if (MBBI->getOperand(0).getReg() != RISCV::X0)
233 if (MBBI->getOperand(1).getReg() != RISCV::X0)
262 if (MBBI->modifiesRegister(RISCV::VL, /*TRI=*/nullptr))
354 return {RISCVII::LMUL_8, RISCV::VRM8RegClass, RISCV::VMV8R_V,
355 RISCV::PseudoVMV_V_V_M8, RISCV::PseudoVMV_V_I_M8};
358 return {RISCVII::LMUL_4, RISCV::VRM4RegClass, RISCV::VMV4R_V,
359 RISCV::PseudoVMV_V_V_M4, RISCV::PseudoVMV_V_I_M4};
362 return {RISCVII::LMUL_2, RISCV::VRM2RegClass, RISCV::VMV2R_V,
363 RISCV::PseudoVMV_V_V_M2, RISCV::PseudoVMV_V_I_M2};
365 return {RISCVII::LMUL_1, RISCV::VRRegClass, RISCV::VMV1R_V,
366 RISCV::PseudoVMV_V_V_M1, RISCV::PseudoVMV_V_I_M1};
372 return {RISCVII::LMUL_8, RISCV::VRM8RegClass, RISCV::VMV8R_V,
373 RISCV::PseudoVMV_V_V_M8, RISCV::PseudoVMV_V_I_M8};
375 return {RISCVII::LMUL_4, RISCV::VRM4RegClass, RISCV::VMV4R_V,
376 RISCV::PseudoVMV_V_V_M4, RISCV::PseudoVMV_V_I_M4};
378 return {RISCVII::LMUL_2, RISCV::VRM2RegClass, RISCV::VMV2R_V,
379 RISCV::PseudoVMV_V_V_M2, RISCV::PseudoVMV_V_I_M2};
381 return {RISCVII::LMUL_1, RISCV::VRRegClass, RISCV::VMV1R_V,
382 RISCV::PseudoVMV_V_V_M1, RISCV::PseudoVMV_V_I_M1};
386 MCRegister Reg = RISCV::V0 + Encoding;
387 if (&RegClass == &RISCV::VRRegClass)
389 return TRI->getMatchingSuperReg(Reg, RISCV::sub_vrm1_0, &RegClass);
416 bool UseVMV_V_I = RISCV::getRVVMCOpcode(Opc) == RISCV::VMV_V_I;
417 bool UseVMV = UseVMV_V_I || RISCV::getRVVMCOpcode(Opc) == RISCV::VMV_V_V;
429 MIB.addReg(RISCV::VL, RegState::Implicit);
430 MIB.addReg(RISCV::VTYPE, RegState::Implicit);
446 if (RISCV::GPRRegClass.contains(DstReg, SrcReg)) {
447 BuildMI(MBB, MBBI, DL, get(RISCV::ADDI), DstReg)
453 if (RISCV::GPRPairRegClass.contains(DstReg, SrcReg)) {
455 BuildMI(MBB, MBBI, DL, get(RISCV::ADDI),
456 TRI->getSubReg(DstReg, RISCV::sub_gpr_even))
457 .addReg(TRI->getSubReg(SrcReg, RISCV::sub_gpr_even),
460 BuildMI(MBB, MBBI, DL, get(RISCV::ADDI),
461 TRI->getSubReg(DstReg, RISCV::sub_gpr_odd))
462 .addReg(TRI->getSubReg(SrcReg, RISCV::sub_gpr_odd),
469 if (RISCV::VCSRRegClass.contains(SrcReg) &&
470 RISCV::GPRRegClass.contains(DstReg)) {
471 BuildMI(MBB, MBBI, DL, get(RISCV::CSRRS), DstReg)
473 .addReg(RISCV::X0);
477 if (RISCV::FPR16RegClass.contains(DstReg, SrcReg)) {
480 Opc = RISCV::FSGNJ_H;
486 DstReg = TRI->getMatchingSuperReg(DstReg, RISCV::sub_16,
487 &RISCV::FPR32RegClass);
488 SrcReg = TRI->getMatchingSuperReg(SrcReg, RISCV::sub_16,
489 &RISCV::FPR32RegClass);
490 Opc = RISCV::FSGNJ_S;
498 if (RISCV::FPR32RegClass.contains(DstReg, SrcReg)) {
499 BuildMI(MBB, MBBI, DL, get(RISCV::FSGNJ_S), DstReg)
505 if (RISCV::FPR64RegClass.contains(DstReg, SrcReg)) {
506 BuildMI(MBB, MBBI, DL, get(RISCV::FSGNJ_D), DstReg)
512 if (RISCV::FPR32RegClass.contains(DstReg) &&
513 RISCV::GPRRegClass.contains(SrcReg)) {
514 BuildMI(MBB, MBBI, DL, get(RISCV::FMV_W_X), DstReg)
519 if (RISCV::GPRRegClass.contains(DstReg) &&
520 RISCV::FPR32RegClass.contains(SrcReg)) {
521 BuildMI(MBB, MBBI, DL, get(RISCV::FMV_X_W), DstReg)
526 if (RISCV::FPR64RegClass.contains(DstReg) &&
527 RISCV::GPRRegClass.contains(SrcReg)) {
529 BuildMI(MBB, MBBI, DL, get(RISCV::FMV_D_X), DstReg)
534 if (RISCV::GPRRegClass.contains(DstReg) &&
535 RISCV::FPR64RegClass.contains(SrcReg)) {
537 BuildMI(MBB, MBBI, DL, get(RISCV::FMV_X_D), DstReg)
544 &RISCV::VRRegClass, &RISCV::VRM2RegClass, &RISCV::VRM4RegClass,
545 &RISCV::VRM8RegClass, &RISCV::VRN2M1RegClass, &RISCV::VRN2M2RegClass,
546 &RISCV::VRN2M4RegClass, &RISCV::VRN3M1RegClass, &RISCV::VRN3M2RegClass,
547 &RISCV::VRN4M1RegClass, &RISCV::VRN4M2RegClass, &RISCV::VRN5M1RegClass,
548 &RISCV::VRN6M1RegClass, &RISCV::VRN7M1RegClass, &RISCV::VRN8M1RegClass};
570 if (RISCV::GPRRegClass.hasSubClassEq(RC)) {
571 Opcode = TRI->getRegSizeInBits(RISCV::GPRRegClass) == 32 ?
572 RISCV::SW : RISCV::SD;
574 } else if (RISCV::GPRPairRegClass.hasSubClassEq(RC)) {
575 Opcode = RISCV::PseudoRV32ZdinxSD;
577 } else if (RISCV::FPR16RegClass.hasSubClassEq(RC)) {
578 Opcode = RISCV::FSH;
580 } else if (RISCV::FPR32RegClass.hasSubClassEq(RC)) {
581 Opcode = RISCV::FSW;
583 } else if (RISCV::FPR64RegClass.hasSubClassEq(RC)) {
584 Opcode = RISCV::FSD;
586 } else if (RISCV::VRRegClass.hasSubClassEq(RC)) {
587 Opcode = RISCV::VS1R_V;
588 } else if (RISCV::VRM2RegClass.hasSubClassEq(RC)) {
589 Opcode = RISCV::VS2R_V;
590 } else if (RISCV::VRM4RegClass.hasSubClassEq(RC)) {
591 Opcode = RISCV::VS4R_V;
592 } else if (RISCV::VRM8RegClass.hasSubClassEq(RC)) {
593 Opcode = RISCV::VS8R_V;
594 } else if (RISCV::VRN2M1RegClass.hasSubClassEq(RC))
595 Opcode = RISCV::PseudoVSPILL2_M1;
596 else if (RISCV::VRN2M2RegClass.hasSubClassEq(RC))
597 Opcode = RISCV::PseudoVSPILL2_M2;
598 else if (RISCV::VRN2M4RegClass.hasSubClassEq(RC))
599 Opcode = RISCV::PseudoVSPILL2_M4;
600 else if (RISCV::VRN3M1RegClass.hasSubClassEq(RC))
601 Opcode = RISCV::PseudoVSPILL3_M1;
602 else if (RISCV::VRN3M2RegClass.hasSubClassEq(RC))
603 Opcode = RISCV::PseudoVSPILL3_M2;
604 else if (RISCV::VRN4M1RegClass.hasSubClassEq(RC))
605 Opcode = RISCV::PseudoVSPILL4_M1;
606 else if (RISCV::VRN4M2RegClass.hasSubClassEq(RC))
607 Opcode = RISCV::PseudoVSPILL4_M2;
608 else if (RISCV::VRN5M1RegClass.hasSubClassEq(RC))
609 Opcode = RISCV::PseudoVSPILL5_M1;
610 else if (RISCV::VRN6M1RegClass.hasSubClassEq(RC))
611 Opcode = RISCV::PseudoVSPILL6_M1;
612 else if (RISCV::VRN7M1RegClass.hasSubClassEq(RC))
613 Opcode = RISCV::PseudoVSPILL7_M1;
614 else if (RISCV::VRN8M1RegClass.hasSubClassEq(RC))
615 Opcode = RISCV::PseudoVSPILL8_M1;
653 if (RISCV::GPRRegClass.hasSubClassEq(RC)) {
654 Opcode = TRI->getRegSizeInBits(RISCV::GPRRegClass) == 32 ?
655 RISCV::LW : RISCV::LD;
657 } else if (RISCV::GPRPairRegClass.hasSubClassEq(RC)) {
658 Opcode = RISCV::PseudoRV32ZdinxLD;
660 } else if (RISCV::FPR16RegClass.hasSubClassEq(RC)) {
661 Opcode = RISCV::FLH;
663 } else if (RISCV::FPR32RegClass.hasSubClassEq(RC)) {
664 Opcode = RISCV::FLW;
666 } else if (RISCV::FPR64RegClass.hasSubClassEq(RC)) {
667 Opcode = RISCV::FLD;
669 } else if (RISCV::VRRegClass.hasSubClassEq(RC)) {
670 Opcode = RISCV::VL1RE8_V;
671 } else if (RISCV::VRM2RegClass.hasSubClassEq(RC)) {
672 Opcode = RISCV::VL2RE8_V;
673 } else if (RISCV::VRM4RegClass.hasSubClassEq(RC)) {
674 Opcode = RISCV::VL4RE8_V;
675 } else if (RISCV::VRM8RegClass.hasSubClassEq(RC)) {
676 Opcode = RISCV::VL8RE8_V;
677 } else if (RISCV::VRN2M1RegClass.hasSubClassEq(RC))
678 Opcode = RISCV::PseudoVRELOAD2_M1;
679 else if (RISCV::VRN2M2RegClass.hasSubClassEq(RC))
680 Opcode = RISCV::PseudoVRELOAD2_M2;
681 else if (RISCV::VRN2M4RegClass.hasSubClassEq(RC))
682 Opcode = RISCV::PseudoVRELOAD2_M4;
683 else if (RISCV::VRN3M1RegClass.hasSubClassEq(RC))
684 Opcode = RISCV::PseudoVRELOAD3_M1;
685 else if (RISCV::VRN3M2RegClass.hasSubClassEq(RC))
686 Opcode = RISCV::PseudoVRELOAD3_M2;
687 else if (RISCV::VRN4M1RegClass.hasSubClassEq(RC))
688 Opcode = RISCV::PseudoVRELOAD4_M1;
689 else if (RISCV::VRN4M2RegClass.hasSubClassEq(RC))
690 Opcode = RISCV::PseudoVRELOAD4_M2;
691 else if (RISCV::VRN5M1RegClass.hasSubClassEq(RC))
692 Opcode = RISCV::PseudoVRELOAD5_M1;
693 else if (RISCV::VRN6M1RegClass.hasSubClassEq(RC))
694 Opcode = RISCV::PseudoVRELOAD6_M1;
695 else if (RISCV::VRN7M1RegClass.hasSubClassEq(RC))
696 Opcode = RISCV::PseudoVRELOAD7_M1;
697 else if (RISCV::VRN8M1RegClass.hasSubClassEq(RC))
698 Opcode = RISCV::PseudoVRELOAD8_M1;
742 if (RISCV::isSEXT_W(MI)) {
743 LoadOpc = RISCV::LW;
746 if (RISCV::isZEXT_W(MI)) {
747 LoadOpc = RISCV::LWU;
750 if (RISCV::isZEXT_B(MI)) {
751 LoadOpc = RISCV::LBU;
755 case RISCV::SEXT_H:
756 LoadOpc = RISCV::LH;
758 case RISCV::SEXT_B:
759 LoadOpc = RISCV::LB;
761 case RISCV::ZEXT_H_RV32:
762 case RISCV::ZEXT_H_RV64:
763 LoadOpc = RISCV::LHU;
785 Register SrcReg = RISCV::X0;
807 unsigned SrcRegState = getKillRegState(SrcReg != RISCV::X0) |
820 .addReg(RISCV::X0)
849 case RISCV::CV_BEQIMM:
851 case RISCV::CV_BNEIMM:
853 case RISCV::BEQ:
855 case RISCV::BNE:
857 case RISCV::BLT:
859 case RISCV::BGE:
861 case RISCV::BLTU:
863 case RISCV::BGEU:
869 // RISCVInstrInfo, giving us flexibility in what to push to it. For RISCV, we
888 return Imm ? RISCV::CV_BEQIMM : RISCV::BEQ;
890 return Imm ? RISCV::CV_BNEIMM : RISCV::BNE;
892 return RISCV::BLT;
894 return RISCV::BGE;
896 return RISCV::BLTU;
898 return RISCV::BGEU;
1045 MachineInstr &MI = *BuildMI(&MBB, DL, get(RISCV::PseudoBR)).addMBB(TBB);
1065 MachineInstr &MI = *BuildMI(&MBB, DL, get(RISCV::PseudoBR)).addMBB(FBB);
1095 Register ScratchReg = MRI.createVirtualRegister(&RISCV::GPRJALRRegClass);
1098 MachineInstr &MI = *BuildMI(MBB, II, DL, get(RISCV::PseudoJump))
1104 RS->scavengeRegisterBackwards(RISCV::GPRRegClass, MI.getIterator(),
1107 if (TmpGPR != RISCV::NoRegister)
1113 TmpGPR = RISCV::X27;
1120 &RISCV::GPRRegClass, TRI, Register());
1127 &RISCV::GPRRegClass, TRI, Register());
1179 if (MI->getOpcode() == RISCV::ADDI && MI->getOperand(1).isReg() &&
1180 MI->getOperand(1).getReg() == RISCV::X0) {
1274 case RISCV::BEQ:
1275 case RISCV::BNE:
1276 case RISCV::BLT:
1277 case RISCV::BGE:
1278 case RISCV::BLTU:
1279 case RISCV::BGEU:
1280 case RISCV::CV_BEQIMM:
1281 case RISCV::CV_BNEIMM:
1283 case RISCV::JAL:
1284 case RISCV::PseudoBR:
1286 case RISCV::PseudoJump:
1292 // instruction opcode. Otherwise, return RISCV::INSTRUCTION_LIST_END.
1296 case RISCV::ADD: return RISCV::PseudoCCADD; break;
1297 case RISCV::SUB: return RISCV::PseudoCCSUB; break;
1298 case RISCV::SLL: return RISCV::PseudoCCSLL; break;
1299 case RISCV::SRL: return RISCV::PseudoCCSRL; break;
1300 case RISCV::SRA: return RISCV::PseudoCCSRA; break;
1301 case RISCV::AND: return RISCV::PseudoCCAND; break;
1302 case RISCV::OR: return RISCV::PseudoCCOR; break;
1303 case RISCV::XOR: return RISCV::PseudoCCXOR; break;
1305 case RISCV::ADDI: return RISCV::PseudoCCADDI; break;
1306 case RISCV::SLLI: return RISCV::PseudoCCSLLI; break;
1307 case RISCV::SRLI: return RISCV::PseudoCCSRLI; break;
1308 case RISCV::SRAI: return RISCV::PseudoCCSRAI; break;
1309 case RISCV::ANDI: return RISCV::PseudoCCANDI; break;
1310 case RISCV::ORI: return RISCV::PseudoCCORI; break;
1311 case RISCV::XORI: return RISCV::PseudoCCXORI; break;
1313 case RISCV::ADDW: return RISCV::PseudoCCADDW; break;
1314 case RISCV::SUBW: return RISCV::PseudoCCSUBW; break;
1315 case RISCV::SLLW: return RISCV::PseudoCCSLLW; break;
1316 case RISCV::SRLW: return RISCV::PseudoCCSRLW; break;
1317 case RISCV::SRAW: return RISCV::PseudoCCSRAW; break;
1319 case RISCV::ADDIW: return RISCV::PseudoCCADDIW; break;
1320 case RISCV::SLLIW: return RISCV::PseudoCCSLLIW; break;
1321 case RISCV::SRLIW: return RISCV::PseudoCCSRLIW; break;
1322 case RISCV::SRAIW: return RISCV::PseudoCCSRAIW; break;
1324 case RISCV::ANDN: return RISCV::PseudoCCANDN; break;
1325 case RISCV::ORN: return RISCV::PseudoCCORN; break;
1326 case RISCV::XNOR: return RISCV::PseudoCCXNOR; break;
1329 return RISCV::INSTRUCTION_LIST_END;
1345 if (getPredicatedOpcode(MI->getOpcode()) == RISCV::INSTRUCTION_LIST_END)
1348 if (MI->getOpcode() == RISCV::ADDI && MI->getOperand(1).isReg() &&
1349 MI->getOperand(1).getReg() == RISCV::X0)
1377 assert(MI.getOpcode() == RISCV::PseudoCCMOVGPR &&
1400 assert(MI.getOpcode() == RISCV::PseudoCCMOVGPR &&
1422 assert(PredOpc != RISCV::INSTRUCTION_LIST_END && "Unexpected opcode!");
1529 case RISCV::FSGNJ_D:
1530 case RISCV::FSGNJ_S:
1531 case RISCV::FSGNJ_H:
1532 case RISCV::FSGNJ_D_INX:
1533 case RISCV::FSGNJ_D_IN32X:
1534 case RISCV::FSGNJ_S_INX:
1535 case RISCV::FSGNJ_H_INX:
1539 case RISCV::ADDI:
1540 case RISCV::ORI:
1541 case RISCV::XORI:
1543 MI.getOperand(1).getReg() == RISCV::X0) ||
1556 case RISCV::ADDI:
1562 case RISCV::FSGNJ_D:
1563 case RISCV::FSGNJ_S:
1564 case RISCV::FSGNJ_H:
1565 case RISCV::FSGNJ_D_INX:
1566 case RISCV::FSGNJ_D_IN32X:
1567 case RISCV::FSGNJ_S_INX:
1568 case RISCV::FSGNJ_H_INX:
1596 RISCV::getNamedOperandIdx(Root.getOpcode(), RISCV::OpName::frm);
1600 return RISCV::getNamedOperandIdx(MI->getOpcode(),
1601 RISCV::OpName::frm) < 0;
1612 if (static_cast<unsigned>(RISCV::getNamedOperandIdx(
1613 NewMI->getOpcode(), RISCV::OpName::frm)) != NewMI->getNumOperands())
1618 MIB.addUse(RISCV::FRM, RegState::Implicit);
1626 case RISCV::FADD_H:
1627 case RISCV::FADD_S:
1628 case RISCV::FADD_D:
1637 case RISCV::FSUB_H:
1638 case RISCV::FSUB_S:
1639 case RISCV::FSUB_D:
1648 case RISCV::FMUL_H:
1649 case RISCV::FMUL_S:
1650 case RISCV::FMUL_D:
1658 case RISCV::OPC##_M1: \
1659 case RISCV::OPC##_M2: \
1660 case RISCV::OPC##_M4: \
1661 case RISCV::OPC##_M8: \
1662 case RISCV::OPC##_MF2: \
1663 case RISCV::OPC##_MF4: \
1664 case RISCV::OPC##_MF8
1667 case RISCV::OPC##_M1_MASK: \
1668 case RISCV::OPC##_M2_MASK: \
1669 case RISCV::OPC##_M4_MASK: \
1670 case RISCV::OPC##_M8_MASK: \
1671 case RISCV::OPC##_MF2_MASK: \
1672 case RISCV::OPC##_MF4_MASK: \
1673 case RISCV::OPC##_MF8_MASK
1749 if (It->modifiesRegister(RISCV::V0, TRI)) {
1866 if (RISCV::getRVVMCOpcode(Root.getOpcode())) {
1888 RISCV::getNamedOperandIdx(Inst.getOpcode(), RISCV::OpName::frm);
1890 RISCV::getNamedOperandIdx(Sibling.getOpcode(), RISCV::OpName::frm);
1893 RISCV::hasEqualFRM(Inst, Sibling);
1916 case RISCV::ADD:
1917 case RISCV::ADDW:
1918 case RISCV::AND:
1919 case RISCV::OR:
1920 case RISCV::XOR:
1933 case RISCV::MUL:
1934 case RISCV::MULW:
1935 case RISCV::MIN:
1936 case RISCV::MINU:
1937 case RISCV::MAX:
1938 case RISCV::MAXU:
1939 case RISCV::FMIN_H:
1940 case RISCV::FMIN_S:
1941 case RISCV::FMIN_D:
1942 case RISCV::FMAX_H:
1943 case RISCV::FMAX_S:
1944 case RISCV::FMAX_D:
1954 case RISCV::OPC##_M1: \
1955 return RISCV::INV##_M1; \
1956 case RISCV::OPC##_M2: \
1957 return RISCV::INV##_M2; \
1958 case RISCV::OPC##_M4: \
1959 return RISCV::INV##_M4; \
1960 case RISCV::OPC##_M8: \
1961 return RISCV::INV##_M8; \
1962 case RISCV::OPC##_MF2: \
1963 return RISCV::INV##_MF2; \
1964 case RISCV::OPC##_MF4: \
1965 return RISCV::INV##_MF4; \
1966 case RISCV::OPC##_MF8: \
1967 return RISCV::INV##_MF8
1970 case RISCV::OPC##_M1_MASK: \
1971 return RISCV::INV##_M1_MASK; \
1972 case RISCV::OPC##_M2_MASK: \
1973 return RISCV::INV##_M2_MASK; \
1974 case RISCV::OPC##_M4_MASK: \
1975 return RISCV::INV##_M4_MASK; \
1976 case RISCV::OPC##_M8_MASK: \
1977 return RISCV::INV##_M8_MASK; \
1978 case RISCV::OPC##_MF2_MASK: \
1979 return RISCV::INV##_MF2_MASK; \
1980 case RISCV::OPC##_MF4_MASK: \
1981 return RISCV::INV##_MF4_MASK; \
1982 case RISCV::OPC##_MF8_MASK: \
1983 return RISCV::INV##_MF8_MASK
1988 case RISCV::FADD_H:
1989 return RISCV::FSUB_H;
1990 case RISCV::FADD_S:
1991 return RISCV::FSUB_S;
1992 case RISCV::FADD_D:
1993 return RISCV::FSUB_D;
1994 case RISCV::FSUB_H:
1995 return RISCV::FADD_H;
1996 case RISCV::FSUB_S:
1997 return RISCV::FADD_S;
1998 case RISCV::FSUB_D:
1999 return RISCV::FADD_D;
2000 case RISCV::ADD:
2001 return RISCV::SUB;
2002 case RISCV::SUB:
2003 return RISCV::ADD;
2004 case RISCV::ADDW:
2005 return RISCV::SUBW;
2006 case RISCV::SUBW:
2007 return RISCV::ADDW;
2044 return RISCV::hasEqualFRM(Root, *MI);
2102 const MachineInstr *ShiftMI = canCombine(MBB, MO, RISCV::SLLI);
2119 case RISCV::SH1ADD:
2121 case RISCV::SH2ADD:
2123 case RISCV::SH3ADD:
2138 const MachineInstr *AddMI = canCombine(MBB, Root.getOperand(2), RISCV::ADD);
2185 case RISCV::FADD_H:
2186 return RISCV::FMADD_H;
2187 case RISCV::FADD_S:
2188 return RISCV::FMADD_S;
2189 case RISCV::FADD_D:
2190 return RISCV::FMADD_D;
2191 case RISCV::FSUB_H:
2192 return Pattern == RISCVMachineCombinerPattern::FMSUB ? RISCV::FMSUB_H
2193 : RISCV::FNMSUB_H;
2194 case RISCV::FSUB_S:
2195 return Pattern == RISCVMachineCombinerPattern::FMSUB ? RISCV::FMSUB_S
2196 : RISCV::FNMSUB_S;
2197 case RISCV::FSUB_D:
2198 return Pattern == RISCVMachineCombinerPattern::FMSUB ? RISCV::FMSUB_D
2199 : RISCV::FNMSUB_D;
2285 InnerOpc = RISCV::ADD;
2288 InnerOpc = RISCV::SH1ADD;
2291 InnerOpc = RISCV::SH2ADD;
2294 InnerOpc = RISCV::SH3ADD;
2302 Register NewVR = MRI.createVirtualRegister(&RISCV::GPRRegClass);
2483 if (Op.isReg() && Op.getReg() != RISCV::NoRegister) {
2486 if (!RISCV::GPRRegClass.hasSubClassEq(RC)) {
2541 !MI.readsRegister(RISCV::FRM, /*TRI=*/nullptr)) {
2555 case RISCV::LB:
2556 case RISCV::LBU:
2557 case RISCV::LH:
2558 case RISCV::LHU:
2559 case RISCV::LW:
2560 case RISCV::LWU:
2561 case RISCV::LD:
2562 case RISCV::FLH:
2563 case RISCV::FLW:
2564 case RISCV::FLD:
2565 case RISCV::SB:
2566 case RISCV::SH:
2567 case RISCV::SW:
2568 case RISCV::SD:
2569 case RISCV::FSH:
2570 case RISCV::FSW:
2571 case RISCV::FSD:
2578 if (AddrI.getOpcode() != RISCV::ADDI || !AddrI.getOperand(1).isReg() ||
2626 case RISCV::LB:
2627 case RISCV::LBU:
2628 case RISCV::SB:
2629 case RISCV::LH:
2630 case RISCV::LHU:
2631 case RISCV::FLH:
2632 case RISCV::SH:
2633 case RISCV::FSH:
2634 case RISCV::LW:
2635 case RISCV::LWU:
2636 case RISCV::FLW:
2637 case RISCV::SW:
2638 case RISCV::FSW:
2639 case RISCV::LD:
2640 case RISCV::FLD:
2641 case RISCV::SD:
2642 case RISCV::FSD:
2846 return !C.isAvailableAcrossAndOutOfSeq(RISCV::X5, *TRI);
2901 if (MI.modifiesRegister(RISCV::X5, TRI) ||
2902 MI.getDesc().hasImplicitDefOfPhysReg(RISCV::X5))
2938 MBB.addLiveIn(RISCV::X5);
2941 MBB.insert(MBB.end(), BuildMI(MF, DebugLoc(), get(RISCV::JALR))
2942 .addReg(RISCV::X0, RegState::Define)
2943 .addReg(RISCV::X5)
2953 BuildMI(MF, DebugLoc(), get(RISCV::PseudoCALLReg), RISCV::X5)
2969 if (MI.getOpcode() == RISCV::ADDI && MI.getOperand(1).isReg() &&
2997 if ((MI.getOpcode() == RISCV::VSETVLI || MI.getOpcode() == RISCV::VSETIVLI ||
2998 MI.getOpcode() == RISCV::PseudoVSETVLI ||
2999 MI.getOpcode() == RISCV::PseudoVSETIVLI ||
3000 MI.getOpcode() == RISCV::PseudoVSETVLIX0) &&
3025 RISCV::Pseudo##OP##_##LMUL
3028 RISCV::Pseudo##OP##_##LMUL##_MASK
3069 RISCV::PseudoV##OP##_##TYPE##_##LMUL
3091 RISCV::PseudoV##OP##_##TYPE##_##LMUL##_##SEW
3126 case RISCV::TH_MVEQZ:
3127 case RISCV::TH_MVNEZ:
3131 if (MI.getOperand(2).getReg() == RISCV::X0)
3135 case RISCV::TH_MULA:
3136 case RISCV::TH_MULAW:
3137 case RISCV::TH_MULAH:
3138 case RISCV::TH_MULS:
3139 case RISCV::TH_MULSW:
3140 case RISCV::TH_MULSH:
3143 case RISCV::PseudoCCMOVGPRNoX0:
3144 case RISCV::PseudoCCMOVGPR:
3282 case RISCV::PseudoV##OLDOP##_##TYPE##_##LMUL: \
3283 Opc = RISCV::PseudoV##NEWOP##_##TYPE##_##LMUL; \
3311 case RISCV::PseudoV##OLDOP##_##TYPE##_##LMUL##_##SEW: \
3312 Opc = RISCV::PseudoV##NEWOP##_##TYPE##_##LMUL##_##SEW; \
3354 case RISCV::TH_MVEQZ:
3355 case RISCV::TH_MVNEZ: {
3357 WorkingMI.setDesc(get(MI.getOpcode() == RISCV::TH_MVEQZ ? RISCV::TH_MVNEZ
3358 : RISCV::TH_MVEQZ));
3362 case RISCV::PseudoCCMOVGPRNoX0:
3363 case RISCV::PseudoCCMOVGPR: {
3482 RISCV::PseudoV##OP##_##LMUL##_TIED
3496 case RISCV::PseudoV##OP##_##LMUL##_TIED: \
3497 NewOpc = RISCV::PseudoV##OP##_##LMUL; \
3513 RISCV::PseudoV##OP##_##LMUL##_##SEW##_TIED
3527 case RISCV::PseudoV##OP##_##LMUL##_##SEW##_TIED: \
3528 NewOpc = RISCV::PseudoV##OP##_##LMUL##_##SEW; \
3667 BuildMI(MBB, II, DL, get(RISCV::SLLI), DestReg)
3679 Opc = RISCV::SH3ADD;
3682 Opc = RISCV::SH2ADD;
3685 Opc = RISCV::SH1ADD;
3691 BuildMI(MBB, II, DL, get(RISCV::SLLI), DestReg)
3700 Register ScaledRegister = MRI.createVirtualRegister(&RISCV::GPRRegClass);
3702 BuildMI(MBB, II, DL, get(RISCV::SLLI), ScaledRegister)
3706 BuildMI(MBB, II, DL, get(RISCV::ADD), DestReg)
3711 Register ScaledRegister = MRI.createVirtualRegister(&RISCV::GPRRegClass);
3713 BuildMI(MBB, II, DL, get(RISCV::SLLI), ScaledRegister)
3717 BuildMI(MBB, II, DL, get(RISCV::SUB), DestReg)
3722 Register N = MRI.createVirtualRegister(&RISCV::GPRRegClass);
3724 BuildMI(MBB, II, DL, get(RISCV::MUL), DestReg)
3734 BuildMI(MBB, II, DL, get(RISCV::SLLI), DestReg)
3741 Acc = MRI.createVirtualRegister(&RISCV::GPRRegClass);
3746 BuildMI(MBB, II, DL, get(RISCV::ADD), Acc)
3756 BuildMI(MBB, II, DL, get(RISCV::ADD), DestReg)
3772 bool RISCV::isSEXT_W(const MachineInstr &MI) {
3773 return MI.getOpcode() == RISCV::ADDIW && MI.getOperand(1).isReg() &&
3778 bool RISCV::isZEXT_W(const MachineInstr &MI) {
3779 return MI.getOpcode() == RISCV::ADD_UW && MI.getOperand(1).isReg() &&
3780 MI.getOperand(2).isReg() && MI.getOperand(2).getReg() == RISCV::X0;
3784 bool RISCV::isZEXT_B(const MachineInstr &MI) {
3785 return MI.getOpcode() == RISCV::ANDI && MI.getOperand(1).isReg() &&
3793 case RISCV::VS1R_V:
3794 case RISCV::VS2R_V:
3795 case RISCV::VS4R_V:
3796 case RISCV::VS8R_V:
3797 case RISCV::VL1RE8_V:
3798 case RISCV::VL2RE8_V:
3799 case RISCV::VL4RE8_V:
3800 case RISCV::VL8RE8_V:
3801 case RISCV::VL1RE16_V:
3802 case RISCV::VL2RE16_V:
3803 case RISCV::VL4RE16_V:
3804 case RISCV::VL8RE16_V:
3805 case RISCV::VL1RE32_V:
3806 case RISCV::VL2RE32_V:
3807 case RISCV::VL4RE32_V:
3808 case RISCV::VL8RE32_V:
3809 case RISCV::VL1RE64_V:
3810 case RISCV::VL2RE64_V:
3811 case RISCV::VL4RE64_V:
3812 case RISCV::VL8RE64_V:
3817 bool RISCV::isRVVSpill(const MachineInstr &MI) {
3828 RISCV::isRVVSpillForZvlsseg(unsigned Opcode) {
3832 case RISCV::PseudoVSPILL2_M1:
3833 case RISCV::PseudoVRELOAD2_M1:
3835 case RISCV::PseudoVSPILL2_M2:
3836 case RISCV::PseudoVRELOAD2_M2:
3838 case RISCV::PseudoVSPILL2_M4:
3839 case RISCV::PseudoVRELOAD2_M4:
3841 case RISCV::PseudoVSPILL3_M1:
3842 case RISCV::PseudoVRELOAD3_M1:
3844 case RISCV::PseudoVSPILL3_M2:
3845 case RISCV::PseudoVRELOAD3_M2:
3847 case RISCV::PseudoVSPILL4_M1:
3848 case RISCV::PseudoVRELOAD4_M1:
3850 case RISCV::PseudoVSPILL4_M2:
3851 case RISCV::PseudoVRELOAD4_M2:
3853 case RISCV::PseudoVSPILL5_M1:
3854 case RISCV::PseudoVRELOAD5_M1:
3856 case RISCV::PseudoVSPILL6_M1:
3857 case RISCV::PseudoVRELOAD6_M1:
3859 case RISCV::PseudoVSPILL7_M1:
3860 case RISCV::PseudoVRELOAD7_M1:
3862 case RISCV::PseudoVSPILL8_M1:
3863 case RISCV::PseudoVRELOAD8_M1:
3868 bool RISCV::isFaultFirstLoad(const MachineInstr &MI) {
3870 MI.modifiesRegister(RISCV::VL, /*TRI=*/nullptr) && !MI.isInlineAsm();
3873 bool RISCV::hasEqualFRM(const MachineInstr &MI1, const MachineInstr &MI2) {
3875 RISCV::getNamedOperandIdx(MI1.getOpcode(), RISCV::OpName::frm);
3877 RISCV::getNamedOperandIdx(MI2.getOpcode(), RISCV::OpName::frm);
3886 RISCV::getVectorLowDemandedScalarBits(uint16_t Opcode, unsigned Log2SEW) {
3893 case RISCV::VSLL_VX:
3894 case RISCV::VSRL_VX:
3895 case RISCV::VSRA_VX:
3897 case RISCV::VSSRL_VX:
3898 case RISCV::VSSRA_VX:
3903 case RISCV::VNSRL_WX:
3904 case RISCV::VNSRA_WX:
3906 case RISCV::VNCLIPU_WX:
3907 case RISCV::VNCLIP_WX:
3912 case RISCV::VADD_VX:
3913 case RISCV::VSUB_VX:
3914 case RISCV::VRSUB_VX:
3916 case RISCV::VWADDU_VX:
3917 case RISCV::VWSUBU_VX:
3918 case RISCV::VWADD_VX:
3919 case RISCV::VWSUB_VX:
3920 case RISCV::VWADDU_WX:
3921 case RISCV::VWSUBU_WX:
3922 case RISCV::VWADD_WX:
3923 case RISCV::VWSUB_WX:
3925 case RISCV::VADC_VXM:
3926 case RISCV::VADC_VIM:
3927 case RISCV::VMADC_VXM:
3928 case RISCV::VMADC_VIM:
3929 case RISCV::VMADC_VX:
3930 case RISCV::VSBC_VXM:
3931 case RISCV::VMSBC_VXM:
3932 case RISCV::VMSBC_VX:
3934 case RISCV::VAND_VX:
3935 case RISCV::VOR_VX:
3936 case RISCV::VXOR_VX:
3938 case RISCV::VMSEQ_VX:
3939 case RISCV::VMSNE_VX:
3940 case RISCV::VMSLTU_VX:
3941 case RISCV::VMSLT_VX:
3942 case RISCV::VMSLEU_VX:
3943 case RISCV::VMSLE_VX:
3944 case RISCV::VMSGTU_VX:
3945 case RISCV::VMSGT_VX:
3947 case RISCV::VMINU_VX:
3948 case RISCV::VMIN_VX:
3949 case RISCV::VMAXU_VX:
3950 case RISCV::VMAX_VX:
3952 case RISCV::VMUL_VX:
3953 case RISCV::VMULH_VX:
3954 case RISCV::VMULHU_VX:
3955 case RISCV::VMULHSU_VX:
3957 case RISCV::VDIVU_VX:
3958 case RISCV::VDIV_VX:
3959 case RISCV::VREMU_VX:
3960 case RISCV::VREM_VX:
3962 case RISCV::VWMUL_VX:
3963 case RISCV::VWMULU_VX:
3964 case RISCV::VWMULSU_VX:
3966 case RISCV::VMACC_VX:
3967 case RISCV::VNMSAC_VX:
3968 case RISCV::VMADD_VX:
3969 case RISCV::VNMSUB_VX:
3971 case RISCV::VWMACCU_VX:
3972 case RISCV::VWMACC_VX:
3973 case RISCV::VWMACCSU_VX:
3974 case RISCV::VWMACCUS_VX:
3976 case RISCV::VMERGE_VXM:
3978 case RISCV::VMV_V_X:
3980 case RISCV::VSADDU_VX:
3981 case RISCV::VSADD_VX:
3982 case RISCV::VSSUBU_VX:
3983 case RISCV::VSSUB_VX:
3985 case RISCV::VAADDU_VX:
3986 case RISCV::VAADD_VX:
3987 case RISCV::VASUBU_VX:
3988 case RISCV::VASUB_VX:
3990 case RISCV::VSMUL_VX:
3992 case RISCV::VMV_S_X:
3997 unsigned RISCV::getRVVMCOpcode(unsigned RVVPseudoOpcode) {