mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-20 11:08:27 +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(
|
return getUnknown(
|
||||||
ConstantExpr::getTrunc(SC->getValue(), Ty));
|
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
|
// If the input value is a chrec scev made out of constants, truncate
|
||||||
// all of the constants.
|
// all of the constants.
|
||||||
if (SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(Op)) {
|
if (SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(Op)) {
|
||||||
@ -685,6 +689,10 @@ SCEVHandle ScalarEvolution::getZeroExtendExpr(const SCEVHandle &Op,
|
|||||||
return getUnknown(C);
|
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
|
// 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
|
// did not overflow the old, smaller, value, we can zero extend all of the
|
||||||
// operands (often constants). This would allow analysis of something like
|
// 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);
|
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
|
// 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
|
// did not overflow the old, smaller, value, we can sign extend all of the
|
||||||
// operands (often constants). This would allow analysis of something like
|
// operands (often constants). This would allow analysis of something like
|
||||||
|
Loading…
Reference in New Issue
Block a user