mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-13 10:32:06 +00:00
Revise the store V, (cast P) -> store (cast V) -> P transform.
We only want to do this if the src and destination types have the same bit width. This patch uses TargetData::getTypeSizeInBits() instead of making a special case for integer types and avoiding the transform if they don't match. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7c29243670
commit
67f827ce5b
@ -8192,10 +8192,9 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
||||
SrcPTy = SrcTy->getElementType();
|
||||
}
|
||||
|
||||
if (((SrcPTy->isInteger() && SrcPTy != Type::Int1Ty) ||
|
||||
isa<PointerType>(SrcPTy)) &&
|
||||
IC.getTargetData().getTypeSize(SrcPTy) ==
|
||||
IC.getTargetData().getTypeSize(DestPTy)) {
|
||||
if ((SrcPTy->isInteger() || isa<PointerType>(SrcPTy)) &&
|
||||
IC.getTargetData().getTypeSizeInBits(SrcPTy) ==
|
||||
IC.getTargetData().getTypeSizeInBits(DestPTy)) {
|
||||
|
||||
// Okay, we are casting from one integer or pointer type to another of
|
||||
// the same size. Instead of casting the pointer before
|
||||
@ -8208,13 +8207,9 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
|
||||
if (isa<PointerType>(CastDstTy)) {
|
||||
if (CastSrcTy->isInteger())
|
||||
opcode = Instruction::IntToPtr;
|
||||
} else if (const IntegerType* DITy = dyn_cast<IntegerType>(CastDstTy)) {
|
||||
} else if (isa<IntegerType>(CastDstTy)) {
|
||||
if (isa<PointerType>(SIOp0->getType()))
|
||||
opcode = Instruction::PtrToInt;
|
||||
else if (const IntegerType* SITy = dyn_cast<IntegerType>(CastSrcTy))
|
||||
if (SITy->getBitWidth() != DITy->getBitWidth())
|
||||
return 0; // Don't do this transform on unequal bit widths.
|
||||
// else, BitCast is fine
|
||||
}
|
||||
if (Constant *C = dyn_cast<Constant>(SIOp0))
|
||||
NewCast = ConstantExpr::getCast(opcode, C, CastDstTy);
|
||||
|
Loading…
x
Reference in New Issue
Block a user