1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00

A few more places where the check of use_empty is needed.

llvm-svn: 69842
This commit is contained in:
Evan Cheng 2009-04-22 23:09:16 +00:00
parent 2af546d5fa
commit faa208ae5f

View File

@ -739,6 +739,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
// See if we can figure out sext(i+constant) doesn't wrap, so we can
// use a larger add. This is common in subscripting.
if (UInst && UInst->getOpcode()==Instruction::Add &&
!UInst->use_empty() &&
allUsesAreSameTyped(Instruction::SExt, UInst) &&
isa<ConstantInt>(UInst->getOperand(1)) &&
NoSignedWrap && LimitVal) {
@ -771,6 +772,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
// Try for sext(i | constant). This is safe as long as the
// high bit of the constant is not set.
if (UInst && UInst->getOpcode()==Instruction::Or &&
!UInst->use_empty() &&
allUsesAreSameTyped(Instruction::SExt, UInst) && NoSignedWrap &&
isa<ConstantInt>(UInst->getOperand(1))) {
ConstantInt* RHS = dyn_cast<ConstantInt>(UInst->getOperand(1));
@ -841,6 +843,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
ConstantInt* AddRHS = dyn_cast<ConstantInt>(UInst->getOperand(1));
Instruction *UInst2 = dyn_cast<Instruction>(UInst->use_begin());
if (UInst2 && UInst2->getOpcode() == Instruction::And &&
!UInst2->use_empty() &&
allUsesAreSameTyped(Instruction::ZExt, UInst2) &&
isa<ConstantInt>(UInst2->getOperand(1))) {
ZExtInst* oldZext = dyn_cast<ZExtInst>(UInst2->use_begin());