Lines Matching full:riscv
28 #define DEBUG_TYPE "riscv-isel"
32 "riscv-use-rematerializable-movimm", cl::Hidden,
37 namespace llvm::RISCV {
47 } // namespace llvm::RISCV
67 SDValue VL = CurDAG->getRegister(RISCV::X0, Subtarget->getXLenVT());
114 CurDAG->getRegister(RISCV::X0, MVT::i64),
177 SDValue SrcReg = CurDAG->getRegister(RISCV::X0, VT);
187 CurDAG->getRegister(RISCV::X0, VT));
211 CurDAG->getMachineNode(RISCV::PseudoMovImm, DL, VT,
228 CurDAG->getMachineNode(RISCV::SLLI, DL, VT, Lo,
242 RISCV::VRN2M1RegClassID, RISCV::VRN3M1RegClassID, RISCV::VRN4M1RegClassID,
243 RISCV::VRN5M1RegClassID, RISCV::VRN6M1RegClassID, RISCV::VRN7M1RegClassID,
244 RISCV::VRN8M1RegClassID};
245 static const unsigned M2TupleRegClassIDs[] = {RISCV::VRN2M2RegClassID,
246 RISCV::VRN3M2RegClassID,
247 RISCV::VRN4M2RegClassID};
260 static_assert(RISCV::sub_vrm1_7 == RISCV::sub_vrm1_0 + 7,
262 SubReg0 = RISCV::sub_vrm1_0;
266 static_assert(RISCV::sub_vrm2_3 == RISCV::sub_vrm2_0 + 3,
268 SubReg0 = RISCV::sub_vrm2_0;
272 static_assert(RISCV::sub_vrm4_1 == RISCV::sub_vrm4_0 + 1,
274 SubReg0 = RISCV::sub_vrm4_0;
275 RegClassID = RISCV::VRN2M4RegClassID;
311 Chain = CurDAG->getCopyToReg(Chain, DL, RISCV::V0, Mask, SDValue());
313 Operands.push_back(CurDAG->getRegister(RISCV::V0, Mask.getValueType()));
359 const RISCV::VLSEGPseudo *P =
360 RISCV::getVLSEGPseudo(NF, IsMasked, IsStrided, /*FF*/ false, Log2SEW,
400 const RISCV::VLSEGPseudo *P =
401 RISCV::getVLSEGPseudo(NF, IsMasked, /*Strided*/ false, /*FF*/ true,
452 const RISCV::VLXSEGPseudo *P = RISCV::getVLXSEGPseudo(
493 const RISCV::VSSEGPseudo *P = RISCV::getVSSEGPseudo(
534 const RISCV::VSXSEGPseudo *P = RISCV::getVSXSEGPseudo(
577 unsigned Opcode = RISCV::PseudoVSETVLI;
584 VLOperand = CurDAG->getRegister(RISCV::X0, XLenVT);
585 Opcode = RISCV::PseudoVSETVLIX0;
593 ReplaceNode(Node, CurDAG->getMachineNode(RISCV::PseudoVSETIVLI, DL,
665 case ISD::AND: BinOpc = RISCV::ANDI; break;
666 case ISD::OR: BinOpc = RISCV::ORI; break;
667 case ISD::XOR: BinOpc = RISCV::XORI; break;
670 unsigned ShOpc = SignExt ? RISCV::SLLIW : RISCV::SLLI;
697 return CurDAG->getMachineNode(RISCV::TH_EXT, DL, VT, N0.getOperand(0),
784 Opcode = IsZExt ? RISCV::TH_LBUIB : RISCV::TH_LBIB;
786 Opcode = IsZExt ? RISCV::TH_LBUIA : RISCV::TH_LBIA;
788 Opcode = IsZExt ? RISCV::TH_LHUIB : RISCV::TH_LHIB;
790 Opcode = IsZExt ? RISCV::TH_LHUIA : RISCV::TH_LHIA;
792 Opcode = IsZExt ? RISCV::TH_LWUIB : RISCV::TH_LWIB;
794 Opcode = IsZExt ? RISCV::TH_LWUIA : RISCV::TH_LWIA;
796 Opcode = RISCV::TH_LDIB;
798 Opcode = RISCV::TH_LDIA;
844 Opcode = IntNo == Intrinsic::riscv_sf_vc_x_se ? RISCV::PseudoVC_X_SE_MF8
845 : RISCV::PseudoVC_I_SE_MF8;
848 Opcode = IntNo == Intrinsic::riscv_sf_vc_x_se ? RISCV::PseudoVC_X_SE_MF4
849 : RISCV::PseudoVC_I_SE_MF4;
852 Opcode = IntNo == Intrinsic::riscv_sf_vc_x_se ? RISCV::PseudoVC_X_SE_MF2
853 : RISCV::PseudoVC_I_SE_MF2;
856 Opcode = IntNo == Intrinsic::riscv_sf_vc_x_se ? RISCV::PseudoVC_X_SE_M1
857 : RISCV::PseudoVC_I_SE_M1;
860 Opcode = IntNo == Intrinsic::riscv_sf_vc_x_se ? RISCV::PseudoVC_X_SE_M2
861 : RISCV::PseudoVC_I_SE_M2;
864 Opcode = IntNo == Intrinsic::riscv_sf_vc_x_se ? RISCV::PseudoVC_X_SE_M4
865 : RISCV::PseudoVC_I_SE_M4;
868 Opcode = IntNo == Intrinsic::riscv_sf_vc_x_se ? RISCV::PseudoVC_X_SE_M8
869 : RISCV::PseudoVC_I_SE_M8;
900 CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, RISCV::X0, VT);
935 Opc = RISCV::FLI_H;
936 FNegOpc = RISCV::FSGNJN_H;
939 Opc = RISCV::FLI_S;
940 FNegOpc = RISCV::FSGNJN_S;
943 Opc = RISCV::FLI_D;
944 FNegOpc = RISCV::FSGNJN_D;
962 Imm = CurDAG->getRegister(RISCV::X0, XLenVT);
975 Opc = RISCV::FMV_H_X;
978 Opc = Subtarget->hasStdExtZhinxmin() ? RISCV::COPY : RISCV::FMV_H_X;
981 Opc = Subtarget->hasStdExtZfinx() ? RISCV::COPY : RISCV::FMV_W_X;
988 Opc = HasZdinx ? RISCV::COPY : RISCV::FMV_D_X;
990 Opc = HasZdinx ? RISCV::FCVT_D_W_IN32X : RISCV::FCVT_D_W;
995 if (Opc == RISCV::FCVT_D_W_IN32X || Opc == RISCV::FCVT_D_W)
1004 Opc = RISCV::FSGNJN_D;
1006 Opc = Is64Bit ? RISCV::FSGNJN_D_INX : RISCV::FSGNJN_D_IN32X;
1021 CurDAG->getTargetConstant(RISCV::GPRPairRegClassID, DL, MVT::i32),
1023 CurDAG->getTargetConstant(RISCV::sub_gpr_even, DL, MVT::i32),
1025 CurDAG->getTargetConstant(RISCV::sub_gpr_odd, DL, MVT::i32)};
1037 SDValue Lo = CurDAG->getTargetExtractSubreg(RISCV::sub_gpr_even, DL, VT,
1043 SDValue Hi = CurDAG->getTargetExtractSubreg(RISCV::sub_gpr_odd, DL, VT,
1059 SDNode *Lo = CurDAG->getMachineNode(RISCV::FMV_X_W_FPR64, DL, VT,
1064 SDNode *Hi = CurDAG->getMachineNode(RISCV::FMVH_X_D, DL, VT,
1091 RISCV::SRLIW, DL, VT, N0->getOperand(0),
1094 RISCV::SLLI, DL, VT, SDValue(SRLIW, 0),
1120 RISCV::SRLIW, DL, VT, N0->getOperand(0),
1123 RISCV::SLLI, DL, VT, SDValue(SRLIW, 0),
1146 Subtarget->is64Bit() ? RISCV::SRLIW : RISCV::SRLI, DL, VT,
1159 Subtarget->hasStdExtZbs() ? RISCV::BEXTI : RISCV::TH_TST, DL, VT,
1167 CurDAG->getMachineNode(RISCV::SLLI, DL, VT, N0->getOperand(0),
1170 RISCV::SRLI, DL, VT, SDValue(SLLI, 0),
1201 CurDAG->getMachineNode(RISCV::SLLI, DL, VT, N0->getOperand(0),
1204 RISCV::SRAI, DL, VT, SDValue(SLLI, 0),
1232 RISCV::TH_EXTU, DL, VT, X, CurDAG->getTargetConstant(Msb, DL, VT),
1275 RISCV::SRLIW, DL, VT, X, CurDAG->getTargetConstant(C2, DL, VT));
1289 CurDAG->getMachineNode(RISCV::SRAIW, DL, VT, X.getOperand(0),
1292 RISCV::SRLIW, DL, VT, SDValue(SRAIW, 0),
1319 RISCV::SLLI, DL, VT, X,
1322 RISCV::SRLI, DL, VT, SDValue(SLLI, 0),
1340 CurDAG->getMachineNode(RISCV::SLLI_UW, DL, VT, X,
1349 RISCV::SLLI, DL, VT, X,
1352 RISCV::SRLI, DL, VT, SDValue(SLLI, 0),
1367 unsigned SrliOpc = RISCV::SRLI;
1372 SrliOpc = RISCV::SRLIW;
1379 RISCV::SLLI, DL, VT, SDValue(SRLI, 0),
1388 RISCV::SRLIW, DL, VT, X,
1391 RISCV::SLLI, DL, VT, SDValue(SRLIW, 0),
1405 RISCV::SRLI, DL, VT, X,
1408 RISCV::SLLI, DL, VT, SDValue(SRLI, 0),
1416 RISCV::SRLIW, DL, VT, X,
1419 RISCV::SLLI, DL, VT, SDValue(SRLIW, 0),
1429 RISCV::SRLI, DL, VT, X,
1432 RISCV::SLLI_UW, DL, VT, SDValue(SRLI, 0),
1520 CurDAG->getMachineNode(RISCV::SLLI, DL, VT, N0.getOperand(0),
1522 SDNode *MULHU = CurDAG->getMachineNode(RISCV::MULHU, DL, VT,
1556 Opcode = RISCV::CV_LB_ri_inc;
1558 Opcode = RISCV::CV_LBU_ri_inc;
1560 Opcode = RISCV::CV_LB_rr_inc;
1562 Opcode = RISCV::CV_LBU_rr_inc;
1566 Opcode = RISCV::CV_LH_ri_inc;
1568 Opcode = RISCV::CV_LHU_ri_inc;
1570 Opcode = RISCV::CV_LH_rr_inc;
1572 Opcode = RISCV::CV_LHU_rr_inc;
1576 Opcode = RISCV::CV_LW_ri_inc;
1578 Opcode = RISCV::CV_LW_rr_inc;
1624 VMSLTOpcode = IsUnsigned ? RISCV::PseudoVMSLTU_VX_##suffix \
1625 : RISCV::PseudoVMSLT_VX_##suffix; \
1626 VMNANDOpcode = RISCV::PseudoVMNAND_MM_##suffix; \
1627 VMSetOpcode = RISCV::PseudoVMSET_M_##suffix_b; \
1684 VMSLTOpcode = IsUnsigned ? RISCV::PseudoVMSLTU_VX_##suffix \
1685 : RISCV::PseudoVMSLT_VX_##suffix; \
1686 VMSLTMaskOpcode = IsUnsigned ? RISCV::PseudoVMSLTU_VX_##suffix##_MASK \
1687 : RISCV::PseudoVMSLT_VX_##suffix##_MASK; \
1704 VMXOROpcode = RISCV::PseudoVMXOR_MM_##suffix; \
1705 VMANDNOpcode = RISCV::PseudoVMANDN_MM_##suffix; \
1706 VMOROpcode = RISCV::PseudoVMOR_MM_##suffix; \
1753 RISCV::V0, Mask, SDValue());
1755 SDValue V0 = CurDAG->getRegister(RISCV::V0, VT);
1910 const RISCV::VLX_VSXPseudo *P = RISCV::getVLXPseudo(
1957 const RISCV::VLEPseudo *P =
1958 RISCV::getVLEPseudo(IsMasked, IsStrided, /*FF*/ false, Log2SEW,
1984 const RISCV::VLEPseudo *P =
1985 RISCV::getVLEPseudo(IsMasked, /*Strided*/ false, /*FF*/ true,
2108 const RISCV::VLX_VSXPseudo *P = RISCV::getVSXPseudo(
2141 const RISCV::VSEPseudo *P = RISCV::getVSEPseudo(
2182 TypeSize VecRegSize = TypeSize::getScalable(RISCV::RVVBitsPerBlock);
2217 if (SubRegIdx == RISCV::NoSubRegister) {
2264 if (SubRegIdx == RISCV::NoSubRegister) {
2328 Operands.push_back(CurDAG->getRegister(RISCV::X0, XLenVT));
2334 const RISCV::VLEPseudo *P = RISCV::getVLEPseudo(
2467 CurDAG->getMachineNode(RISCV::LUI, DL, VT,
2471 Base = CurDAG->getRegister(RISCV::X0, VT);
2482 if (Seq.back().getOpcode() != RISCV::ADDI)
2553 Base = SDValue(CurDAG->getMachineNode(RISCV::ADDI, SDLoc(Addr), VT,
2568 Base = CurDAG->getRegister(RISCV::X0, VT);
2635 CurDAG->getMachineNode(RISCV::ADDI, DL, VT, Addr.getOperand(0),
2653 CurDAG->getMachineNode(RISCV::ADD, DL, VT, Addr.getOperand(0), Base),
2708 RISCV::ADDI, DL, VT, Addr.getOperand(0),
2719 CurDAG->getMachineNode(RISCV::ADD, DL, VT, Addr.getOperand(0), Base),
2795 SDValue Zero = CurDAG->getRegister(RISCV::X0, VT);
2796 unsigned NegOpc = VT == MVT::i64 ? RISCV::SUBW : RISCV::SUB;
2808 CurDAG->getMachineNode(RISCV::XORI, DL, VT, ShAmt.getOperand(1),
2858 RISCV::XORI, DL, N->getValueType(0), LHS,
2868 RISCV::ADDI, DL, N->getValueType(0), LHS,
2878 CurDAG->getMachineNode(RISCV::XOR, DL, N->getValueType(0), LHS, RHS), 0);
2959 RISCV::SRLI, DL, VT, N0.getOperand(0),
2972 RISCV::SRLI, DL, VT, N0.getOperand(0),
3000 RISCV::SRLIW, DL, VT, N0.getOperand(0),
3012 RISCV::SRLIW, DL, VT, N0.getOperand(0),
3049 RISCV::SLLI, DL, VT, N0.getOperand(0),
3064 unsigned MCOpcode = RISCV::getRVVMCOpcode(User->getMachineOpcode());
3087 RISCV::getVectorLowDemandedScalarBits(MCOpcode, Log2SEW);
3130 case RISCV::ADDW:
3131 case RISCV::ADDIW:
3132 case RISCV::SUBW:
3133 case RISCV::MULW:
3134 case RISCV::SLLW:
3135 case RISCV::SLLIW:
3136 case RISCV::SRAW:
3137 case RISCV::SRAIW:
3138 case RISCV::SRLW:
3139 case RISCV::SRLIW:
3140 case RISCV::DIVW:
3141 case RISCV::DIVUW:
3142 case RISCV::REMW:
3143 case RISCV::REMUW:
3144 case RISCV::ROLW:
3145 case RISCV::RORW:
3146 case RISCV::RORIW:
3147 case RISCV::CLZW:
3148 case RISCV::CTZW:
3149 case RISCV::CPOPW:
3150 case RISCV::SLLI_UW:
3151 case RISCV::FMV_W_X:
3152 case RISCV::FCVT_H_W:
3153 case RISCV::FCVT_H_WU:
3154 case RISCV::FCVT_S_W:
3155 case RISCV::FCVT_S_WU:
3156 case RISCV::FCVT_D_W:
3157 case RISCV::FCVT_D_WU:
3158 case RISCV::TH_REVW:
3159 case RISCV::TH_SRRIW:
3163 case RISCV::SLL:
3164 case RISCV::SRA:
3165 case RISCV::SRL:
3166 case RISCV::ROL:
3167 case RISCV::ROR:
3168 case RISCV::BSET:
3169 case RISCV::BCLR:
3170 case RISCV::BINV:
3175 case RISCV::SLLI:
3180 case RISCV::ANDI:
3184 case RISCV::ORI: {
3190 case RISCV::AND:
3191 case RISCV::OR:
3192 case RISCV::XOR:
3193 case RISCV::XORI:
3194 case RISCV::ANDN:
3195 case RISCV::ORN:
3196 case RISCV::XNOR:
3197 case RISCV::SH1ADD:
3198 case RISCV::SH2ADD:
3199 case RISCV::SH3ADD:
3204 case RISCV::SRLI: {
3213 case RISCV::SEXT_B:
3214 case RISCV::PACKH:
3218 case RISCV::SEXT_H:
3219 case RISCV::FMV_H_X:
3220 case RISCV::ZEXT_H_RV32:
3221 case RISCV::ZEXT_H_RV64:
3222 case RISCV::PACKW:
3226 case RISCV::PACK:
3230 case RISCV::ADD_UW:
3231 case RISCV::SH1ADD_UW:
3232 case RISCV::SH2ADD_UW:
3233 case RISCV::SH3ADD_UW:
3239 case RISCV::SB:
3243 case RISCV::SH:
3247 case RISCV::SW:
3289 VL = CurDAG->getTargetConstant(RISCV::VLMaxSentinel, SDLoc(N),
3292 cast<RegisterSDNode>(N)->getReg() == RISCV::X0) {
3297 VL = CurDAG->getTargetConstant(RISCV::VLMaxSentinel, SDLoc(N),
3461 if (N->getMachineOpcode() != RISCV::ADDIW ||
3472 case RISCV::ADD:
3473 case RISCV::ADDI:
3474 case RISCV::SUB:
3475 case RISCV::MUL:
3476 case RISCV::SLLI: {
3483 case RISCV::ADD: Opc = RISCV::ADDW; break;
3484 case RISCV::ADDI: Opc = RISCV::ADDIW; break;
3485 case RISCV::SUB: Opc = RISCV::SUBW; break;
3486 case RISCV::MUL: Opc = RISCV::MULW; break;
3487 case RISCV::SLLI: Opc = RISCV::SLLIW; break;
3494 if (N0.getMachineOpcode() == RISCV::SLLI &&
3504 case RISCV::ADDW:
3505 case RISCV::ADDIW:
3506 case RISCV::SUBW:
3507 case RISCV::MULW:
3508 case RISCV::SLLIW:
3509 case RISCV::PACKW:
3510 case RISCV::TH_MULAW:
3511 case RISCV::TH_MULAH:
3512 case RISCV::TH_MULSW:
3513 case RISCV::TH_MULSH:
3532 cast<RegisterSDNode>(MaskOp)->getReg() != RISCV::V0)
3543 cast<RegisterSDNode>(Glued->getOperand(1))->getReg() != RISCV::V0)
3551 MaskSetter->getMachineOpcode() == RISCV::COPY_TO_REGCLASS)
3564 return Opc == RISCV::PseudoVMSET_M_B1 || Opc == RISCV::PseudoVMSET_M_B16 ||
3565 Opc == RISCV::PseudoVMSET_M_B2 || Opc == RISCV::PseudoVMSET_M_B32 ||
3566 Opc == RISCV::PseudoVMSET_M_B4 || Opc == RISCV::PseudoVMSET_M_B64 ||
3567 Opc == RISCV::PseudoVMSET_M_B8;
3600 const RISCV::RISCVMaskedPseudoInfo *I =
3601 RISCV::getMaskedPseudoInfo(N->getMachineOpcode());
3651 return RISCV::getRVVMCOpcode(N->getMachineOpcode()) == RISCV::VMERGE_VVM;
3655 return RISCV::getRVVMCOpcode(N->getMachineOpcode()) == RISCV::VMV_V_V;
3661 return RISCV::PseudoVMSET_M_B1;
3663 return RISCV::PseudoVMSET_M_B2;
3665 return RISCV::PseudoVMSET_M_B4;
3667 return RISCV::PseudoVMSET_M_B8;
3669 return RISCV::PseudoVMSET_M_B16;
3671 return RISCV::PseudoVMSET_M_B32;
3673 return RISCV::PseudoVMSET_M_B64;
3721 assert(!Mask || cast<RegisterSDNode>(Mask)->getReg() == RISCV::V0);
3749 const RISCV::RISCVMaskedPseudoInfo *Info =
3750 RISCV::lookupMaskedIntrinsicByUnmasked(TrueOpc);
3752 Info = RISCV::getMaskedPseudoInfo(TrueOpc);
3875 RISCV::V0, AllOnesMask, SDValue());
3876 Mask = CurDAG->getRegister(RISCV::V0, MaskVT);
3984 Ops.push_back(CurDAG->getRegister(RISCV::NoRegister, N->getValueType(0)));
4001 // This pass converts a legalized DAG into a RISCV-specific DAG, ready