mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
Fix a bug with inttoptr/ptrtoint casts where the pointer has a different
size from the integer, requiring zero extension or truncation. Don't create ZExtInsts with pointer types. This fixes a regression in consumer-jpeg. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69307 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
02f8c41014
commit
8170a6849e
@ -225,8 +225,6 @@ SCEVZeroExtendExpr::SCEVZeroExtendExpr(const SCEVHandle &op, const Type *ty)
|
||||
assert((Op->getType()->isInteger() || isa<PointerType>(Op->getType())) &&
|
||||
(Ty->isInteger() || isa<PointerType>(Ty)) &&
|
||||
"Cannot zero extend non-integer value!");
|
||||
assert(Op->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()
|
||||
&& "This is not an extending conversion!");
|
||||
}
|
||||
|
||||
SCEVZeroExtendExpr::~SCEVZeroExtendExpr() {
|
||||
@ -674,7 +672,12 @@ SCEVHandle ScalarEvolution::getTruncateExpr(const SCEVHandle &Op, const Type *Ty
|
||||
return Result;
|
||||
}
|
||||
|
||||
SCEVHandle ScalarEvolution::getZeroExtendExpr(const SCEVHandle &Op, const Type *Ty) {
|
||||
SCEVHandle ScalarEvolution::getZeroExtendExpr(const SCEVHandle &Op,
|
||||
const Type *Ty) {
|
||||
assert(getTargetData().getTypeSizeInBits(Op->getType()) <
|
||||
getTargetData().getTypeSizeInBits(Ty) &&
|
||||
"This is not an extending conversion!");
|
||||
|
||||
if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Op)) {
|
||||
const Type *IntTy = Ty;
|
||||
if (isa<PointerType>(IntTy)) IntTy = getTargetData().getIntPtrType();
|
||||
|
@ -281,17 +281,21 @@ Value *SCEVExpander::visitTruncateExpr(SCEVTruncateExpr *S) {
|
||||
}
|
||||
|
||||
Value *SCEVExpander::visitZeroExtendExpr(SCEVZeroExtendExpr *S) {
|
||||
const Type *Ty = S->getType();
|
||||
if (isa<PointerType>(Ty)) Ty = TD.getIntPtrType();
|
||||
Value *V = expand(S->getOperand());
|
||||
if (isa<PointerType>(V->getType()))
|
||||
V = InsertCastOfTo(Instruction::PtrToInt, V, TD.getIntPtrType());
|
||||
return CastInst::CreateZExtOrBitCast(V, S->getType(), "tmp.", InsertPt);
|
||||
return CastInst::CreateZExtOrBitCast(V, Ty, "tmp.", InsertPt);
|
||||
}
|
||||
|
||||
Value *SCEVExpander::visitSignExtendExpr(SCEVSignExtendExpr *S) {
|
||||
const Type *Ty = S->getType();
|
||||
if (isa<PointerType>(Ty)) Ty = TD.getIntPtrType();
|
||||
Value *V = expand(S->getOperand());
|
||||
if (isa<PointerType>(V->getType()))
|
||||
V = InsertCastOfTo(Instruction::PtrToInt, V, TD.getIntPtrType());
|
||||
return CastInst::CreateSExtOrBitCast(V, S->getType(), "tmp.", InsertPt);
|
||||
return CastInst::CreateSExtOrBitCast(V, Ty, "tmp.", InsertPt);
|
||||
}
|
||||
|
||||
Value *SCEVExpander::visitSMaxExpr(SCEVSMaxExpr *S) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user