blob: 53c170a5d9b387e1875460fa0e8f9a3b385c7c57 [file] [edit]
; 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) }
;.