mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
Finally get the casting right in this file. Also, remove some unnecessary
casting because sdiv doesn't require operand signs to match any more. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32240 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -560,7 +560,7 @@ SCEVHandle SCEVAddRecExpr::evaluateAtIteration(SCEVHandle It) const {
|
|||||||
SCEVHandle SCEVTruncateExpr::get(const SCEVHandle &Op, const Type *Ty) {
|
SCEVHandle SCEVTruncateExpr::get(const SCEVHandle &Op, const Type *Ty) {
|
||||||
if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Op))
|
if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Op))
|
||||||
return SCEVUnknown::get(
|
return SCEVUnknown::get(
|
||||||
ConstantExpr::getTruncOrBitCast(SC->getValue(), Ty));
|
ConstantExpr::getTrunc(SC->getValue(), 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.
|
||||||
@ -584,7 +584,7 @@ SCEVHandle SCEVTruncateExpr::get(const SCEVHandle &Op, const Type *Ty) {
|
|||||||
SCEVHandle SCEVZeroExtendExpr::get(const SCEVHandle &Op, const Type *Ty) {
|
SCEVHandle SCEVZeroExtendExpr::get(const SCEVHandle &Op, const Type *Ty) {
|
||||||
if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Op))
|
if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Op))
|
||||||
return SCEVUnknown::get(
|
return SCEVUnknown::get(
|
||||||
ConstantExpr::getZExtOrBitCast(SC->getValue(), Ty));
|
ConstantExpr::getZeroExtend(SC->getValue(), 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
|
||||||
@ -999,11 +999,6 @@ SCEVHandle SCEVSDivExpr::get(const SCEVHandle &LHS, const SCEVHandle &RHS) {
|
|||||||
if (SCEVConstant *LHSC = dyn_cast<SCEVConstant>(LHS)) {
|
if (SCEVConstant *LHSC = dyn_cast<SCEVConstant>(LHS)) {
|
||||||
Constant *LHSCV = LHSC->getValue();
|
Constant *LHSCV = LHSC->getValue();
|
||||||
Constant *RHSCV = RHSC->getValue();
|
Constant *RHSCV = RHSC->getValue();
|
||||||
if (LHSCV->getType()->isUnsigned())
|
|
||||||
LHSCV = ConstantExpr::getBitCast(LHSCV,
|
|
||||||
LHSCV->getType()->getSignedVersion());
|
|
||||||
if (RHSCV->getType()->isUnsigned())
|
|
||||||
RHSCV = ConstantExpr::getBitCast(RHSCV, LHSCV->getType());
|
|
||||||
return SCEVUnknown::get(ConstantExpr::getSDiv(LHSCV, RHSCV));
|
return SCEVUnknown::get(ConstantExpr::getSDiv(LHSCV, RHSCV));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1376,12 +1371,16 @@ SCEVHandle ScalarEvolutionsImpl::createSCEV(Value *V) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction::Trunc:
|
case Instruction::Trunc:
|
||||||
|
// We must prevent boolean types such as setne, etc. from entering here
|
||||||
|
// because we don't want to pass SCEVUnknown to the TruncateExpr.
|
||||||
if (I->getType()->isInteger() && I->getOperand(0)->getType()->isInteger())
|
if (I->getType()->isInteger() && I->getOperand(0)->getType()->isInteger())
|
||||||
return SCEVTruncateExpr::get(getSCEV(I->getOperand(0)),
|
return SCEVTruncateExpr::get(getSCEV(I->getOperand(0)),
|
||||||
I->getType()->getUnsignedVersion());
|
I->getType()->getUnsignedVersion());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction::ZExt:
|
case Instruction::ZExt:
|
||||||
|
// We must prevent boolean types such as setne, etc. from entering here
|
||||||
|
// because we don't want to pass SCEVUnknown to the ZExtExpr.
|
||||||
if (I->getType()->isInteger() && I->getOperand(0)->getType()->isInteger())
|
if (I->getType()->isInteger() && I->getOperand(0)->getType()->isInteger())
|
||||||
return SCEVZeroExtendExpr::get(getSCEV(I->getOperand(0)),
|
return SCEVZeroExtendExpr::get(getSCEV(I->getOperand(0)),
|
||||||
I->getType()->getUnsignedVersion());
|
I->getType()->getUnsignedVersion());
|
||||||
|
Reference in New Issue
Block a user