diff options
| author | Joey Gouly <joey.gouly@gmail.com> | 2019-02-21 12:31:36 +0000 |
|---|---|---|
| committer | Joey Gouly <joey.gouly@gmail.com> | 2019-02-21 12:31:36 +0000 |
| commit | 92af1360f33178a5d8d02afb5a81d185cec2acc1 (patch) | |
| tree | 03e193cd170b8c6e72186ba0d6f2ebae0c35d60a | |
| parent | e6b338cbef18328cf7f232b4c196c487a50e35ff (diff) | |
| download | bcm5719-llvm-92af1360f33178a5d8d02afb5a81d185cec2acc1.tar.gz bcm5719-llvm-92af1360f33178a5d8d02afb5a81d185cec2acc1.zip | |
[InferAddressSpaces] Fix crash on select of non-ptr operands
Check the operands of a select are pointers, to determine if it is an address
expression or not.
https://reviews.llvm.org/D58226
llvm-svn: 354576
| -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 |

