mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 20:59:51 +00:00
LSR: Fold redundant bitcasts on-the-fly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146597 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ec04a3f8db
commit
19154f4576
@ -73,9 +73,14 @@ Value *SCEVExpander::InsertNoopCastOfTo(Value *V, Type *Ty) {
|
||||
"InsertNoopCastOfTo cannot change sizes!");
|
||||
|
||||
// Short-circuit unnecessary bitcasts.
|
||||
if (Op == Instruction::BitCast && V->getType() == Ty)
|
||||
return V;
|
||||
|
||||
if (Op == Instruction::BitCast) {
|
||||
if (V->getType() == Ty)
|
||||
return V;
|
||||
if (CastInst *CI = dyn_cast<CastInst>(V)) {
|
||||
if (CI->getOperand(0)->getType() == Ty)
|
||||
return CI->getOperand(0);
|
||||
}
|
||||
}
|
||||
// Short-circuit unnecessary inttoptr<->ptrtoint casts.
|
||||
if ((Op == Instruction::PtrToInt || Op == Instruction::IntToPtr) &&
|
||||
SE.getTypeSizeInBits(Ty) == SE.getTypeSizeInBits(V->getType())) {
|
||||
|
@ -4,12 +4,12 @@
|
||||
; LSR should property handle the post-inc offset when folding the
|
||||
; non-IV operand of an icmp into the IV.
|
||||
|
||||
; CHECK: %5 = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
|
||||
; CHECK: %6 = lshr i64 %5, 1
|
||||
; CHECK: %7 = mul i64 %6, 2
|
||||
; CHECK: %4 = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
|
||||
; CHECK: %5 = lshr i64 %4, 1
|
||||
; CHECK: %6 = mul i64 %5, 2
|
||||
; CHECK: br label %for.body
|
||||
; CHECK: for.body:
|
||||
; CHECK: %lsr.iv2 = phi i64 [ %lsr.iv.next, %for.body ], [ %7, %for.body.lr.ph ]
|
||||
; CHECK: %lsr.iv2 = phi i64 [ %lsr.iv.next, %for.body ], [ %6, %for.body.lr.ph ]
|
||||
; CHECK: %lsr.iv.next = add i64 %lsr.iv2, -2
|
||||
; CHECK: %lsr.iv.next3 = inttoptr i64 %lsr.iv.next to i16*
|
||||
; CHECK: %cmp27 = icmp eq i16* %lsr.iv.next3, null
|
||||
|
Loading…
Reference in New Issue
Block a user