diff --git a/llvm/lib/CodeGen/BranchRelaxation.cpp b/llvm/lib/CodeGen/BranchRelaxation.cpp --- a/llvm/lib/CodeGen/BranchRelaxation.cpp +++ b/llvm/lib/CodeGen/BranchRelaxation.cpp @@ -88,7 +88,9 @@ bool relaxBranchInstructions(); void scanFunction(); - MachineBasicBlock *createNewBlockAfter(MachineBasicBlock &BB); + MachineBasicBlock *createNewBlockAfter(MachineBasicBlock &OrigMBB); + MachineBasicBlock *createNewBlockAfter(MachineBasicBlock &OrigMBB, + const BasicBlock *BB); MachineBasicBlock *splitBlockBeforeInstr(MachineInstr &MI, MachineBasicBlock *DestBB); @@ -202,12 +204,20 @@ } } -/// Insert a new empty basic block and insert it after \BB -MachineBasicBlock *BranchRelaxation::createNewBlockAfter(MachineBasicBlock &BB) { +/// Insert a new empty MachineBasicBlock and insert it after \p OrigMBB +MachineBasicBlock * +BranchRelaxation::createNewBlockAfter(MachineBasicBlock &OrigBB) { + return createNewBlockAfter(OrigBB, OrigBB.getBasicBlock()); +} + +/// Insert a new empty MachineBasicBlock with \p BB as its BasicBlock +/// and insert it after \p OrigMBB +MachineBasicBlock * +BranchRelaxation::createNewBlockAfter(MachineBasicBlock &OrigMBB, + const BasicBlock *BB) { // Create a new MBB for the code after the OrigBB. - MachineBasicBlock *NewBB = - MF->CreateMachineBasicBlock(BB.getBasicBlock()); - MF->insert(++BB.getIterator(), NewBB); + MachineBasicBlock *NewBB = MF->CreateMachineBasicBlock(BB); + MF->insert(++OrigMBB.getIterator(), NewBB); // Insert an entry into BlockInfo to align it properly with the block numbers. BlockInfo.insert(BlockInfo.begin() + NewBB->getNumber(), BasicBlockInfo()); @@ -482,7 +492,8 @@ // Create the optional restore block and, initially, place it at the end of // function. That block will be placed later if it's used; otherwise, it will // be erased. - MachineBasicBlock *RestoreBB = createNewBlockAfter(MF->back()); + MachineBasicBlock *RestoreBB = createNewBlockAfter(MF->back(), + DestBB->getBasicBlock()); TII->insertIndirectBranch(*BranchBB, *DestBB, *RestoreBB, DL, DestOffset - SrcOffset, RS.get()); diff --git a/llvm/test/CodeGen/RISCV/branch-relaxation.ll b/llvm/test/CodeGen/RISCV/branch-relaxation.ll --- a/llvm/test/CodeGen/RISCV/branch-relaxation.ll +++ b/llvm/test/CodeGen/RISCV/branch-relaxation.ll @@ -2788,14 +2788,14 @@ ; CHECK-RV32-NEXT: .zero 1048576 ; CHECK-RV32-NEXT: #NO_APP ; CHECK-RV32-NEXT: j .LBB6_4 -; CHECK-RV32-NEXT: .LBB6_8: # %dest_3 +; CHECK-RV32-NEXT: .LBB6_8: # %dest_1 ; CHECK-RV32-NEXT: lw s11, 0(sp) ; CHECK-RV32-NEXT: .LBB6_4: # %dest_1 ; CHECK-RV32-NEXT: #APP ; CHECK-RV32-NEXT: # dest 1 ; CHECK-RV32-NEXT: #NO_APP ; CHECK-RV32-NEXT: j .LBB6_5 -; CHECK-RV32-NEXT: .LBB6_10: # %dest_3 +; CHECK-RV32-NEXT: .LBB6_10: # %dest_2 ; CHECK-RV32-NEXT: lw s11, 0(sp) ; CHECK-RV32-NEXT: .LBB6_5: # %dest_2 ; CHECK-RV32-NEXT: #APP