mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
Simplify trivial cast-of-cast SCEVs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69809 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
aabb04f527
commit
20900cae35
@ -654,6 +654,10 @@ SCEVHandle ScalarEvolution::getTruncateExpr(const SCEVHandle &Op, const Type *Ty
|
||||
return getUnknown(
|
||||
ConstantExpr::getTrunc(SC->getValue(), Ty));
|
||||
|
||||
// trunc(trunc(x)) --> trunc(x)
|
||||
if (SCEVTruncateExpr *ST = dyn_cast<SCEVTruncateExpr>(Op))
|
||||
return getTruncateExpr(ST->getOperand(), Ty);
|
||||
|
||||
// If the input value is a chrec scev made out of constants, truncate
|
||||
// all of the constants.
|
||||
if (SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(Op)) {
|
||||
@ -685,6 +689,10 @@ SCEVHandle ScalarEvolution::getZeroExtendExpr(const SCEVHandle &Op,
|
||||
return getUnknown(C);
|
||||
}
|
||||
|
||||
// zext(zext(x)) --> zext(x)
|
||||
if (SCEVZeroExtendExpr *SZ = dyn_cast<SCEVZeroExtendExpr>(Op))
|
||||
return getZeroExtendExpr(SZ->getOperand(), Ty);
|
||||
|
||||
// FIXME: If the input value is a chrec scev, and we can prove that the value
|
||||
// did not overflow the old, smaller, value, we can zero extend all of the
|
||||
// operands (often constants). This would allow analysis of something like
|
||||
@ -706,6 +714,10 @@ SCEVHandle ScalarEvolution::getSignExtendExpr(const SCEVHandle &Op, const Type *
|
||||
return getUnknown(C);
|
||||
}
|
||||
|
||||
// sext(sext(x)) --> sext(x)
|
||||
if (SCEVSignExtendExpr *SS = dyn_cast<SCEVSignExtendExpr>(Op))
|
||||
return getSignExtendExpr(SS->getOperand(), Ty);
|
||||
|
||||
// FIXME: If the input value is a chrec scev, and we can prove that the value
|
||||
// did not overflow the old, smaller, value, we can sign extend all of the
|
||||
// operands (often constants). This would allow analysis of something like
|
||||
|
Loading…
Reference in New Issue
Block a user