diff options
Diffstat (limited to 'lib/Transforms/InstCombine/InstCombineCasts.cpp')
| -rw-r--r-- | lib/Transforms/InstCombine/InstCombineCasts.cpp | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineCasts.cpp b/lib/Transforms/InstCombine/InstCombineCasts.cpp index e8ea7396a96a..fd59c3a7c0c3 100644 --- a/lib/Transforms/InstCombine/InstCombineCasts.cpp +++ b/lib/Transforms/InstCombine/InstCombineCasts.cpp @@ -2243,6 +2243,12 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {      Type *DstElTy = DstPTy->getElementType();      Type *SrcElTy = SrcPTy->getElementType(); +    // Casting pointers between the same type, but with different address spaces +    // is an addrspace cast rather than a bitcast. +    if ((DstElTy == SrcElTy) && +        (DstPTy->getAddressSpace() != SrcPTy->getAddressSpace())) +      return new AddrSpaceCastInst(Src, DestTy); +      // If we are casting a alloca to a pointer to a type of the same      // size, rewrite the allocation instruction to allocate the "right" type.      // There is no need to modify malloc calls because it is their bitcast that  | 
