brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 4fcad25 Raw
87 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -S -mtriple=amdgcn-- -passes=amdgpu-lower-module-lds --amdgpu-lower-module-lds-strategy=hybrid < %s | FileCheck %s3 4;; Reduced from a larger test case. Checks that functions and kernels that use only dynamic lds5;; are lowered successfully. Previously they only worked if the kernel happened to also use static lds6;; variables. Artefact of implementing dynamic variables by adapting existing code for static.7 8@A = external addrspace(3) global [8 x ptr]9@B = external addrspace(3) global [0 x i32]10 11define amdgpu_kernel void @kernel_0() {12; CHECK-LABEL: define amdgpu_kernel void @kernel_0() #0 !llvm.amdgcn.lds.kernel.id !1 {13; CHECK-NEXT:    call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.kernel.kernel_0.lds) ]14; CHECK-NEXT:    call void @call_store_A()15; CHECK-NEXT:    ret void16;17  call void @call_store_A()18  ret void19}20 21define amdgpu_kernel void @kernel_1() {22; CHECK-LABEL: define amdgpu_kernel void @kernel_1() !llvm.amdgcn.lds.kernel.id !2 {23; CHECK-NEXT:    call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.kernel_1.dynlds) ]24; CHECK-NEXT:    [[PTR:%.*]] = call ptr @get_B_ptr()25; CHECK-NEXT:    ret void26;27  %ptr = call ptr @get_B_ptr()28  ret void29}30 31define amdgpu_kernel void @kernel_2() {32; CHECK-LABEL: define amdgpu_kernel void @kernel_2() #0 !llvm.amdgcn.lds.kernel.id !3 {33; CHECK-NEXT:    call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.kernel.kernel_2.lds) ]34; CHECK-NEXT:    call void @store_A()35; CHECK-NEXT:    ret void36;37  call void @store_A()38  ret void39}40 41define amdgpu_kernel void @kernel_3() {42; CHECK-LABEL: define amdgpu_kernel void @kernel_3() !llvm.amdgcn.lds.kernel.id !4 {43; CHECK-NEXT:    call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.kernel_3.dynlds) ]44; CHECK-NEXT:    [[PTR:%.*]] = call ptr @get_B_ptr()45; CHECK-NEXT:    ret void46;47  %ptr = call ptr @get_B_ptr()48  ret void49}50 51define private void @call_store_A() {52; CHECK-LABEL: define private void @call_store_A() {53; CHECK-NEXT:    call void @store_A()54; CHECK-NEXT:    ret void55;56  call void @store_A()57  ret void58}59 60define private void @store_A() {61; CHECK-LABEL: define private void @store_A() {62; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.amdgcn.lds.kernel.id()63; CHECK-NEXT:    [[A:%.*]] = getelementptr inbounds [4 x [1 x i32]], ptr addrspace(4) @llvm.amdgcn.lds.offset.table, i32 0, i32 [[TMP1]], i32 064; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspace(4) [[A]], align 465; CHECK-NEXT:    [[A1:%.*]] = inttoptr i32 [[TMP2]] to ptr addrspace(3)66; CHECK-NEXT:    [[TMP3:%.*]] = addrspacecast ptr addrspace(3) [[A1]] to ptr67; CHECK-NEXT:    store ptr [[TMP3]], ptr null, align 868; CHECK-NEXT:    ret void69;70  store ptr addrspacecast (ptr addrspace(3) @A to ptr), ptr null71  ret void72}73 74define private ptr @get_B_ptr() {75; CHECK-LABEL: define private ptr @get_B_ptr() {76; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.amdgcn.lds.kernel.id()77; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds [4 x i32], ptr addrspace(4) @llvm.amdgcn.dynlds.offset.table, i32 0, i32 [[TMP1]]78; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr addrspace(4) [[B]], align 479; CHECK-NEXT:    [[B1:%.*]] = inttoptr i32 [[TMP2]] to ptr addrspace(3)80; CHECK-NEXT:    [[TMP3:%.*]] = addrspacecast ptr addrspace(3) [[B1]] to ptr81; CHECK-NEXT:    ret ptr [[TMP3]]82;83  ret ptr addrspacecast (ptr addrspace(3) @B to ptr)84}85 86; CHECK: attributes #0 = { "amdgpu-lds-size"="64" }87