diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -14035,165 +14035,42 @@ return emitQuietFCMP(MI, BB, RISCV::FLT_D_IN32X, RISCV::FEQ_D_IN32X, Subtarget); - // ========================================================================= - // VFCVT - // ========================================================================= - - case RISCV::PseudoVFCVT_RM_X_F_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_X_F_V_M1_MASK); - case RISCV::PseudoVFCVT_RM_X_F_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_X_F_V_M2_MASK); - case RISCV::PseudoVFCVT_RM_X_F_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_X_F_V_M4_MASK); - case RISCV::PseudoVFCVT_RM_X_F_V_M8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_X_F_V_M8_MASK); - case RISCV::PseudoVFCVT_RM_X_F_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_X_F_V_MF2_MASK); - case RISCV::PseudoVFCVT_RM_X_F_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_X_F_V_MF4_MASK); - - case RISCV::PseudoVFCVT_RM_XU_F_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_XU_F_V_M1_MASK); - case RISCV::PseudoVFCVT_RM_XU_F_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_XU_F_V_M2_MASK); - case RISCV::PseudoVFCVT_RM_XU_F_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_XU_F_V_M4_MASK); - case RISCV::PseudoVFCVT_RM_XU_F_V_M8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_XU_F_V_M8_MASK); - case RISCV::PseudoVFCVT_RM_XU_F_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_XU_F_V_MF2_MASK); - case RISCV::PseudoVFCVT_RM_XU_F_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_XU_F_V_MF4_MASK); - - case RISCV::PseudoVFCVT_RM_F_XU_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_XU_V_M1_MASK); - case RISCV::PseudoVFCVT_RM_F_XU_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_XU_V_M2_MASK); - case RISCV::PseudoVFCVT_RM_F_XU_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_XU_V_M4_MASK); - case RISCV::PseudoVFCVT_RM_F_XU_V_M8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_XU_V_M8_MASK); - case RISCV::PseudoVFCVT_RM_F_XU_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_XU_V_MF2_MASK); - case RISCV::PseudoVFCVT_RM_F_XU_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_XU_V_MF4_MASK); - - case RISCV::PseudoVFCVT_RM_F_X_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_X_V_M1_MASK); - case RISCV::PseudoVFCVT_RM_F_X_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_X_V_M2_MASK); - case RISCV::PseudoVFCVT_RM_F_X_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_X_V_M4_MASK); - case RISCV::PseudoVFCVT_RM_F_X_V_M8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_X_V_M8_MASK); - case RISCV::PseudoVFCVT_RM_F_X_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_X_V_MF2_MASK); - case RISCV::PseudoVFCVT_RM_F_X_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFCVT_F_X_V_MF4_MASK); - - // ========================================================================= - // VFWCVT - // ========================================================================= - - case RISCV::PseudoVFWCVT_RM_XU_F_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_XU_F_V_M1_MASK); - case RISCV::PseudoVFWCVT_RM_XU_F_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_XU_F_V_M2_MASK); - case RISCV::PseudoVFWCVT_RM_XU_F_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_XU_F_V_M4_MASK); - case RISCV::PseudoVFWCVT_RM_XU_F_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_XU_F_V_MF2_MASK); - case RISCV::PseudoVFWCVT_RM_XU_F_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_XU_F_V_MF4_MASK); - - case RISCV::PseudoVFWCVT_RM_X_F_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_X_F_V_M1_MASK); - case RISCV::PseudoVFWCVT_RM_X_F_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_X_F_V_M2_MASK); - case RISCV::PseudoVFWCVT_RM_X_F_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_X_F_V_M4_MASK); - case RISCV::PseudoVFWCVT_RM_X_F_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_X_F_V_MF2_MASK); - case RISCV::PseudoVFWCVT_RM_X_F_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_X_F_V_MF4_MASK); - - case RISCV::PseudoVFWCVT_RM_F_XU_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_XU_V_M1_MASK); - case RISCV::PseudoVFWCVT_RM_F_XU_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_XU_V_M2_MASK); - case RISCV::PseudoVFWCVT_RM_F_XU_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_XU_V_M4_MASK); - case RISCV::PseudoVFWCVT_RM_F_XU_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_XU_V_MF2_MASK); - case RISCV::PseudoVFWCVT_RM_F_XU_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_XU_V_MF4_MASK); - case RISCV::PseudoVFWCVT_RM_F_XU_V_MF8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_XU_V_MF8_MASK); - - case RISCV::PseudoVFWCVT_RM_F_X_V_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_X_V_M1_MASK); - case RISCV::PseudoVFWCVT_RM_F_X_V_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_X_V_M2_MASK); - case RISCV::PseudoVFWCVT_RM_F_X_V_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_X_V_M4_MASK); - case RISCV::PseudoVFWCVT_RM_F_X_V_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_X_V_MF2_MASK); - case RISCV::PseudoVFWCVT_RM_F_X_V_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_X_V_MF4_MASK); - case RISCV::PseudoVFWCVT_RM_F_X_V_MF8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFWCVT_F_X_V_MF8_MASK); - - // ========================================================================= - // VFNCVT - // ========================================================================= - - case RISCV::PseudoVFNCVT_RM_XU_F_W_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_XU_F_W_M1_MASK); - case RISCV::PseudoVFNCVT_RM_XU_F_W_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_XU_F_W_M2_MASK); - case RISCV::PseudoVFNCVT_RM_XU_F_W_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_XU_F_W_M4_MASK); - case RISCV::PseudoVFNCVT_RM_XU_F_W_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_XU_F_W_MF2_MASK); - case RISCV::PseudoVFNCVT_RM_XU_F_W_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_XU_F_W_MF4_MASK); - case RISCV::PseudoVFNCVT_RM_XU_F_W_MF8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_XU_F_W_MF8_MASK); - - case RISCV::PseudoVFNCVT_RM_X_F_W_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_X_F_W_M1_MASK); - case RISCV::PseudoVFNCVT_RM_X_F_W_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_X_F_W_M2_MASK); - case RISCV::PseudoVFNCVT_RM_X_F_W_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_X_F_W_M4_MASK); - case RISCV::PseudoVFNCVT_RM_X_F_W_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_X_F_W_MF2_MASK); - case RISCV::PseudoVFNCVT_RM_X_F_W_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_X_F_W_MF4_MASK); - case RISCV::PseudoVFNCVT_RM_X_F_W_MF8_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_X_F_W_MF8_MASK); - - case RISCV::PseudoVFNCVT_RM_F_XU_W_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_XU_W_M1_MASK); - case RISCV::PseudoVFNCVT_RM_F_XU_W_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_XU_W_M2_MASK); - case RISCV::PseudoVFNCVT_RM_F_XU_W_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_XU_W_M4_MASK); - case RISCV::PseudoVFNCVT_RM_F_XU_W_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_XU_W_MF2_MASK); - case RISCV::PseudoVFNCVT_RM_F_XU_W_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_XU_W_MF4_MASK); - - case RISCV::PseudoVFNCVT_RM_F_X_W_M1_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_X_W_M1_MASK); - case RISCV::PseudoVFNCVT_RM_F_X_W_M2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_X_W_M2_MASK); - case RISCV::PseudoVFNCVT_RM_F_X_W_M4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_X_W_M4_MASK); - case RISCV::PseudoVFNCVT_RM_F_X_W_MF2_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_X_W_MF2_MASK); - case RISCV::PseudoVFNCVT_RM_F_X_W_MF4_MASK: - return emitVFCVT_RM_MASK(MI, BB, RISCV::PseudoVFNCVT_F_X_W_MF4_MASK); +#define PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, LMUL) \ + case RISCV::RMOpc##_##LMUL##_MASK: \ + return emitVFCVT_RM_MASK(MI, BB, RISCV::Opc##_##LMUL##_MASK); + +#define PseudoVFCVT_RM_CASE(RMOpc, Opc) \ + PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, M1) \ + PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, M2) \ + PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, M4) \ + PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, MF2) \ + PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, MF4) + +#define PseudoVFCVT_RM_CASE_M8(RMOpc, Opc) \ + PseudoVFCVT_RM_CASE(RMOpc, Opc) \ + PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, M8) + +#define PseudoVFCVT_RM_CASE_MF8(RMOpc, Opc) \ + PseudoVFCVT_RM_CASE(RMOpc, Opc) \ + PseudoVFCVT_RM_LMUL_CASE(RMOpc, Opc, MF8) + + // VFCVT + PseudoVFCVT_RM_CASE_M8(PseudoVFCVT_RM_X_F_V, PseudoVFCVT_X_F_V) + PseudoVFCVT_RM_CASE_M8(PseudoVFCVT_RM_XU_F_V, PseudoVFCVT_XU_F_V) + PseudoVFCVT_RM_CASE_M8(PseudoVFCVT_RM_F_XU_V, PseudoVFCVT_F_XU_V) + PseudoVFCVT_RM_CASE_M8(PseudoVFCVT_RM_F_X_V, PseudoVFCVT_F_X_V) + + // VFWCVT + PseudoVFCVT_RM_CASE(PseudoVFWCVT_RM_XU_F_V, PseudoVFWCVT_XU_F_V); + PseudoVFCVT_RM_CASE(PseudoVFWCVT_RM_X_F_V, PseudoVFWCVT_X_F_V); + PseudoVFCVT_RM_CASE_MF8(PseudoVFWCVT_RM_F_XU_V, PseudoVFWCVT_F_XU_V); + PseudoVFCVT_RM_CASE_MF8(PseudoVFWCVT_RM_F_X_V, PseudoVFWCVT_F_X_V); + + // VFNCVT + PseudoVFCVT_RM_CASE_MF8(PseudoVFNCVT_RM_XU_F_W, PseudoVFNCVT_XU_F_W); + PseudoVFCVT_RM_CASE_MF8(PseudoVFNCVT_RM_X_F_W, PseudoVFNCVT_X_F_W); + PseudoVFCVT_RM_CASE(PseudoVFNCVT_RM_F_XU_W, PseudoVFNCVT_F_XU_W); + PseudoVFCVT_RM_CASE(PseudoVFNCVT_RM_F_X_W, PseudoVFNCVT_F_X_W); case RISCV::PseudoVFROUND_NOEXCEPT_V_M1_MASK: return emitVFROUND_NOEXCEPT_MASK(MI, BB, RISCV::PseudoVFCVT_X_F_V_M1_MASK,