236 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck %s --check-prefix=GFX9003; RUN: llc -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck %s --check-prefix=GFX90A4; RUN: llc -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck %s --check-prefix=GFX9425; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck %s --check-prefix=GFX106; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck %s --check-prefix=GFX900-GISEL7 8declare void @llvm.amdgcn.global.load.lds(ptr addrspace(1) nocapture %gptr, ptr addrspace(3) nocapture %lptr, i32 %size, i32 %offset, i32 %aux)9 10define amdgpu_ps void @global_load_lds_dword_vaddr(ptr addrspace(1) nocapture %gptr, ptr addrspace(3) nocapture %lptr) {11; GFX900-LABEL: global_load_lds_dword_vaddr:12; GFX900: ; %bb.0: ; %main_body13; GFX900-NEXT: v_readfirstlane_b32 s0, v214; GFX900-NEXT: s_mov_b32 m0, s015; GFX900-NEXT: s_nop 016; GFX900-NEXT: global_load_dword v[0:1], off offset:16 glc lds17; GFX900-NEXT: s_endpgm18;19; GFX90A-LABEL: global_load_lds_dword_vaddr:20; GFX90A: ; %bb.0: ; %main_body21; GFX90A-NEXT: v_readfirstlane_b32 s0, v222; GFX90A-NEXT: s_mov_b32 m0, s023; GFX90A-NEXT: s_nop 024; GFX90A-NEXT: global_load_dword v[0:1], off offset:16 glc lds25; GFX90A-NEXT: s_endpgm26;27; GFX942-LABEL: global_load_lds_dword_vaddr:28; GFX942: ; %bb.0: ; %main_body29; GFX942-NEXT: v_readfirstlane_b32 s0, v230; GFX942-NEXT: s_mov_b32 m0, s031; GFX942-NEXT: s_nop 032; GFX942-NEXT: global_load_lds_dword v[0:1], off offset:16 sc033; GFX942-NEXT: s_endpgm34;35; GFX10-LABEL: global_load_lds_dword_vaddr:36; GFX10: ; %bb.0: ; %main_body37; GFX10-NEXT: v_readfirstlane_b32 s0, v238; GFX10-NEXT: s_mov_b32 m0, s039; GFX10-NEXT: global_load_dword v[0:1], off offset:16 glc lds40; GFX10-NEXT: s_endpgm41;42; GFX900-GISEL-LABEL: global_load_lds_dword_vaddr:43; GFX900-GISEL: ; %bb.0: ; %main_body44; GFX900-GISEL-NEXT: v_readfirstlane_b32 s0, v245; GFX900-GISEL-NEXT: s_mov_b32 m0, s046; GFX900-GISEL-NEXT: s_nop 047; GFX900-GISEL-NEXT: global_load_dword v[0:1], off offset:16 glc lds48; GFX900-GISEL-NEXT: s_endpgm49main_body:50 call void @llvm.amdgcn.global.load.lds(ptr addrspace(1) %gptr, ptr addrspace(3) %lptr, i32 4, i32 16, i32 1)51 ret void52}53 54define amdgpu_ps void @global_load_lds_dword_saddr(ptr addrspace(1) nocapture inreg %gptr, ptr addrspace(3) nocapture %lptr) {55; GFX900-LABEL: global_load_lds_dword_saddr:56; GFX900: ; %bb.0: ; %main_body57; GFX900-NEXT: v_readfirstlane_b32 s2, v058; GFX900-NEXT: v_mov_b32_e32 v1, 059; GFX900-NEXT: s_mov_b32 m0, s260; GFX900-NEXT: s_nop 061; GFX900-NEXT: global_load_dword v1, s[0:1] offset:32 slc lds62; GFX900-NEXT: s_endpgm63;64; GFX90A-LABEL: global_load_lds_dword_saddr:65; GFX90A: ; %bb.0: ; %main_body66; GFX90A-NEXT: v_readfirstlane_b32 s2, v067; GFX90A-NEXT: v_mov_b32_e32 v1, 068; GFX90A-NEXT: s_mov_b32 m0, s269; GFX90A-NEXT: s_nop 070; GFX90A-NEXT: global_load_dword v1, s[0:1] offset:32 slc lds71; GFX90A-NEXT: s_endpgm72;73; GFX942-LABEL: global_load_lds_dword_saddr:74; GFX942: ; %bb.0: ; %main_body75; GFX942-NEXT: v_readfirstlane_b32 s2, v076; GFX942-NEXT: v_mov_b32_e32 v1, 077; GFX942-NEXT: s_mov_b32 m0, s278; GFX942-NEXT: s_nop 079; GFX942-NEXT: global_load_lds_dword v1, s[0:1] offset:32 nt80; GFX942-NEXT: s_endpgm81;82; GFX10-LABEL: global_load_lds_dword_saddr:83; GFX10: ; %bb.0: ; %main_body84; GFX10-NEXT: v_readfirstlane_b32 s2, v085; GFX10-NEXT: v_mov_b32_e32 v0, 086; GFX10-NEXT: s_mov_b32 m0, s287; GFX10-NEXT: global_load_dword v0, s[0:1] offset:32 slc lds88; GFX10-NEXT: s_endpgm89;90; GFX900-GISEL-LABEL: global_load_lds_dword_saddr:91; GFX900-GISEL: ; %bb.0: ; %main_body92; GFX900-GISEL-NEXT: v_readfirstlane_b32 s2, v093; GFX900-GISEL-NEXT: v_mov_b32_e32 v0, 094; GFX900-GISEL-NEXT: s_mov_b32 m0, s295; GFX900-GISEL-NEXT: s_nop 096; GFX900-GISEL-NEXT: global_load_dword v0, s[0:1] offset:32 slc lds97; GFX900-GISEL-NEXT: s_endpgm98main_body:99 call void @llvm.amdgcn.global.load.lds(ptr addrspace(1) %gptr, ptr addrspace(3) %lptr, i32 4, i32 32, i32 2)100 ret void101}102 103define amdgpu_ps void @global_load_lds_dword_saddr_and_vaddr(ptr addrspace(1) nocapture inreg %gptr, ptr addrspace(3) nocapture %lptr, i32 %voffset) {104; GFX900-LABEL: global_load_lds_dword_saddr_and_vaddr:105; GFX900: ; %bb.0: ; %main_body106; GFX900-NEXT: v_readfirstlane_b32 s2, v0107; GFX900-NEXT: s_mov_b32 m0, s2108; GFX900-NEXT: s_nop 0109; GFX900-NEXT: global_load_dword v1, s[0:1] offset:48 lds110; GFX900-NEXT: s_endpgm111;112; GFX90A-LABEL: global_load_lds_dword_saddr_and_vaddr:113; GFX90A: ; %bb.0: ; %main_body114; GFX90A-NEXT: v_readfirstlane_b32 s2, v0115; GFX90A-NEXT: s_mov_b32 m0, s2116; GFX90A-NEXT: s_nop 0117; GFX90A-NEXT: global_load_dword v1, s[0:1] offset:48 scc lds118; GFX90A-NEXT: s_endpgm119;120; GFX942-LABEL: global_load_lds_dword_saddr_and_vaddr:121; GFX942: ; %bb.0: ; %main_body122; GFX942-NEXT: v_readfirstlane_b32 s2, v0123; GFX942-NEXT: s_mov_b32 m0, s2124; GFX942-NEXT: s_nop 0125; GFX942-NEXT: global_load_lds_dword v1, s[0:1] offset:48 sc1126; GFX942-NEXT: s_endpgm127;128; GFX10-LABEL: global_load_lds_dword_saddr_and_vaddr:129; GFX10: ; %bb.0: ; %main_body130; GFX10-NEXT: v_readfirstlane_b32 s2, v0131; GFX10-NEXT: s_mov_b32 m0, s2132; GFX10-NEXT: global_load_dword v1, s[0:1] offset:48 lds133; GFX10-NEXT: s_endpgm134;135; GFX900-GISEL-LABEL: global_load_lds_dword_saddr_and_vaddr:136; GFX900-GISEL: ; %bb.0: ; %main_body137; GFX900-GISEL-NEXT: v_readfirstlane_b32 s2, v0138; GFX900-GISEL-NEXT: s_mov_b32 m0, s2139; GFX900-GISEL-NEXT: s_nop 0140; GFX900-GISEL-NEXT: global_load_dword v1, s[0:1] offset:48 lds141; GFX900-GISEL-NEXT: s_endpgm142main_body:143 %voffset.64 = zext i32 %voffset to i64144 %gep = getelementptr i8, ptr addrspace(1) %gptr, i64 %voffset.64145 call void @llvm.amdgcn.global.load.lds(ptr addrspace(1) %gep, ptr addrspace(3) %lptr, i32 4, i32 48, i32 16)146 ret void147}148 149define amdgpu_ps void @global_load_lds_ushort_vaddr(ptr addrspace(1) nocapture %gptr, ptr addrspace(3) nocapture %lptr) {150; GFX900-LABEL: global_load_lds_ushort_vaddr:151; GFX900: ; %bb.0: ; %main_body152; GFX900-NEXT: v_readfirstlane_b32 s0, v2153; GFX900-NEXT: s_mov_b32 m0, s0154; GFX900-NEXT: s_nop 0155; GFX900-NEXT: global_load_ushort v[0:1], off lds156; GFX900-NEXT: s_endpgm157;158; GFX90A-LABEL: global_load_lds_ushort_vaddr:159; GFX90A: ; %bb.0: ; %main_body160; GFX90A-NEXT: v_readfirstlane_b32 s0, v2161; GFX90A-NEXT: s_mov_b32 m0, s0162; GFX90A-NEXT: s_nop 0163; GFX90A-NEXT: global_load_ushort v[0:1], off lds164; GFX90A-NEXT: s_endpgm165;166; GFX942-LABEL: global_load_lds_ushort_vaddr:167; GFX942: ; %bb.0: ; %main_body168; GFX942-NEXT: v_readfirstlane_b32 s0, v2169; GFX942-NEXT: s_mov_b32 m0, s0170; GFX942-NEXT: s_nop 0171; GFX942-NEXT: global_load_lds_ushort v[0:1], off172; GFX942-NEXT: s_endpgm173;174; GFX10-LABEL: global_load_lds_ushort_vaddr:175; GFX10: ; %bb.0: ; %main_body176; GFX10-NEXT: v_readfirstlane_b32 s0, v2177; GFX10-NEXT: s_mov_b32 m0, s0178; GFX10-NEXT: global_load_ushort v[0:1], off dlc lds179; GFX10-NEXT: s_endpgm180;181; GFX900-GISEL-LABEL: global_load_lds_ushort_vaddr:182; GFX900-GISEL: ; %bb.0: ; %main_body183; GFX900-GISEL-NEXT: v_readfirstlane_b32 s0, v2184; GFX900-GISEL-NEXT: s_mov_b32 m0, s0185; GFX900-GISEL-NEXT: s_nop 0186; GFX900-GISEL-NEXT: global_load_ushort v[0:1], off lds187; GFX900-GISEL-NEXT: s_endpgm188main_body:189 call void @llvm.amdgcn.global.load.lds(ptr addrspace(1) %gptr, ptr addrspace(3) %lptr, i32 2, i32 0, i32 4)190 ret void191}192 193define amdgpu_ps void @global_load_lds_ubyte_vaddr(ptr addrspace(1) nocapture %gptr, ptr addrspace(3) nocapture %lptr) {194; GFX900-LABEL: global_load_lds_ubyte_vaddr:195; GFX900: ; %bb.0: ; %main_body196; GFX900-NEXT: v_readfirstlane_b32 s0, v2197; GFX900-NEXT: s_mov_b32 m0, s0198; GFX900-NEXT: s_nop 0199; GFX900-NEXT: global_load_ubyte v[0:1], off lds200; GFX900-NEXT: s_endpgm201;202; GFX90A-LABEL: global_load_lds_ubyte_vaddr:203; GFX90A: ; %bb.0: ; %main_body204; GFX90A-NEXT: v_readfirstlane_b32 s0, v2205; GFX90A-NEXT: s_mov_b32 m0, s0206; GFX90A-NEXT: s_nop 0207; GFX90A-NEXT: global_load_ubyte v[0:1], off lds208; GFX90A-NEXT: s_endpgm209;210; GFX942-LABEL: global_load_lds_ubyte_vaddr:211; GFX942: ; %bb.0: ; %main_body212; GFX942-NEXT: v_readfirstlane_b32 s0, v2213; GFX942-NEXT: s_mov_b32 m0, s0214; GFX942-NEXT: s_nop 0215; GFX942-NEXT: global_load_lds_ubyte v[0:1], off216; GFX942-NEXT: s_endpgm217;218; GFX10-LABEL: global_load_lds_ubyte_vaddr:219; GFX10: ; %bb.0: ; %main_body220; GFX10-NEXT: v_readfirstlane_b32 s0, v2221; GFX10-NEXT: s_mov_b32 m0, s0222; GFX10-NEXT: global_load_ubyte v[0:1], off lds223; GFX10-NEXT: s_endpgm224;225; GFX900-GISEL-LABEL: global_load_lds_ubyte_vaddr:226; GFX900-GISEL: ; %bb.0: ; %main_body227; GFX900-GISEL-NEXT: v_readfirstlane_b32 s0, v2228; GFX900-GISEL-NEXT: s_mov_b32 m0, s0229; GFX900-GISEL-NEXT: s_nop 0230; GFX900-GISEL-NEXT: global_load_ubyte v[0:1], off lds231; GFX900-GISEL-NEXT: s_endpgm232main_body:233 call void @llvm.amdgcn.global.load.lds(ptr addrspace(1) %gptr, ptr addrspace(3) %lptr, i32 1, i32 0, i32 0)234 ret void235}236