diff --git a/lib/Transforms/Scalar/SROA.cpp b/lib/Transforms/Scalar/SROA.cpp index dbc49930f83..5980478010d 100644 --- a/lib/Transforms/Scalar/SROA.cpp +++ b/lib/Transforms/Scalar/SROA.cpp @@ -1635,10 +1635,8 @@ static bool canConvertValue(const DataLayout &DL, Type *OldTy, Type *NewTy) { OldTy = OldTy->getScalarType(); NewTy = NewTy->getScalarType(); if (NewTy->isPointerTy() || OldTy->isPointerTy()) { - if (NewTy->isPointerTy() && OldTy->isPointerTy()) { - return cast(NewTy)->getPointerAddressSpace() == - cast(OldTy)->getPointerAddressSpace(); - } + if (NewTy->isPointerTy() && OldTy->isPointerTy()) + return true; if (NewTy->isIntegerTy() || OldTy->isIntegerTy()) return true; return false; diff --git a/test/Transforms/SROA/address-spaces.ll b/test/Transforms/SROA/address-spaces.ll index 119f2252d95..5f4df7faada 100644 --- a/test/Transforms/SROA/address-spaces.ll +++ b/test/Transforms/SROA/address-spaces.ll @@ -52,7 +52,7 @@ define void @test_address_space_0_1(<2 x i64>* %a, i16 addrspace(1)* %b) { %struct.struct_test_27.0.13 = type { i32, float, i64, i8, [4 x i32] } -; Function Attrs: nounwind +; Function Attrs: nounwind define void @copy_struct([5 x i64] %in.coerce) { ; CHECK-LABEL: @copy_struct( ; CHECK-NOT: memcpy @@ -66,20 +66,3 @@ for.end: ret void } -%union.anon = type { i32* } - -@g = common global i32 0, align 4 -@l = common addrspace(3) global i32 0, align 4 - -; Make sure an illegal bitcast isn't introduced -define void @pr27557() { -; CHECK-LABEL: @pr27557( -; CHECK: %[[CAST:.*]] = bitcast i32** {{.*}} to i32 addrspace(3)** -; CHECK: store i32 addrspace(3)* @l, i32 addrspace(3)** %[[CAST]] - %1 = alloca %union.anon, align 8 - %2 = bitcast %union.anon* %1 to i32** - store i32* @g, i32** %2, align 8 - %3 = bitcast %union.anon* %1 to i32 addrspace(3)** - store i32 addrspace(3)* @l, i32 addrspace(3)** %3, align 8 - ret void -}