diff options
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp b/llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp index aeff5f8d3e4..a0fdc70e141 100644 --- a/llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp +++ b/llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp @@ -340,6 +340,21 @@ bool HexagonVectorLoopCarriedReuse::isEquivalentOperation(Instruction *I1, return false; } } + + // If both the Instructions are of Vector Type and any of the element + // is integer constant, check their values too for equivalence. + if (I1->getType()->isVectorTy() && I2->getType()->isVectorTy()) { + unsigned NumOperands = I1->getNumOperands(); + for (unsigned i = 0; i < NumOperands; ++i) { + ConstantInt *C1 = dyn_cast<ConstantInt>(I1->getOperand(i)); + ConstantInt *C2 = dyn_cast<ConstantInt>(I2->getOperand(i)); + if(!C1) continue; + assert(C2); + if (C1->getSExtValue() != C2->getSExtValue()) + return false; + } + } + return true; } @@ -520,7 +535,7 @@ bool HexagonVectorLoopCarriedReuse::doVLCR() { assert((CurLoop->getNumBlocks() == 1) && "Can do VLCR only on single block loops"); - bool Changed; + bool Changed = false; bool Continue; DEBUG(dbgs() << "Working on Loop: " << *CurLoop->getHeader() << "\n"); |

