Skip to content

Commit

Permalink
[mips] Fix a bug in MipsLongBranch::replaceBranch, which was erasing
Browse files Browse the repository at this point in the history
instructions in delay slots along with the original branch instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191978 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
ahatanak committed Oct 4, 2013
1 parent af57bdf commit 60ccc3b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
5 changes: 5 additions & 0 deletions lib/Target/Mips/MipsLongBranch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,11 @@ void MipsLongBranch::replaceBranch(MachineBasicBlock &MBB, Iter Br,

MIB.addMBB(MBBOpnd);

// Bundle the instruction in the delay slot to the newly created branch
// and erase the original branch.
assert(Br->isBundledWithSucc());
MachineBasicBlock::instr_iterator II(Br);
MIBundleBuilder(&*MIB).append(llvm::next(II)->removeFromBundle());
Br->eraseFromParent();
}

Expand Down
8 changes: 6 additions & 2 deletions test/CodeGen/Mips/longbranch.ll
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
; RUN: llc -march=mipsel -force-mips-long-branch < %s | FileCheck %s -check-prefix=O32
; RUN: llc -march=mips64el -mcpu=mips64 -mattr=n64 -force-mips-long-branch < %s | FileCheck %s -check-prefix=N64
; RUN: llc -march=mipsel -force-mips-long-branch -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=O32
; RUN: llc -march=mips64el -mcpu=mips64 -mattr=n64 -force-mips-long-branch -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=N64

@g0 = external global i32

define void @foo1(i32 %s) nounwind {
entry:
; O32: nop
; O32: addiu $sp, $sp, -8
; O32: bal
; O32: lui $1, 0
; O32: addiu $1, $1, {{[0-9]+}}
; N64: nop
; N64: daddiu $sp, $sp, -16
; N64: lui $1, 0
; N64: daddiu $1, $1, 0
; N64: dsll $1, $1, 16
Expand Down

0 comments on commit 60ccc3b

Please sign in to comment.