diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2015-09-02 19:23:23 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2015-09-02 19:23:23 +0000 |
| commit | 42574203e55772022f93904a16f020daeade27cc (patch) | |
| tree | cbc16e5d0f106cc283323f433ce29cf408310e5c /llvm/lib/CodeGen | |
| parent | fff7c6dc7319e7e735a3135b4254e874faef4077 (diff) | |
| download | bcm5719-llvm-42574203e55772022f93904a16f020daeade27cc.tar.gz bcm5719-llvm-42574203e55772022f93904a16f020daeade27cc.zip | |
use "unpredictable" metadata in fast-isel when splitting compares
This patch uses the metadata defined in D12341 to avoid creating an unpredictable branch.
Differential Revision: http://reviews.llvm.org/D12342
llvm-svn: 246692
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/CodeGenPrepare.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 9e0ac96ba56..9ed15fb7753 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -4667,6 +4667,10 @@ bool CodeGenPrepare::splitBranchCondition(Function &F) { if (!match(BB.getTerminator(), m_Br(m_OneUse(m_BinOp(LogicOp)), TBB, FBB))) continue; + auto *Br1 = cast<BranchInst>(BB.getTerminator()); + if (Br1->getMetadata(LLVMContext::MD_unpredictable)) + continue; + unsigned Opc; Value *Cond1, *Cond2; if (match(LogicOp, m_And(m_OneUse(m_Value(Cond1)), @@ -4693,7 +4697,6 @@ bool CodeGenPrepare::splitBranchCondition(Function &F) { // Update original basic block by using the first condition directly by the // branch instruction and removing the no longer needed and/or instruction. - auto *Br1 = cast<BranchInst>(BB.getTerminator()); Br1->setCondition(Cond1); LogicOp->eraseFromParent(); |

