brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 6fb485c Raw
156 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: opt -S -passes=always-inline -o %t.bc %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx1102 -mattr=+wavefrontsize32 -misched=gcn-max-occupancy < %t.bc | FileCheck %s --check-prefixes=CHECK4 5; Provide a long sequence of 32 vec4 load/store pairs that ought to be fully6; overlapped for latency hiding. Doing so requires using (at least) 128 VGPRs,7; which (incorrectly) used to look to the scheduler like an occupancy reduction.8 9; 6 kB of LDS, allows 10 workgroups10@lds = internal addrspace(3) global [384 x <4 x i32>] poison11 12define internal amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 %ofs) alwaysinline {13  %src.gep = getelementptr <4 x i32>, ptr addrspace(1) %src, i32 %ofs14  %ld = load <4 x i32>, ptr addrspace(1) %src.gep15  %dst.gep = getelementptr <4 x i32>, ptr addrspace(3) @lds, i32 %ofs16  store <4 x i32> %ld, ptr addrspace(3) %dst.gep17  ret void18}19 20define amdgpu_cs void @test(ptr addrspace(1) %src) "amdgpu-flat-work-group-size"="32,32" {21; CHECK-LABEL: test:22; CHECK:       ; %bb.0:23; CHECK-NEXT:    s_clause 0x1f24; CHECK-NEXT:    global_load_b128 v[2:5], v[0:1], off25; CHECK-NEXT:    global_load_b128 v[6:9], v[0:1], off offset:1626; CHECK-NEXT:    global_load_b128 v[10:13], v[0:1], off offset:3227; CHECK-NEXT:    global_load_b128 v[14:17], v[0:1], off offset:4828; CHECK-NEXT:    global_load_b128 v[18:21], v[0:1], off offset:6429; CHECK-NEXT:    global_load_b128 v[22:25], v[0:1], off offset:8030; CHECK-NEXT:    global_load_b128 v[26:29], v[0:1], off offset:9631; CHECK-NEXT:    global_load_b128 v[30:33], v[0:1], off offset:11232; CHECK-NEXT:    global_load_b128 v[34:37], v[0:1], off offset:12833; CHECK-NEXT:    global_load_b128 v[38:41], v[0:1], off offset:14434; CHECK-NEXT:    global_load_b128 v[42:45], v[0:1], off offset:16035; CHECK-NEXT:    global_load_b128 v[46:49], v[0:1], off offset:17636; CHECK-NEXT:    global_load_b128 v[50:53], v[0:1], off offset:19237; CHECK-NEXT:    global_load_b128 v[54:57], v[0:1], off offset:20838; CHECK-NEXT:    global_load_b128 v[58:61], v[0:1], off offset:22439; CHECK-NEXT:    global_load_b128 v[62:65], v[0:1], off offset:24040; CHECK-NEXT:    global_load_b128 v[66:69], v[0:1], off offset:25641; CHECK-NEXT:    global_load_b128 v[70:73], v[0:1], off offset:27242; CHECK-NEXT:    global_load_b128 v[74:77], v[0:1], off offset:28843; CHECK-NEXT:    global_load_b128 v[78:81], v[0:1], off offset:30444; CHECK-NEXT:    global_load_b128 v[82:85], v[0:1], off offset:32045; CHECK-NEXT:    global_load_b128 v[86:89], v[0:1], off offset:33646; CHECK-NEXT:    global_load_b128 v[90:93], v[0:1], off offset:35247; CHECK-NEXT:    global_load_b128 v[94:97], v[0:1], off offset:36848; CHECK-NEXT:    global_load_b128 v[98:101], v[0:1], off offset:38449; CHECK-NEXT:    global_load_b128 v[102:105], v[0:1], off offset:40050; CHECK-NEXT:    global_load_b128 v[106:109], v[0:1], off offset:41651; CHECK-NEXT:    global_load_b128 v[110:113], v[0:1], off offset:43252; CHECK-NEXT:    global_load_b128 v[114:117], v[0:1], off offset:44853; CHECK-NEXT:    global_load_b128 v[118:121], v[0:1], off offset:46454; CHECK-NEXT:    global_load_b128 v[122:125], v[0:1], off offset:48055; CHECK-NEXT:    global_load_b128 v[126:129], v[0:1], off offset:49656; CHECK-NEXT:    v_mov_b32_e32 v0, 057; CHECK-NEXT:    s_waitcnt vmcnt(31)58; CHECK-NEXT:    ds_store_b128 v0, v[2:5]59; CHECK-NEXT:    s_waitcnt vmcnt(30)60; CHECK-NEXT:    ds_store_b128 v0, v[6:9] offset:1661; CHECK-NEXT:    s_waitcnt vmcnt(29)62; CHECK-NEXT:    ds_store_b128 v0, v[10:13] offset:3263; CHECK-NEXT:    s_waitcnt vmcnt(28)64; CHECK-NEXT:    ds_store_b128 v0, v[14:17] offset:4865; CHECK-NEXT:    s_waitcnt vmcnt(27)66; CHECK-NEXT:    ds_store_b128 v0, v[18:21] offset:6467; CHECK-NEXT:    s_waitcnt vmcnt(26)68; CHECK-NEXT:    ds_store_b128 v0, v[22:25] offset:8069; CHECK-NEXT:    s_waitcnt vmcnt(25)70; CHECK-NEXT:    ds_store_b128 v0, v[26:29] offset:9671; CHECK-NEXT:    s_waitcnt vmcnt(24)72; CHECK-NEXT:    ds_store_b128 v0, v[30:33] offset:11273; CHECK-NEXT:    s_waitcnt vmcnt(23)74; CHECK-NEXT:    ds_store_b128 v0, v[34:37] offset:12875; CHECK-NEXT:    s_waitcnt vmcnt(22)76; CHECK-NEXT:    ds_store_b128 v0, v[38:41] offset:14477; CHECK-NEXT:    s_waitcnt vmcnt(21)78; CHECK-NEXT:    ds_store_b128 v0, v[42:45] offset:16079; CHECK-NEXT:    s_waitcnt vmcnt(20)80; CHECK-NEXT:    ds_store_b128 v0, v[46:49] offset:17681; CHECK-NEXT:    s_waitcnt vmcnt(19)82; CHECK-NEXT:    ds_store_b128 v0, v[50:53] offset:19283; CHECK-NEXT:    s_waitcnt vmcnt(18)84; CHECK-NEXT:    ds_store_b128 v0, v[54:57] offset:20885; CHECK-NEXT:    s_waitcnt vmcnt(17)86; CHECK-NEXT:    ds_store_b128 v0, v[58:61] offset:22487; CHECK-NEXT:    s_waitcnt vmcnt(16)88; CHECK-NEXT:    ds_store_b128 v0, v[62:65] offset:24089; CHECK-NEXT:    s_waitcnt vmcnt(15)90; CHECK-NEXT:    ds_store_b128 v0, v[66:69] offset:25691; CHECK-NEXT:    s_waitcnt vmcnt(14)92; CHECK-NEXT:    ds_store_b128 v0, v[70:73] offset:27293; CHECK-NEXT:    s_waitcnt vmcnt(13)94; CHECK-NEXT:    ds_store_b128 v0, v[74:77] offset:28895; CHECK-NEXT:    s_waitcnt vmcnt(12)96; CHECK-NEXT:    ds_store_b128 v0, v[78:81] offset:30497; CHECK-NEXT:    s_waitcnt vmcnt(11)98; CHECK-NEXT:    ds_store_b128 v0, v[82:85] offset:32099; CHECK-NEXT:    s_waitcnt vmcnt(10)100; CHECK-NEXT:    ds_store_b128 v0, v[86:89] offset:336101; CHECK-NEXT:    s_waitcnt vmcnt(9)102; CHECK-NEXT:    ds_store_b128 v0, v[90:93] offset:352103; CHECK-NEXT:    s_waitcnt vmcnt(8)104; CHECK-NEXT:    ds_store_b128 v0, v[94:97] offset:368105; CHECK-NEXT:    s_waitcnt vmcnt(7)106; CHECK-NEXT:    ds_store_b128 v0, v[98:101] offset:384107; CHECK-NEXT:    s_waitcnt vmcnt(6)108; CHECK-NEXT:    ds_store_b128 v0, v[102:105] offset:400109; CHECK-NEXT:    s_waitcnt vmcnt(5)110; CHECK-NEXT:    ds_store_b128 v0, v[106:109] offset:416111; CHECK-NEXT:    s_waitcnt vmcnt(4)112; CHECK-NEXT:    ds_store_b128 v0, v[110:113] offset:432113; CHECK-NEXT:    s_waitcnt vmcnt(3)114; CHECK-NEXT:    ds_store_b128 v0, v[114:117] offset:448115; CHECK-NEXT:    s_waitcnt vmcnt(2)116; CHECK-NEXT:    ds_store_b128 v0, v[118:121] offset:464117; CHECK-NEXT:    s_waitcnt vmcnt(1)118; CHECK-NEXT:    ds_store_b128 v0, v[122:125] offset:480119; CHECK-NEXT:    s_waitcnt vmcnt(0)120; CHECK-NEXT:    ds_store_b128 v0, v[126:129] offset:496121; CHECK-NEXT:    s_endpgm122  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 0)123  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 1)124  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 2)125  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 3)126  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 4)127  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 5)128  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 6)129  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 7)130  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 8)131  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 9)132  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 10)133  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 11)134  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 12)135  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 13)136  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 14)137  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 15)138  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 16)139  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 17)140  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 18)141  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 19)142  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 20)143  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 21)144  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 22)145  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 23)146  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 24)147  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 25)148  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 26)149  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 27)150  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 28)151  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 29)152  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 30)153  call amdgpu_gfx void @copy(ptr addrspace(1) %src, i32 31)154  ret void155}156