diff options
author | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2017-03-21 23:42:50 +0000 |
---|---|---|
committer | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2017-03-21 23:42:50 +0000 |
commit | e8e1fa3a7cf8a9500a39702cce71cde8aa2960f0 (patch) | |
tree | c01a16b47e4494bcedf5435fcb63dcd93977ffa7 /llvm/lib/CodeGen | |
parent | c8470e59bcbeb4bbf2a2e124cd376de7d64903e4 (diff) | |
download | bcm5719-llvm-e8e1fa3a7cf8a9500a39702cce71cde8aa2960f0.tar.gz bcm5719-llvm-e8e1fa3a7cf8a9500a39702cce71cde8aa2960f0.zip |
[GlobalISel] Don't translate br to layout successor.
MI can represent fallthrough to layout successor blocks, and our
post-isel representation uses that extensively.
We might as well use it too, to avoid translating and carrying along
unnecessary branches.
llvm-svn: 298459
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index b6e6fbd03d0..b3f131b5eeb 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -223,10 +223,13 @@ bool IRTranslator::translateBr(const User &U, MachineIRBuilder &MIRBuilder) { const BasicBlock &BrTgt = *cast<BasicBlock>(BrInst.getSuccessor(Succ)); MachineBasicBlock &TgtBB = getMBB(BrTgt); - MIRBuilder.buildBr(TgtBB); + MachineBasicBlock &CurBB = MIRBuilder.getMBB(); + + // If the unconditional target is the layout successor, fallthrough. + if (!CurBB.isLayoutSuccessor(&TgtBB)) + MIRBuilder.buildBr(TgtBB); // Link successors. - MachineBasicBlock &CurBB = MIRBuilder.getMBB(); for (const BasicBlock *Succ : BrInst.successors()) CurBB.addSuccessor(&getMBB(*Succ)); return true; |