diff --git a/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp b/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp index 10b4913b6ab7f..003b2c7835f2a 100644 --- a/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp +++ b/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp @@ -213,12 +213,29 @@ class RISCVMCPlusBuilder : public MCPlusBuilder { case RISCV::C_J: case RISCV::C_JR: break; + case RISCV::BEQ: + case RISCV::BNE: + case RISCV::BGE: + case RISCV::BGEU: + case RISCV::BLT: + case RISCV::BLTU: + case RISCV::C_BEQZ: + case RISCV::C_BNEZ: + break; } setTailCall(Inst); return true; } + bool convertTailCallToJmp(MCInst &Inst) override { + removeAnnotation(Inst, MCPlus::MCAnnotation::kTailCall); + clearOffset(Inst); + if (getConditionalTailCall(Inst)) + unsetConditionalTailCall(Inst); + return true; + } + void createReturn(MCInst &Inst) const override { // TODO "c.jr ra" when RVC is enabled Inst.setOpcode(RISCV::JALR); @@ -320,6 +337,7 @@ class RISCVMCPlusBuilder : public MCPlusBuilder { default: return false; case RISCV::C_J: + case RISCV::PseudoTAIL: OpNum = 0; return true; case RISCV::AUIPC: