diff options
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r-- | llvm/test/Transforms/SROA/address-spaces.ll | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SROA/address-spaces.ll b/llvm/test/Transforms/SROA/address-spaces.ll index 119f2252d95..8fba30c2720 100644 --- a/llvm/test/Transforms/SROA/address-spaces.ll +++ b/llvm/test/Transforms/SROA/address-spaces.ll @@ -83,3 +83,21 @@ define void @pr27557() { store i32 addrspace(3)* @l, i32 addrspace(3)** %3, align 8 ret void } + +; Make sure pre-splitting doesn't try to introduce an illegal bitcast +define float @presplit(i64 addrspace(1)* %p) { +entry: +; CHECK-LABEL: @presplit( +; CHECK: %[[CAST:.*]] = bitcast i64 addrspace(1)* {{.*}} to i32 addrspace(1)* +; CHECK: load i32, i32 addrspace(1)* %[[CAST]] + %b = alloca i64 + %b.cast = bitcast i64* %b to [2 x float]* + %b.gep1 = getelementptr [2 x float], [2 x float]* %b.cast, i32 0, i32 0 + %b.gep2 = getelementptr [2 x float], [2 x float]* %b.cast, i32 0, i32 1 + %l = load i64, i64 addrspace(1)* %p + store i64 %l, i64* %b + %f1 = load float, float* %b.gep1 + %f2 = load float, float* %b.gep2 + %ret = fadd float %f1, %f2 + ret float %ret +} |