projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[CGP] Rewrite pattern match for splitBranchCondition to work with Values instead.
[oota-llvm.git]
/
lib
/
CodeGen
/
CodeGenPrepare.cpp
diff --git
a/lib/CodeGen/CodeGenPrepare.cpp
b/lib/CodeGen/CodeGenPrepare.cpp
index e043bfbfa270229a527da16d5ce3099ba5e09b4a..96e2d3d74deeffe5d78c930428ed79cdbcdb19c3 100644
(file)
--- a/
lib/CodeGen/CodeGenPrepare.cpp
+++ b/
lib/CodeGen/CodeGenPrepare.cpp
@@
-3869,12
+3869,12
@@
bool CodeGenPrepare::splitBranchCondition(Function &F) {
continue;
unsigned Opc;
continue;
unsigned Opc;
-
Instruction
*Cond1, *Cond2;
- if (match(LogicOp, m_And(m_OneUse(m_
Instruction
(Cond1)),
- m_OneUse(m_
Instruction
(Cond2)))))
+
Value
*Cond1, *Cond2;
+ if (match(LogicOp, m_And(m_OneUse(m_
Value
(Cond1)),
+ m_OneUse(m_
Value
(Cond2)))))
Opc = Instruction::And;
Opc = Instruction::And;
- else if (match(LogicOp, m_Or(m_OneUse(m_
Instruction
(Cond1)),
- m_OneUse(m_
Instruction
(Cond2)))))
+ else if (match(LogicOp, m_Or(m_OneUse(m_
Value
(Cond1)),
+ m_OneUse(m_
Value
(Cond2)))))
Opc = Instruction::Or;
else
continue;
Opc = Instruction::Or;
else
continue;
@@
-3897,7
+3897,7
@@
bool CodeGenPrepare::splitBranchCondition(Function &F) {
auto *Br1 = cast<BranchInst>(BB.getTerminator());
Br1->setCondition(Cond1);
LogicOp->eraseFromParent();
auto *Br1 = cast<BranchInst>(BB.getTerminator());
Br1->setCondition(Cond1);
LogicOp->eraseFromParent();
- Cond2->removeFromParent();
+
// Depending on the conditon we have to either replace the true or the false
// successor of the original branch instruction.
if (Opc == Instruction::And)
// Depending on the conditon we have to either replace the true or the false
// successor of the original branch instruction.
if (Opc == Instruction::And)
@@
-3907,7
+3907,10
@@
bool CodeGenPrepare::splitBranchCondition(Function &F) {
// Fill in the new basic block.
auto *Br2 = IRBuilder<>(TmpBB).CreateCondBr(Cond2, TBB, FBB);
// Fill in the new basic block.
auto *Br2 = IRBuilder<>(TmpBB).CreateCondBr(Cond2, TBB, FBB);
- Cond2->insertBefore(Br2);
+ if (auto *I = dyn_cast<Instruction>(Cond2)) {
+ I->removeFromParent();
+ I->insertBefore(Br2);
+ }
// Update PHI nodes in both successors. The original BB needs to be
// replaced in one succesor's PHI nodes, because the branch comes now from
// Update PHI nodes in both successors. The original BB needs to be
// replaced in one succesor's PHI nodes, because the branch comes now from