diff options
-rw-r--r-- | llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp | 7 | ||||
-rw-r--r-- | llvm/test/Transforms/InferAddressSpaces/AMDGPU/infer-address-space.ll | 9 |
2 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp b/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp index 14fa24bf105..8f5ddf7f9f9 100644 --- a/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp +++ b/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp @@ -217,13 +217,16 @@ static bool isAddressExpression(const Value &V) { if (!isa<Operator>(V)) return false; - switch (cast<Operator>(V).getOpcode()) { + const Operator &Op = cast<Operator>(V); + switch (Op.getOpcode()) { case Instruction::PHI: + assert(Op.getType()->isPointerTy()); case Instruction::BitCast: case Instruction::AddrSpaceCast: case Instruction::GetElementPtr: - case Instruction::Select: return true; + case Instruction::Select: + return Op.getType()->isPointerTy(); default: return false; } diff --git a/llvm/test/Transforms/InferAddressSpaces/AMDGPU/infer-address-space.ll b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/infer-address-space.ll index 3096d8144dc..2f6d2b85d3e 100644 --- a/llvm/test/Transforms/InferAddressSpaces/AMDGPU/infer-address-space.ll +++ b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/infer-address-space.ll @@ -168,6 +168,15 @@ exit: ; preds = %loop ret void } +; CHECK-LABEL: @select_bug( +; CHECK: %add.ptr157 = getelementptr inbounds i64, i64* undef, i64 select (i1 icmp ne (i32* inttoptr (i64 4873 to i32*), i32* null), i64 73, i64 93) +; CHECK: %cmp169 = icmp uge i64* undef, %add.ptr157 +define void @select_bug() #0 { + %add.ptr157 = getelementptr inbounds i64, i64* undef, i64 select (i1 icmp ne (i32* inttoptr (i64 4873 to i32*), i32* null), i64 73, i64 93) + %cmp169 = icmp uge i64* undef, %add.ptr157 + unreachable +} + declare void @llvm.amdgcn.s.barrier() #1 declare void @use(float) #0 |