mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-24 08:33:39 +00:00
Pass the type of the store access, not the type of the store, into the
target hook. This allows us to codegen a loop as: LBB1_1: @cond_next mov r2, #0 str r2, [r0, +r3, lsl #2] add r3, r3, #1 cmn r3, #1 bne LBB1_1 @cond_next instead of: LBB1_1: @cond_next mov r2, #0 str r2, [r0], #+4 add r3, r3, #1 cmn r3, #1 bne LBB1_1 @cond_next This looks the same, but has one fewer induction variable (and therefore, one fewer register) live in the loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35592 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
44ad85e0e8
commit
1ebd89eb6b
@ -899,8 +899,15 @@ bool LoopStrengthReduce::ValidStride(int64_t Scale,
|
|||||||
Imm = SC->getValue()->getSExtValue();
|
Imm = SC->getValue()->getSExtValue();
|
||||||
else
|
else
|
||||||
Imm = 0;
|
Imm = 0;
|
||||||
if (!TLI->isLegalAddressScaleAndImm(Scale, Imm,
|
|
||||||
UsersToProcess[i].Inst->getType()))
|
// If this is a load or other access, pass the type of the access in.
|
||||||
|
const Type *AccessTy = Type::VoidTy;
|
||||||
|
if (StoreInst *SI = dyn_cast<StoreInst>(UsersToProcess[i].Inst))
|
||||||
|
AccessTy = SI->getOperand(0)->getType();
|
||||||
|
else if (LoadInst *LI = dyn_cast<LoadInst>(UsersToProcess[i].Inst))
|
||||||
|
AccessTy = LI->getType();
|
||||||
|
|
||||||
|
if (!TLI->isLegalAddressScaleAndImm(Scale, Imm, AccessTy))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user