diff options
Diffstat (limited to 'llvm/lib/Target/RISCV/RISCVInstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/RISCV/RISCVInstrInfo.cpp | 98 |
1 files changed, 17 insertions, 81 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp index 7baed2793e4e..55f4a19b79eb 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp @@ -654,8 +654,8 @@ void RISCVInstrInfo::movImm(MachineBasicBlock &MBB, BuildMI(MBB, MBBI, DL, get(RISCV::LUI), Result) .addImm(Inst.Imm) .setMIFlag(Flag); - } else if (Inst.Opc == RISCV::ADDUW) { - BuildMI(MBB, MBBI, DL, get(RISCV::ADDUW), Result) + } else if (Inst.Opc == RISCV::ADD_UW) { + BuildMI(MBB, MBBI, DL, get(RISCV::ADD_UW), Result) .addReg(SrcReg, RegState::Kill) .addReg(RISCV::X0) .setMIFlag(Flag); @@ -965,93 +965,29 @@ bool RISCVInstrInfo::isBranchOffsetInRange(unsigned BranchOp, } unsigned RISCVInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const { + if (MI.isMetaInstruction()) + return 0; + unsigned Opcode = MI.getOpcode(); - switch (Opcode) { - default: { - if (MI.getParent() && MI.getParent()->getParent()) { - const auto MF = MI.getMF(); - const auto &TM = static_cast<const RISCVTargetMachine &>(MF->getTarget()); - const MCRegisterInfo &MRI = *TM.getMCRegisterInfo(); - const MCSubtargetInfo &STI = *TM.getMCSubtargetInfo(); - const RISCVSubtarget &ST = MF->getSubtarget<RISCVSubtarget>(); - if (isCompressibleInst(MI, &ST, MRI, STI)) - return 2; - } - return get(Opcode).getSize(); - } - case TargetOpcode::EH_LABEL: - case TargetOpcode::IMPLICIT_DEF: - case TargetOpcode::KILL: - case TargetOpcode::DBG_VALUE: - return 0; - // These values are determined based on RISCVExpandAtomicPseudoInsts, - // RISCVExpandPseudoInsts and RISCVMCCodeEmitter, depending on where the - // pseudos are expanded. - case RISCV::PseudoCALLReg: - case RISCV::PseudoCALL: - case RISCV::PseudoJump: - case RISCV::PseudoTAIL: - case RISCV::PseudoLLA: - case RISCV::PseudoLA: - case RISCV::PseudoLA_TLS_IE: - case RISCV::PseudoLA_TLS_GD: - return 8; - case RISCV::PseudoAtomicLoadNand32: - case RISCV::PseudoAtomicLoadNand64: - return 20; - case RISCV::PseudoMaskedAtomicSwap32: - case RISCV::PseudoMaskedAtomicLoadAdd32: - case RISCV::PseudoMaskedAtomicLoadSub32: - return 28; - case RISCV::PseudoMaskedAtomicLoadNand32: - return 32; - case RISCV::PseudoMaskedAtomicLoadMax32: - case RISCV::PseudoMaskedAtomicLoadMin32: - return 44; - case RISCV::PseudoMaskedAtomicLoadUMax32: - case RISCV::PseudoMaskedAtomicLoadUMin32: - return 36; - case RISCV::PseudoCmpXchg32: - case RISCV::PseudoCmpXchg64: - return 16; - case RISCV::PseudoMaskedCmpXchg32: - return 32; - case TargetOpcode::INLINEASM: - case TargetOpcode::INLINEASM_BR: { + if (Opcode == TargetOpcode::INLINEASM || + Opcode == TargetOpcode::INLINEASM_BR) { const MachineFunction &MF = *MI.getParent()->getParent(); const auto &TM = static_cast<const RISCVTargetMachine &>(MF.getTarget()); return getInlineAsmLength(MI.getOperand(0).getSymbolName(), *TM.getMCAsmInfo()); } - case RISCV::PseudoVSPILL2_M1: - case RISCV::PseudoVSPILL2_M2: - case RISCV::PseudoVSPILL2_M4: - case RISCV::PseudoVSPILL3_M1: - case RISCV::PseudoVSPILL3_M2: - case RISCV::PseudoVSPILL4_M1: - case RISCV::PseudoVSPILL4_M2: - case RISCV::PseudoVSPILL5_M1: - case RISCV::PseudoVSPILL6_M1: - case RISCV::PseudoVSPILL7_M1: - case RISCV::PseudoVSPILL8_M1: - case RISCV::PseudoVRELOAD2_M1: - case RISCV::PseudoVRELOAD2_M2: - case RISCV::PseudoVRELOAD2_M4: - case RISCV::PseudoVRELOAD3_M1: - case RISCV::PseudoVRELOAD3_M2: - case RISCV::PseudoVRELOAD4_M1: - case RISCV::PseudoVRELOAD4_M2: - case RISCV::PseudoVRELOAD5_M1: - case RISCV::PseudoVRELOAD6_M1: - case RISCV::PseudoVRELOAD7_M1: - case RISCV::PseudoVRELOAD8_M1: { - // The values are determined based on expandVSPILL and expandVRELOAD that - // expand the pseudos depending on NF. - unsigned NF = isRVVSpillForZvlsseg(Opcode)->first; - return 4 * (2 * NF - 1); - } + + if (MI.getParent() && MI.getParent()->getParent()) { + const auto MF = MI.getMF(); + const auto &TM = static_cast<const RISCVTargetMachine &>(MF->getTarget()); + const MCRegisterInfo &MRI = *TM.getMCRegisterInfo(); + const MCSubtargetInfo &STI = *TM.getMCSubtargetInfo(); + const RISCVSubtarget &ST = MF->getSubtarget<RISCVSubtarget>(); + if (isCompressibleInst(MI, &ST, MRI, STI)) + return 2; } + return get(Opcode).getSize(); } bool RISCVInstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const { |
