Author: tstellar Date: Fri Sep 16 17:43:29 2016 New Revision: 281791 URL: http://llvm.org/viewvc/llvm-project?rev=281791&view=rev Log: amdgcn-amdhsa: Add get_global_size() implementation
Added: libclc/trunk/amdgcn-amdhsa/lib/workitem/get_global_size.ll Modified: libclc/trunk/amdgcn-amdhsa/lib/SOURCES Modified: libclc/trunk/amdgcn-amdhsa/lib/SOURCES URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/amdgcn-amdhsa/lib/SOURCES?rev=281791&r1=281790&r2=281791&view=diff ============================================================================== --- libclc/trunk/amdgcn-amdhsa/lib/SOURCES (original) +++ libclc/trunk/amdgcn-amdhsa/lib/SOURCES Fri Sep 16 17:43:29 2016 @@ -1 +1,2 @@ +workitem/get_global_size.ll workitem/get_local_size.ll Added: libclc/trunk/amdgcn-amdhsa/lib/workitem/get_global_size.ll URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/amdgcn-amdhsa/lib/workitem/get_global_size.ll?rev=281791&view=auto ============================================================================== --- libclc/trunk/amdgcn-amdhsa/lib/workitem/get_global_size.ll (added) +++ libclc/trunk/amdgcn-amdhsa/lib/workitem/get_global_size.ll Fri Sep 16 17:43:29 2016 @@ -0,0 +1,39 @@ +declare i8 addrspace(2)* @llvm.amdgcn.dispatch.ptr() #0 + +define i64 @get_global_size(i32 %dim) #1 { + %dispatch_ptr = call noalias nonnull dereferenceable(64) i8 addrspace(2)* @llvm.amdgcn.dispatch.ptr() + switch i32 %dim, label %default [ + i32 0, label %x + i32 1, label %y + i32 2, label %z + ] + +x: + %ptr_x = getelementptr inbounds i8, i8 addrspace(2)* %dispatch_ptr, i64 12 + %ptr_x32 = bitcast i8 addrspace(2)* %ptr_x to i32 addrspace(2)* + %x32 = load i32, i32 addrspace(2)* %ptr_x32, align 4, !invariant.load !0 + %size_x = zext i32 %x32 to i64 + ret i64 %size_x + +y: + %ptr_y = getelementptr inbounds i8, i8 addrspace(2)* %dispatch_ptr, i64 16 + %ptr_y32 = bitcast i8 addrspace(2)* %ptr_y to i32 addrspace(2)* + %y32 = load i32, i32 addrspace(2)* %ptr_y32, align 4, !invariant.load !0 + %size_y = zext i32 %y32 to i64 + ret i64 %size_y + +z: + %ptr_z = getelementptr inbounds i8, i8 addrspace(2)* %dispatch_ptr, i64 20 + %ptr_z32 = bitcast i8 addrspace(2)* %ptr_z to i32 addrspace(2)* + %z32 = load i32, i32 addrspace(2)* %ptr_z32, align 4, !invariant.load !0 + %size_z = zext i32 %z32 to i64 + ret i64 %size_z + +default: + ret i64 1 +} + +attributes #0 = { nounwind readnone } +attributes #1 = { alwaysinline norecurse nounwind readonly } + +!0 = !{} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits