| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 6 |
| ; RUN: opt -mtriple=amdgpu7.00-amd-amdhsa -S -o - -passes=amdgpu-lower-kernel-arguments %s | FileCheck -check-prefixes=GFX7-HSA %s |
| ; RUN: opt -mtriple=amdgpu7.00-- -S -o - -passes=amdgpu-lower-kernel-arguments %s | FileCheck -check-prefixes=GFX7-MESA %s |
| ; RUN: opt -mtriple=amdgpu6.00-amd-amdhsa -S -o - -passes=amdgpu-lower-kernel-arguments %s | FileCheck -check-prefixes=GFX6-HSA %s |
| ; RUN: opt -mtriple=amdgpu6.00-- -S -o - -passes=amdgpu-lower-kernel-arguments %s | FileCheck -check-prefixes=GFX6-MESA %s |
| |
| ; Lowering of an LDS pointer kernel argument is skipped on gfx6 as an |
| ; optmization hack. The kernarg segment size also differs by OS. |
| |
| define amdgpu_kernel void @kern_lds_ptr(ptr addrspace(3) %lds) { |
| ; GFX7-HSA-LABEL: define amdgpu_kernel void @kern_lds_ptr( |
| ; GFX7-HSA-SAME: ptr addrspace(3) [[LDS:%.*]]) { |
| ; GFX7-HSA-NEXT: [[KERN_LDS_PTR_KERNARG_SEGMENT:%.*]] = call nonnull align 16 dereferenceable(264) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() |
| ; GFX7-HSA-NEXT: [[LDS_KERNARG_OFFSET:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[KERN_LDS_PTR_KERNARG_SEGMENT]], i64 0 |
| ; GFX7-HSA-NEXT: [[LDS_LOAD:%.*]] = load ptr addrspace(3), ptr addrspace(4) [[LDS_KERNARG_OFFSET]], align 16, !invariant.load [[META0:![0-9]+]] |
| ; GFX7-HSA-NEXT: store i32 0, ptr addrspace(3) [[LDS_LOAD]], align 4 |
| ; GFX7-HSA-NEXT: ret void |
| ; |
| ; GFX7-MESA-LABEL: define amdgpu_kernel void @kern_lds_ptr( |
| ; GFX7-MESA-SAME: ptr addrspace(3) [[LDS:%.*]]) { |
| ; GFX7-MESA-NEXT: [[KERN_LDS_PTR_KERNARG_SEGMENT:%.*]] = call nonnull align 16 dereferenceable(260) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() |
| ; GFX7-MESA-NEXT: [[LDS_KERNARG_OFFSET:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[KERN_LDS_PTR_KERNARG_SEGMENT]], i64 36 |
| ; GFX7-MESA-NEXT: [[LDS_LOAD:%.*]] = load ptr addrspace(3), ptr addrspace(4) [[LDS_KERNARG_OFFSET]], align 4, !invariant.load [[META0:![0-9]+]] |
| ; GFX7-MESA-NEXT: store i32 0, ptr addrspace(3) [[LDS_LOAD]], align 4 |
| ; GFX7-MESA-NEXT: ret void |
| ; |
| ; GFX6-HSA-LABEL: define amdgpu_kernel void @kern_lds_ptr( |
| ; GFX6-HSA-SAME: ptr addrspace(3) [[LDS:%.*]]) { |
| ; GFX6-HSA-NEXT: [[KERN_LDS_PTR_KERNARG_SEGMENT:%.*]] = call nonnull align 16 dereferenceable(264) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() |
| ; GFX6-HSA-NEXT: store i32 0, ptr addrspace(3) [[LDS]], align 4 |
| ; GFX6-HSA-NEXT: ret void |
| ; |
| ; GFX6-MESA-LABEL: define amdgpu_kernel void @kern_lds_ptr( |
| ; GFX6-MESA-SAME: ptr addrspace(3) [[LDS:%.*]]) { |
| ; GFX6-MESA-NEXT: [[KERN_LDS_PTR_KERNARG_SEGMENT:%.*]] = call nonnull align 16 dereferenceable(260) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() |
| ; GFX6-MESA-NEXT: store i32 0, ptr addrspace(3) [[LDS]], align 4 |
| ; GFX6-MESA-NEXT: ret void |
| ; |
| store i32 0, ptr addrspace(3) %lds, align 4 |
| ret void |
| } |
| ;. |
| ; GFX7-HSA: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } |
| ;. |
| ; GFX7-MESA: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } |
| ;. |
| ; GFX7-HSA: [[META0]] = !{} |
| ;. |
| ; GFX7-MESA: [[META0]] = !{} |
| ;. |
| ; GFX6-HSA: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } |
| ;. |
| ; GFX6-MESA: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } |
| ;. |