[BranchFolding] Allow hoisting to block with a single conditional branch.
authorGeoff Berry <gberry@codeaurora.org>
Mon, 14 May 2018 17:31:18 +0000 (17:31 +0000)
committerGeoff Berry <gberry@codeaurora.org>
Mon, 14 May 2018 17:31:18 +0000 (17:31 +0000)
commit64a2ea41eaca32a6ba66db6b699ca33b2eee095b
treef2ea82ffd78bf8ded706e71f90883b1b255eaa0e
parent4135de2e93e19879492cd8a79a0c5371e1979cd6
[BranchFolding] Allow hoisting to block with a single conditional branch.

Summary:
The BranchFolding pass is currently missing opportunities to hoist
common code if the hoisted-to block contains a single conditional branch
that has register uses.  This occurs somewhat frequently on AArch64 with
CBZ/TBZ opcodes.

This change also eliminates some code differences when debug info is
present since the presence of e.g. DBG_VALUE instructions in the
hoisted-to block can enable hoisting that wouldn't have occurred without
them.

Reviewers: MatzeB, rnk, kparzysz, twoh, aprantl, javed.absar

Subscribers: kristof.beyls, JDevlieghere, mcrosier, llvm-commits

Differential Revision: https://reviews.llvm.org/D46324

llvm-svn: 332265
llvm/lib/CodeGen/BranchFolding.cpp
llvm/test/CodeGen/AArch64/branch-folder-oneinst.mir [new file with mode: 0644]