diff options
author | Alex Bradbury <asb@lowrisc.org> | 2018-01-10 21:05:07 +0000 |
---|---|---|
committer | Alex Bradbury <asb@lowrisc.org> | 2018-01-10 21:05:07 +0000 |
commit | 315cd3ace4e7c93e41525a7c4a81b6b07a193bb8 (patch) | |
tree | d00ca136f2886a267422377622f210f621362ef3 /llvm/lib/Target/RISCV/RISCVMCInstLower.cpp | |
parent | 725ad0eee052b1de23296dadc1eabfe6741c4742 (diff) | |
download | bcm5719-llvm-315cd3ace4e7c93e41525a7c4a81b6b07a193bb8.tar.gz bcm5719-llvm-315cd3ace4e7c93e41525a7c4a81b6b07a193bb8.zip |
[RISCV] Implement support for the BranchRelaxation pass
Branch relaxation is needed to support branch displacements that overflow the
instruction's immediate field.
Differential Revision: https://reviews.llvm.org/D40830
llvm-svn: 322224
Diffstat (limited to 'llvm/lib/Target/RISCV/RISCVMCInstLower.cpp')
-rw-r--r-- | llvm/lib/Target/RISCV/RISCVMCInstLower.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp b/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp index d8ae11f2bd9..b72b45c3dcc 100644 --- a/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp +++ b/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp @@ -48,11 +48,12 @@ static MCOperand lowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym, const MCExpr *ME = MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, Ctx); - if (!MO.isJTI() && MO.getOffset()) + if (!MO.isJTI() && !MO.isMBB() && MO.getOffset()) ME = MCBinaryExpr::createAdd( ME, MCConstantExpr::create(MO.getOffset(), Ctx), Ctx); - ME = RISCVMCExpr::create(ME, Kind, Ctx); + if (Kind != RISCVMCExpr::VK_RISCV_None) + ME = RISCVMCExpr::create(ME, Kind, Ctx); return MCOperand::createExpr(ME); } @@ -75,8 +76,7 @@ bool llvm::LowerRISCVMachineOperandToMCOperand(const MachineOperand &MO, MCOp = MCOperand::createImm(MO.getImm()); break; case MachineOperand::MO_MachineBasicBlock: - MCOp = MCOperand::createExpr( - MCSymbolRefExpr::create(MO.getMBB()->getSymbol(), AP.OutContext)); + MCOp = lowerSymbolOperand(MO, MO.getMBB()->getSymbol(), AP); break; case MachineOperand::MO_GlobalAddress: MCOp = lowerSymbolOperand(MO, AP.getSymbol(MO.getGlobal()), AP); |