1; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-xnack < %s | FileCheck --check-prefixes=GCN,GFX9 %s 2; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-xnack < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1010,GFX1010W32 %s 3; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-xnack -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1010,GFX1010W64 %s 4; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s 5; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s 6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s 7; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s 8; RUN: llc -mtriple=amdgcn -mcpu=gfx1101 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s 9; RUN: llc -mtriple=amdgcn -mcpu=gfx1101 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s 10; RUN: llc -mtriple=amdgcn -mcpu=gfx1102 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s 11; RUN: llc -mtriple=amdgcn -mcpu=gfx1102 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s 12; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W32,GFX1030,GFX1030W32 %s 13; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX10,GFX10W64,GFX1030,GFX1030W64 %s 14; RUN: llc -mtriple=amdgcn -mcpu=gfx1151 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s 15; RUN: llc -mtriple=amdgcn -mcpu=gfx1151 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s 16; RUN: llc -mtriple=amdgcn -mcpu=gfx1152 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W32 %s 17; RUN: llc -mtriple=amdgcn -mcpu=gfx1152 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W64 %s 18; RUN: llc -mtriple=amdgcn -mcpu=gfx1153 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W32 %s 19; RUN: llc -mtriple=amdgcn -mcpu=gfx1153 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1030,GFX1030W64 %s 20; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W32 %s 21; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 < %s | FileCheck --check-prefixes=GCN,GFX1100,GFX1100W64 %s 22 23; GCN-LABEL: {{^}}max_occupancy: 24; GFX9: ; Occupancy: 10 25; GFX1010: ; Occupancy: 20 26; GFX1030: ; Occupancy: 16 27; GFX1100: ; Occupancy: 16 28define amdgpu_kernel void @max_occupancy() #10 { 29 ret void 30} 31 32; GCN-LABEL: {{^}}limited_occupancy_3: 33; GFX9: ; Occupancy: 3 34; GFX10W64: ; Occupancy: 3 35; GFX10W32: ; Occupancy: 4 36; GFX1100W64: ; Occupancy: 3 37; GFX1100W32: ; Occupancy: 5 38define amdgpu_kernel void @limited_occupancy_3() #0 { 39 ret void 40} 41 42; GCN-LABEL: {{^}}limited_occupancy_18: 43; GFX9: ; Occupancy: 10 44; GFX1010: ; Occupancy: 18 45; GFX1030: ; Occupancy: 16 46; GFX1100: ; Occupancy: 16 47define amdgpu_kernel void @limited_occupancy_18() #1 { 48 ret void 49} 50 51; GCN-LABEL: {{^}}limited_occupancy_19: 52; GFX9: ; Occupancy: 10 53; GFX1010: ; Occupancy: 20 54; GFX1030: ; Occupancy: 16 55; GFX1100: ; Occupancy: 16 56define amdgpu_kernel void @limited_occupancy_19() #2 { 57 ret void 58} 59 60; GCN-LABEL: {{^}}used_24_vgprs: 61; GFX9: ; Occupancy: 10 62; GFX1010: ; Occupancy: 20 63; GFX1030: ; Occupancy: 16 64; GFX1100: ; Occupancy: 16 65define amdgpu_kernel void @used_24_vgprs() #10 { 66 call void asm sideeffect "", "~{v23}" () 67 ret void 68} 69 70; GCN-LABEL: {{^}}used_28_vgprs: 71; GFX9: ; Occupancy: 9 72; GFX1010W64: ; Occupancy: 18 73; GFX1010W32: ; Occupancy: 20 74; GFX1030: ; Occupancy: 16 75; GFX1100: ; Occupancy: 16 76define amdgpu_kernel void @used_28_vgprs() #10 { 77 call void asm sideeffect "", "~{v27}" () 78 ret void 79} 80 81; GCN-LABEL: {{^}}used_32_vgprs: 82; GFX9: ; Occupancy: 8 83; GFX10W64: ; Occupancy: 16 84; GFX1010W32: ; Occupancy: 20 85; GFX1030W32: ; Occupancy: 16 86; GFX1100: ; Occupancy: 16 87define amdgpu_kernel void @used_32_vgprs() #10 { 88 call void asm sideeffect "", "~{v31}" () 89 ret void 90} 91 92; GCN-LABEL: {{^}}used_36_vgprs: 93; GFX9: ; Occupancy: 7 94; GFX1010W64: ; Occupancy: 14 95; GFX1010W32: ; Occupancy: 20 96; GFX1030W64: ; Occupancy: 12 97; GFX1030W32: ; Occupancy: 16 98; GFX1100: ; Occupancy: 16 99define amdgpu_kernel void @used_36_vgprs() #10 { 100 call void asm sideeffect "", "~{v35}" () 101 ret void 102} 103 104; GCN-LABEL: {{^}}used_40_vgprs: 105; GFX9: ; Occupancy: 6 106; GFX10W64: ; Occupancy: 12 107; GFX1010W32: ; Occupancy: 20 108; GFX1030W32: ; Occupancy: 16 109; GFX1100: ; Occupancy: 16 110define amdgpu_kernel void @used_40_vgprs() #10 { 111 call void asm sideeffect "", "~{v39}" () 112 ret void 113} 114 115; GCN-LABEL: {{^}}used_44_vgprs: 116; GFX9: ; Occupancy: 5 117; GFX1010W64: ; Occupancy: 11 118; GFX1010W32: ; Occupancy: 20 119; GFX1030W64: ; Occupancy: 10 120; GFX1030W32: ; Occupancy: 16 121; GFX1100: ; Occupancy: 16 122define amdgpu_kernel void @used_44_vgprs() #10 { 123 call void asm sideeffect "", "~{v43}" () 124 ret void 125} 126 127; GCN-LABEL: {{^}}used_48_vgprs: 128; GFX9: ; Occupancy: 5 129; GFX10W64: ; Occupancy: 10 130; GFX1010W32: ; Occupancy: 20 131; GFX1030W32: ; Occupancy: 16 132; GFX1100: ; Occupancy: 16 133define amdgpu_kernel void @used_48_vgprs() #10 { 134 call void asm sideeffect "", "~{v47}" () 135 ret void 136} 137 138; GCN-LABEL: {{^}}used_56_vgprs: 139; GFX9: ; Occupancy: 4 140; GFX10W64: ; Occupancy: 9 141; GFX1010W32: ; Occupancy: 18 142; GFX1030W32: ; Occupancy: 16 143; GFX1100W64: ; Occupancy: 12 144; GFX1100W32: ; Occupancy: 16 145define amdgpu_kernel void @used_56_vgprs() #10 { 146 call void asm sideeffect "", "~{v55}" () 147 ret void 148} 149 150; GCN-LABEL: {{^}}used_64_vgprs: 151; GFX9: ; Occupancy: 4 152; GFX10W64: ; Occupancy: 8 153; GFX10W32: ; Occupancy: 16 154; GFX1100W64: ; Occupancy: 10 155; GFX1100W32: ; Occupancy: 16 156define amdgpu_kernel void @used_64_vgprs() #10 { 157 call void asm sideeffect "", "~{v63}" () 158 ret void 159} 160 161; GCN-LABEL: {{^}}used_72_vgprs: 162; GFX9: ; Occupancy: 3 163; GFX10W64: ; Occupancy: 7 164; GFX1010W32: ; Occupancy: 14 165; GFX1030W32: ; Occupancy: 12 166; GFX1100W64: ; Occupancy: 10 167; GFX1100W32: ; Occupancy: 16 168define amdgpu_kernel void @used_72_vgprs() #10 { 169 call void asm sideeffect "", "~{v71}" () 170 ret void 171} 172 173; GCN-LABEL: {{^}}used_80_vgprs: 174; GFX9: ; Occupancy: 3 175; GFX10W64: ; Occupancy: 6 176; GFX10W32: ; Occupancy: 12 177; GFX1100W64: ; Occupancy: 9 178; GFX1100W32: ; Occupancy: 16 179define amdgpu_kernel void @used_80_vgprs() #10 { 180 call void asm sideeffect "", "~{v79}" () 181 ret void 182} 183 184; GCN-LABEL: {{^}}used_84_vgprs: 185; GFX9: ; Occupancy: 3 186; GFX1010W64: ; Occupancy: 6 187; GFX1010W32: ; Occupancy: 11 188; GFX1030W64: ; Occupancy: 5 189; GFX1030W32: ; Occupancy: 10 190; GFX1100W64: ; Occupancy: 9 191; GFX1100W32: ; Occupancy: 16 192define amdgpu_kernel void @used_84_vgprs() #10 { 193 call void asm sideeffect "", "~{v83}" () 194 ret void 195} 196 197; GCN-LABEL: {{^}}used_88_vgprs: 198; GFX9: ; Occupancy: 2 199; GFX10W64: ; Occupancy: 5 200; GFX1010W32: ; Occupancy: 11 201; GFX1030W32: ; Occupancy: 10 202; GFX1100W64: ; Occupancy: 8 203; GFX1100W32: ; Occupancy: 16 204define amdgpu_kernel void @used_88_vgprs() #10 { 205 call void asm sideeffect "", "~{v87}" () 206 ret void 207} 208 209; GCN-LABEL: {{^}}used_96_vgprs: 210; GFX9: ; Occupancy: 2 211; GFX10W64: ; Occupancy: 5 212; GFX10W32: ; Occupancy: 10 213; GFX1100W64: ; Occupancy: 8 214; GFX1100W32: ; Occupancy: 16 215define amdgpu_kernel void @used_96_vgprs() #10 { 216 call void asm sideeffect "", "~{v95}" () 217 ret void 218} 219 220; GCN-LABEL: {{^}}used_100_vgprs: 221; GFX9: ; Occupancy: 2 222; GFX1010W64: ; Occupancy: 5 223; GFX1030W64: ; Occupancy: 4 224; GFX10W32: ; Occupancy: 9 225; GFX1100W64: ; Occupancy: 7 226; GFX1100W32: ; Occupancy: 12 227define amdgpu_kernel void @used_100_vgprs() #10 { 228 call void asm sideeffect "", "~{v99}" () 229 ret void 230} 231 232; GCN-LABEL: {{^}}used_112_vgprs: 233; GFX9: ; Occupancy: 2 234; GFX10W64: ; Occupancy: 4 235; GFX10W32: ; Occupancy: 9 236; GFX1100W64: ; Occupancy: 6 237; GFX1100W32: ; Occupancy: 12 238define amdgpu_kernel void @used_112_vgprs() #10 { 239 call void asm sideeffect "", "~{v111}" () 240 ret void 241} 242 243; GCN-LABEL: {{^}}used_128_vgprs: 244; GFX9: ; Occupancy: 2 245; GFX10W64: ; Occupancy: 4 246; GFX10W32: ; Occupancy: 8 247; GFX1100W64: ; Occupancy: 5 248; GFX1100W32: ; Occupancy: 10 249define amdgpu_kernel void @used_128_vgprs() #10 { 250 call void asm sideeffect "", "~{v127}" () 251 ret void 252} 253 254; GCN-LABEL: {{^}}used_144_vgprs: 255; GFX9: ; Occupancy: 1 256; GFX10W64: ; Occupancy: 3 257; GFX10W32: ; Occupancy: 7 258; GFX1100W64: ; Occupancy: 5 259; GFX1100W32: ; Occupancy: 10 260define amdgpu_kernel void @used_144_vgprs() #10 { 261 call void asm sideeffect "", "~{v143}" () 262 ret void 263} 264 265; GCN-LABEL: {{^}}used_168_vgprs: 266; GFX9: ; Occupancy: 1 267; GFX10W64: ; Occupancy: 3 268; GFX1010W32: ; Occupancy: 6 269; GFX1030W32: ; Occupancy: 5 270; GFX1100W64: ; Occupancy: 4 271; GFX1100W32: ; Occupancy: 9 272define amdgpu_kernel void @used_168_vgprs() #10 { 273 call void asm sideeffect "", "~{v167}" () 274 ret void 275} 276 277; GCN-LABEL: {{^}}used_200_vgprs: 278; GFX9: ; Occupancy: 1 279; GFX10W64: ; Occupancy: 2 280; GFX1010W32: ; Occupancy: 5 281; GFX1030W32: ; Occupancy: 4 282; GFX1100W64: ; Occupancy: 3 283; GFX1100W32: ; Occupancy: 7 284define amdgpu_kernel void @used_200_vgprs() #10 { 285 call void asm sideeffect "", "~{v199}" () 286 ret void 287} 288 289; GCN-LABEL: {{^}}used_256_vgprs: 290; GFX9: ; Occupancy: 1 291; GFX10W64: ; Occupancy: 2 292; GFX10W32: ; Occupancy: 4 293; GFX1100W64: ; Occupancy: 2 294; GFX1100W32: ; Occupancy: 5 295define amdgpu_kernel void @used_256_vgprs() #10 { 296 call void asm sideeffect "", "~{v255}" () 297 ret void 298} 299 300; GCN-LABEL: {{^}}used_80_sgprs: 301; GFX9: ; Occupancy: 10 302; GFX1010: ; Occupancy: 20 303; GFX1030: ; Occupancy: 16 304; GFX1100: ; Occupancy: 16 305define amdgpu_kernel void @used_80_sgprs() #10 { 306 call void asm sideeffect "", "~{s79}" () 307 ret void 308} 309 310; GCN-LABEL: {{^}}used_88_sgprs: 311; GFX9: ; Occupancy: 9 312; GFX1010: ; Occupancy: 20 313; GFX1030: ; Occupancy: 16 314; GFX1100: ; Occupancy: 16 315define amdgpu_kernel void @used_88_sgprs() #10 { 316 call void asm sideeffect "", "~{s87}" () 317 ret void 318} 319 320; GCN-LABEL: {{^}}used_100_sgprs: 321; GFX9: ; Occupancy: 8 322; GFX1010: ; Occupancy: 20 323; GFX1030: ; Occupancy: 16 324; GFX1100: ; Occupancy: 16 325define amdgpu_kernel void @used_100_sgprs() #10 { 326 call void asm sideeffect "", "~{s99}" () 327 ret void 328} 329 330; GCN-LABEL: {{^}}used_101_sgprs: 331; GFX9: ; Occupancy: 7 332; GFX1010: ; Occupancy: 20 333; GFX1030: ; Occupancy: 16 334; GFX1100: ; Occupancy: 16 335define amdgpu_kernel void @used_101_sgprs() #10 { 336 call void asm sideeffect "", "~{s100}" () 337 ret void 338} 339 340; GCN-LABEL: {{^}}used_lds_6552: 341; GFX9: ; Occupancy: 8 342; GFX1010W64: ; Occupancy: 20 343; GFX1030W64: ; Occupancy: 16 344; GFX10W32: ; Occupancy: 16 345; GFX1100: ; Occupancy: 16 346@lds6552 = internal addrspace(3) global [6552 x i8] undef, align 4 347define amdgpu_kernel void @used_lds_6552() { 348 store volatile i8 1, ptr addrspace(3) @lds6552 349 ret void 350} 351 352; GCN-LABEL: {{^}}used_lds_6556: 353; GFX9: ; Occupancy: 8 354; GFX1010W64: ; Occupancy: 20 355; GFX1030W64: ; Occupancy: 16 356; GFX10W32: ; Occupancy: 16 357; GFX1100: ; Occupancy: 16 358@lds6556 = internal addrspace(3) global [6556 x i8] undef, align 4 359define amdgpu_kernel void @used_lds_6556() { 360 store volatile i8 1, ptr addrspace(3) @lds6556 361 ret void 362} 363 364; GCN-LABEL: {{^}}used_lds_13112: 365; GFX9: ; Occupancy: 8 366; GFX1010W64: ; Occupancy: 20 367; GFX1030W64: ; Occupancy: 16 368; GFX10W32: ; Occupancy: 16 369; GFX1100: ; Occupancy: 16 370@lds13112 = internal addrspace(3) global [13112 x i8] undef, align 4 371define amdgpu_kernel void @used_lds_13112() { 372 store volatile i8 1, ptr addrspace(3) @lds13112 373 ret void 374} 375 376; GCN-LABEL: {{^}}used_lds_8252_max_group_size_64: 377; GFX9: ; Occupancy: 2{{$}} 378; GFX10W64: ; Occupancy: 4{{$}} 379; GFX10W32: ; Occupancy: 8{{$}} 380; GFX1100W64: ; Occupancy: 4{{$}} 381; GFX1100W32: ; Occupancy: 8{{$}} 382@lds8252 = internal addrspace(3) global [8252 x i8] undef, align 4 383define amdgpu_kernel void @used_lds_8252_max_group_size_64() #3 { 384 store volatile i8 1, ptr addrspace(3) @lds8252 385 ret void 386} 387 388; GCN-LABEL: {{^}}used_lds_8252_max_group_size_96: 389; GFX9: ; Occupancy: 4{{$}} 390; GFX10W64: ; Occupancy: 8{{$}} 391; GFX10W32: ; Occupancy: 12{{$}} 392; GFX1100W64: ; Occupancy: 8{{$}} 393; GFX1100W32: ; Occupancy: 12{{$}} 394define amdgpu_kernel void @used_lds_8252_max_group_size_96() #4 { 395 store volatile i8 1, ptr addrspace(3) @lds8252 396 ret void 397} 398 399; GCN-LABEL: {{^}}used_lds_8252_max_group_size_128: 400; GFX9: ; Occupancy: 4{{$}} 401; GFX10W64: ; Occupancy: 8{{$}} 402; GFX10W32: ; Occupancy: 15{{$}} 403; GFX1100W64: ; Occupancy: 8{{$}} 404; GFX1100W32: ; Occupancy: 15{{$}} 405define amdgpu_kernel void @used_lds_8252_max_group_size_128() #5 { 406 store volatile i8 1, ptr addrspace(3) @lds8252 407 ret void 408} 409 410; GCN-LABEL: {{^}}used_lds_8252_max_group_size_192: 411; GFX9: ; Occupancy: 6{{$}} 412; GFX10W64: ; Occupancy: 12{{$}} 413; GFX1010W32: ; Occupancy: 20{{$}} 414; GFX1030W32: ; Occupancy: 15{{$}} 415; GFX1100W64: ; Occupancy: 12{{$}} 416; GFX1100W32: ; Occupancy: 15{{$}} 417define amdgpu_kernel void @used_lds_8252_max_group_size_192() #6 { 418 store volatile i8 1, ptr addrspace(3) @lds8252 419 ret void 420} 421 422; GCN-LABEL: {{^}}used_lds_8252_max_group_size_256: 423; GFX9: ; Occupancy: 7{{$}} 424; GFX10W64: ; Occupancy: 15{{$}} 425; GFX1010W32: ; Occupancy: 20{{$}} 426; GFX1030W32: ; Occupancy: 16{{$}} 427; GFX1100W64: ; Occupancy: 15{{$}} 428; GFX1100W32: ; Occupancy: 16{{$}} 429define amdgpu_kernel void @used_lds_8252_max_group_size_256() #7 { 430 store volatile i8 1, ptr addrspace(3) @lds8252 431 ret void 432} 433 434; GCN-LABEL: {{^}}used_lds_8252_max_group_size_512: 435; GFX9: ; Occupancy: 10{{$}} 436; GFX1010: ; Occupancy: 20{{$}} 437; GFX1030: ; Occupancy: 16{{$}} 438; GFX1100: ; Occupancy: 16{{$}} 439define amdgpu_kernel void @used_lds_8252_max_group_size_512() #8 { 440 store volatile i8 1, ptr addrspace(3) @lds8252 441 ret void 442} 443 444; GCN-LABEL: {{^}}used_lds_8252_max_group_size_1024: 445; GFX9: ; Occupancy: 8{{$}} 446; GFX1010W32: ; Occupancy: 16{{$}} 447; GFX1010W64: ; Occupancy: 20{{$}} 448; GFX1030: ; Occupancy: 16{{$}} 449; GFX1100: ; Occupancy: 16{{$}} 450define amdgpu_kernel void @used_lds_8252_max_group_size_1024() #9 { 451 store volatile i8 1, ptr addrspace(3) @lds8252 452 ret void 453} 454 455; GCN-LABEL: {{^}}used_lds_8252_max_group_size_32: 456; GFX9: ; Occupancy: 2{{$}} 457; GFX10: ; Occupancy: 4{{$}} 458; GFX1100: ; Occupancy: 4{{$}} 459define amdgpu_kernel void @used_lds_8252_max_group_size_32() #10 { 460 store volatile i8 1, ptr addrspace(3) @lds8252 461 ret void 462} 463 464attributes #0 = { "amdgpu-waves-per-eu"="2,3" "amdgpu-flat-work-group-size"="1,64" } 465attributes #1 = { "amdgpu-waves-per-eu"="18,18" "amdgpu-flat-work-group-size"="1,32" } 466attributes #2 = { "amdgpu-waves-per-eu"="19,19" "amdgpu-flat-work-group-size"="1,32" } 467attributes #3 = { "amdgpu-flat-work-group-size"="1,64" } 468attributes #4 = { "amdgpu-flat-work-group-size"="1,96" } 469attributes #5 = { "amdgpu-flat-work-group-size"="1,128" } 470attributes #6 = { "amdgpu-flat-work-group-size"="1,192" } 471attributes #7 = { "amdgpu-flat-work-group-size"="1,256" } 472attributes #8 = { "amdgpu-flat-work-group-size"="1,512" } 473attributes #9 = { "amdgpu-flat-work-group-size"="1,1024" } 474attributes #10 = { "amdgpu-flat-work-group-size"="1,32" } 475