diff options
author | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2016-04-07 19:54:19 +0000 |
---|---|---|
committer | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2016-04-07 19:54:19 +0000 |
commit | 20d977a3e68aa1d59d307000c53e420ad3ee6881 (patch) | |
tree | c37a7e2ced692fb63a80770eca833414ad5ce673 | |
parent | d5dbee66be5fbcbe3d57c3858002b3deafc9228b (diff) |
[AMDGPU] Implement get_local_size for amdgcn--amdhsa triple
Differential Revision: http://reviews.llvm.org/D18284
git-svn-id: https://llvm.org/svn/llvm-project/libclc/trunk@265713 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | amdgcn-amdhsa/lib/OVERRIDES | 0 | ||||
-rw-r--r-- | amdgcn-amdhsa/lib/SOURCES | 1 | ||||
-rw-r--r-- | amdgcn-amdhsa/lib/workitem/get_local_size.ll | 35 | ||||
-rwxr-xr-x | configure.py | 5 |
5 files changed, 41 insertions, 1 deletions
@@ -1,5 +1,6 @@ Makefile amdgcn-- +amdgcn--amdhsa build/*.pyc built_libs/ generic-- diff --git a/amdgcn-amdhsa/lib/OVERRIDES b/amdgcn-amdhsa/lib/OVERRIDES new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/amdgcn-amdhsa/lib/OVERRIDES diff --git a/amdgcn-amdhsa/lib/SOURCES b/amdgcn-amdhsa/lib/SOURCES new file mode 100644 index 0000000..b33368d --- /dev/null +++ b/amdgcn-amdhsa/lib/SOURCES @@ -0,0 +1 @@ +workitem/get_local_size.ll diff --git a/amdgcn-amdhsa/lib/workitem/get_local_size.ll b/amdgcn-amdhsa/lib/workitem/get_local_size.ll new file mode 100644 index 0000000..c4df027 --- /dev/null +++ b/amdgcn-amdhsa/lib/workitem/get_local_size.ll @@ -0,0 +1,35 @@ +declare i8 addrspace(2)* @llvm.amdgcn.dispatch.ptr() #0 + +define i32 @get_local_size(i32 %dim) #1 { + %dispatch_ptr = call noalias nonnull dereferenceable(64) i8 addrspace(2)* @llvm.amdgcn.dispatch.ptr() + %dispatch_ptr_i32 = bitcast i8 addrspace(2)* %dispatch_ptr to i32 addrspace(2)* + %xy_size_ptr = getelementptr inbounds i32, i32 addrspace(2)* %dispatch_ptr_i32, i64 1 + %xy_size = load i32, i32 addrspace(2)* %xy_size_ptr, align 4, !invariant.load !0 + switch i32 %dim, label %default [ + i32 0, label %x_dim + i32 1, label %y_dim + i32 2, label %z_dim + ] + +x_dim: + %x_size = and i32 %xy_size, 65535 + ret i32 %x_size + +y_dim: + %y_size = lshr i32 %xy_size, 16 + ret i32 %y_size + +z_dim: + %z_size_ptr = getelementptr inbounds i32, i32 addrspace(2)* %dispatch_ptr_i32, i64 2 + %z_size = load i32, i32 addrspace(2)* %z_size_ptr, align 4, !invariant.load !0, !range !1 + ret i32 %z_size + +default: + ret i32 1 +} + +attributes #0 = { nounwind readnone } +attributes #1 = { alwaysinline norecurse nounwind readonly } + +!0 = !{} +!1 = !{ i32 0, i32 257 } diff --git a/configure.py b/configure.py index 2663212..63f5ada 100755 --- a/configure.py +++ b/configure.py @@ -102,6 +102,9 @@ available_targets = { 'amdgcn--': { 'devices' : [{'gpu' : 'tahiti', 'aliases' : ['pitcairn', 'verde', 'oland', 'hainan', 'bonaire', 'kabini', 'kaveri', 'hawaii','mullins','tonga','carrizo','iceland','fiji','stoney'], 'defines' : {}} ]}, + 'amdgcn--amdhsa': { 'devices' : + [{'gpu' : '', 'aliases' : ['bonaire', 'hawaii', 'kabini', 'kaveri', 'mullins', 'carrizo', 'stoney', 'fiji', 'iceland', 'tonga'], + 'defines' : {}} ]}, 'nvptx--' : { 'devices' : [{'gpu' : '', 'aliases' : [], 'defines' : {'all' : ['cl_khr_fp64']}}]}, 'nvptx64--' : { 'devices' : [{'gpu' : '', 'aliases' : [], @@ -112,7 +115,7 @@ available_targets = { 'defines' : {'all' : ['cl_khr_fp64']}}]}, } -default_targets = ['nvptx--nvidiacl', 'nvptx64--nvidiacl', 'r600--', 'amdgcn--'] +default_targets = ['nvptx--nvidiacl', 'nvptx64--nvidiacl', 'r600--', 'amdgcn--', 'amdgcn--amdhsa'] targets = args if not targets: |