| ; RUN: llvm-as < %s | llvm-dis | FileCheck %s |
| |
| ; The llvm.amdgcn.addrspacecast.nonnull intrinsic is replaced by an |
| ; addrspacecast instruction carrying the nonnull flag. |
| |
| define ptr @local_to_flat(ptr addrspace(3) %ptr) { |
| ; CHECK: %res = addrspacecast nonnull ptr addrspace(3) %ptr to ptr |
| %res = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) %ptr) |
| ret ptr %res |
| } |
| |
| define ptr @private_to_flat(ptr addrspace(5) %ptr) { |
| ; CHECK: %res = addrspacecast nonnull ptr addrspace(5) %ptr to ptr |
| %res = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p5(ptr addrspace(5) %ptr) |
| ret ptr %res |
| } |
| |
| define ptr addrspace(3) @flat_to_local(ptr %ptr) { |
| ; CHECK: %res = addrspacecast nonnull ptr %ptr to ptr addrspace(3) |
| %res = call ptr addrspace(3) @llvm.amdgcn.addrspacecast.nonnull.p3.p0(ptr %ptr) |
| ret ptr addrspace(3) %res |
| } |
| |
| define ptr addrspace(5) @flat_to_private(ptr %ptr) { |
| ; CHECK: %res = addrspacecast nonnull ptr %ptr to ptr addrspace(5) |
| %res = call ptr addrspace(5) @llvm.amdgcn.addrspacecast.nonnull.p5.p0(ptr %ptr) |
| ret ptr addrspace(5) %res |
| } |
| |
| ; A malformed call with too few arguments is dropped instead of upgraded. |
| define void @malformed_no_args() { |
| ; CHECK-LABEL: @malformed_no_args( |
| ; CHECK-NEXT: ret void |
| call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3.malformed() |
| ret void |
| } |
| |
| declare ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3)) |
| declare ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p5(ptr addrspace(5)) |
| declare ptr addrspace(3) @llvm.amdgcn.addrspacecast.nonnull.p3.p0(ptr) |
| declare ptr addrspace(5) @llvm.amdgcn.addrspacecast.nonnull.p5.p0(ptr) |
| declare ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3.malformed() |