413 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GFX12 %s3 4define amdgpu_ps void @load_P0_B16_D16(<2 x i16> %vec, ptr addrspace(0) %ptra, ptr addrspace(0) %out) {5; GFX12-LABEL: load_P0_B16_D16:6; GFX12: ; %bb.0:7; GFX12-NEXT: flat_load_d16_b16 v0, v[1:2]8; GFX12-NEXT: s_wait_loadcnt_dscnt 0x09; GFX12-NEXT: flat_store_b32 v[3:4], v010; GFX12-NEXT: s_endpgm11 %a = load i16, ptr addrspace(0) %ptra12 %res = insertelement <2 x i16> %vec, i16 %a, i32 013 store <2 x i16> %res, ptr addrspace(0) %out14 ret void15}16 17define amdgpu_ps void @load_P0_B16_D16_Hi(<2 x i16> %vec, ptr addrspace(0) %ptra, ptr addrspace(0) %out) {18; GFX12-LABEL: load_P0_B16_D16_Hi:19; GFX12: ; %bb.0:20; GFX12-NEXT: flat_load_d16_hi_b16 v0, v[1:2]21; GFX12-NEXT: s_wait_loadcnt_dscnt 0x022; GFX12-NEXT: flat_store_b32 v[3:4], v023; GFX12-NEXT: s_endpgm24 %a = load i16, ptr addrspace(0) %ptra25 %res = insertelement <2 x i16> %vec, i16 %a, i32 126 store <2 x i16> %res, ptr addrspace(0) %out27 ret void28}29 30define amdgpu_ps void @sextload_P0_i8_D16(<2 x i16> %vec, ptr addrspace(0) %ptra, ptr addrspace(0) %out) {31; GFX12-LABEL: sextload_P0_i8_D16:32; GFX12: ; %bb.0:33; GFX12-NEXT: flat_load_d16_i8 v0, v[1:2]34; GFX12-NEXT: s_wait_loadcnt_dscnt 0x035; GFX12-NEXT: flat_store_b32 v[3:4], v036; GFX12-NEXT: s_endpgm37 %a = load i8, ptr addrspace(0) %ptra38 %a16 = sext i8 %a to i1639 %res = insertelement <2 x i16> %vec, i16 %a16, i32 040 store <2 x i16> %res, ptr addrspace(0) %out41 ret void42}43 44define amdgpu_ps void @sextload_P0_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(0) %ptra, ptr addrspace(0) %out) {45; GFX12-LABEL: sextload_P0_i8_D16_Hi:46; GFX12: ; %bb.0:47; GFX12-NEXT: flat_load_d16_hi_i8 v0, v[1:2]48; GFX12-NEXT: s_wait_loadcnt_dscnt 0x049; GFX12-NEXT: flat_store_b32 v[3:4], v050; GFX12-NEXT: s_endpgm51 %a = load i8, ptr addrspace(0) %ptra52 %a16 = sext i8 %a to i1653 %res = insertelement <2 x i16> %vec, i16 %a16, i32 154 store <2 x i16> %res, ptr addrspace(0) %out55 ret void56}57 58define amdgpu_ps void @zextload_P0_i8_D16(<2 x i16> %vec, ptr addrspace(0) %ptra, ptr addrspace(0) %out) {59; GFX12-LABEL: zextload_P0_i8_D16:60; GFX12: ; %bb.0:61; GFX12-NEXT: flat_load_d16_u8 v0, v[1:2]62; GFX12-NEXT: s_wait_loadcnt_dscnt 0x063; GFX12-NEXT: flat_store_b32 v[3:4], v064; GFX12-NEXT: s_endpgm65 %a = load i8, ptr addrspace(0) %ptra66 %a16 = zext i8 %a to i1667 %res = insertelement <2 x i16> %vec, i16 %a16, i32 068 store <2 x i16> %res, ptr addrspace(0) %out69 ret void70}71 72define amdgpu_ps void @zextload_P0_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(0) %ptra, ptr addrspace(0) %out) {73; GFX12-LABEL: zextload_P0_i8_D16_Hi:74; GFX12: ; %bb.0:75; GFX12-NEXT: flat_load_d16_hi_u8 v0, v[1:2]76; GFX12-NEXT: s_wait_loadcnt_dscnt 0x077; GFX12-NEXT: flat_store_b32 v[3:4], v078; GFX12-NEXT: s_endpgm79 %a = load i8, ptr addrspace(0) %ptra80 %a16 = zext i8 %a to i1681 %res = insertelement <2 x i16> %vec, i16 %a16, i32 182 store <2 x i16> %res, ptr addrspace(0) %out83 ret void84}85 86define amdgpu_ps void @load_P1_B16_D16(<2 x i16> %vec, ptr addrspace(1) %ptra, ptr addrspace(1) %out) {87; GFX12-LABEL: load_P1_B16_D16:88; GFX12: ; %bb.0:89; GFX12-NEXT: global_load_d16_b16 v0, v[1:2], off90; GFX12-NEXT: s_wait_loadcnt 0x091; GFX12-NEXT: global_store_b32 v[3:4], v0, off92; GFX12-NEXT: s_endpgm93 %a = load i16, ptr addrspace(1) %ptra94 %res = insertelement <2 x i16> %vec, i16 %a, i32 095 store <2 x i16> %res, ptr addrspace(1) %out96 ret void97}98 99define amdgpu_ps void @load_P1_B16_D16_Hi(<2 x i16> %vec, ptr addrspace(1) %ptra, ptr addrspace(1) %out) {100; GFX12-LABEL: load_P1_B16_D16_Hi:101; GFX12: ; %bb.0:102; GFX12-NEXT: global_load_d16_hi_b16 v0, v[1:2], off103; GFX12-NEXT: s_wait_loadcnt 0x0104; GFX12-NEXT: global_store_b32 v[3:4], v0, off105; GFX12-NEXT: s_endpgm106 %a = load i16, ptr addrspace(1) %ptra107 %res = insertelement <2 x i16> %vec, i16 %a, i32 1108 store <2 x i16> %res, ptr addrspace(1) %out109 ret void110}111 112define amdgpu_ps void @sextload_P1_i8_D16(<2 x i16> %vec, ptr addrspace(1) %ptra, ptr addrspace(1) %out) {113; GFX12-LABEL: sextload_P1_i8_D16:114; GFX12: ; %bb.0:115; GFX12-NEXT: global_load_d16_i8 v0, v[1:2], off116; GFX12-NEXT: s_wait_loadcnt 0x0117; GFX12-NEXT: global_store_b32 v[3:4], v0, off118; GFX12-NEXT: s_endpgm119 %a = load i8, ptr addrspace(1) %ptra120 %a16 = sext i8 %a to i16121 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0122 store <2 x i16> %res, ptr addrspace(1) %out123 ret void124}125 126define amdgpu_ps void @sextload_P1_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(1) %ptra, ptr addrspace(1) %out) {127; GFX12-LABEL: sextload_P1_i8_D16_Hi:128; GFX12: ; %bb.0:129; GFX12-NEXT: global_load_d16_hi_i8 v0, v[1:2], off130; GFX12-NEXT: s_wait_loadcnt 0x0131; GFX12-NEXT: global_store_b32 v[3:4], v0, off132; GFX12-NEXT: s_endpgm133 %a = load i8, ptr addrspace(1) %ptra134 %a16 = sext i8 %a to i16135 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1136 store <2 x i16> %res, ptr addrspace(1) %out137 ret void138}139 140define amdgpu_ps void @zextload_P1_i8_D16(<2 x i16> %vec, ptr addrspace(1) %ptra, ptr addrspace(1) %out) {141; GFX12-LABEL: zextload_P1_i8_D16:142; GFX12: ; %bb.0:143; GFX12-NEXT: global_load_d16_u8 v0, v[1:2], off144; GFX12-NEXT: s_wait_loadcnt 0x0145; GFX12-NEXT: global_store_b32 v[3:4], v0, off146; GFX12-NEXT: s_endpgm147 %a = load i8, ptr addrspace(1) %ptra148 %a16 = zext i8 %a to i16149 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0150 store <2 x i16> %res, ptr addrspace(1) %out151 ret void152}153 154define amdgpu_ps void @zextload_P1_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(1) %ptra, ptr addrspace(1) %out) {155; GFX12-LABEL: zextload_P1_i8_D16_Hi:156; GFX12: ; %bb.0:157; GFX12-NEXT: global_load_d16_hi_u8 v0, v[1:2], off158; GFX12-NEXT: s_wait_loadcnt 0x0159; GFX12-NEXT: global_store_b32 v[3:4], v0, off160; GFX12-NEXT: s_endpgm161 %a = load i8, ptr addrspace(1) %ptra162 %a16 = zext i8 %a to i16163 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1164 store <2 x i16> %res, ptr addrspace(1) %out165 ret void166}167 168define amdgpu_ps void @load_P3_B16_D16(<2 x i16> %vec, ptr addrspace(3) %ptra, ptr addrspace(3) %out) {169; GFX12-LABEL: load_P3_B16_D16:170; GFX12: ; %bb.0:171; GFX12-NEXT: ds_load_u16_d16 v0, v1172; GFX12-NEXT: s_wait_dscnt 0x0173; GFX12-NEXT: ds_store_b32 v2, v0174; GFX12-NEXT: s_endpgm175 %a = load i16, ptr addrspace(3) %ptra176 %res = insertelement <2 x i16> %vec, i16 %a, i32 0177 store <2 x i16> %res, ptr addrspace(3) %out178 ret void179}180 181define amdgpu_ps void @load_P3_B16_D16_Hi(<2 x i16> %vec, ptr addrspace(3) %ptra, ptr addrspace(3) %out) {182; GFX12-LABEL: load_P3_B16_D16_Hi:183; GFX12: ; %bb.0:184; GFX12-NEXT: ds_load_u16_d16_hi v0, v1185; GFX12-NEXT: s_wait_dscnt 0x0186; GFX12-NEXT: ds_store_b32 v2, v0187; GFX12-NEXT: s_endpgm188 %a = load i16, ptr addrspace(3) %ptra189 %res = insertelement <2 x i16> %vec, i16 %a, i32 1190 store <2 x i16> %res, ptr addrspace(3) %out191 ret void192}193 194define amdgpu_ps void @sextload_P3_i8_D16(<2 x i16> %vec, ptr addrspace(3) %ptra, ptr addrspace(3) %out) {195; GFX12-LABEL: sextload_P3_i8_D16:196; GFX12: ; %bb.0:197; GFX12-NEXT: ds_load_i8_d16 v0, v1198; GFX12-NEXT: s_wait_dscnt 0x0199; GFX12-NEXT: ds_store_b32 v2, v0200; GFX12-NEXT: s_endpgm201 %a = load i8, ptr addrspace(3) %ptra202 %a16 = sext i8 %a to i16203 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0204 store <2 x i16> %res, ptr addrspace(3) %out205 ret void206}207 208define amdgpu_ps void @sextload_P3_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(3) %ptra, ptr addrspace(3) %out) {209; GFX12-LABEL: sextload_P3_i8_D16_Hi:210; GFX12: ; %bb.0:211; GFX12-NEXT: ds_load_i8_d16_hi v0, v1212; GFX12-NEXT: s_wait_dscnt 0x0213; GFX12-NEXT: ds_store_b32 v2, v0214; GFX12-NEXT: s_endpgm215 %a = load i8, ptr addrspace(3) %ptra216 %a16 = sext i8 %a to i16217 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1218 store <2 x i16> %res, ptr addrspace(3) %out219 ret void220}221 222define amdgpu_ps void @zextload_P3_i8_D16(<2 x i16> %vec, ptr addrspace(3) %ptra, ptr addrspace(3) %out) {223; GFX12-LABEL: zextload_P3_i8_D16:224; GFX12: ; %bb.0:225; GFX12-NEXT: ds_load_u8_d16 v0, v1226; GFX12-NEXT: s_wait_dscnt 0x0227; GFX12-NEXT: ds_store_b32 v2, v0228; GFX12-NEXT: s_endpgm229 %a = load i8, ptr addrspace(3) %ptra230 %a16 = zext i8 %a to i16231 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0232 store <2 x i16> %res, ptr addrspace(3) %out233 ret void234}235 236define amdgpu_ps void @zextload_P3_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(3) %ptra, ptr addrspace(3) %out) {237; GFX12-LABEL: zextload_P3_i8_D16_Hi:238; GFX12: ; %bb.0:239; GFX12-NEXT: ds_load_u8_d16_hi v0, v1240; GFX12-NEXT: s_wait_dscnt 0x0241; GFX12-NEXT: ds_store_b32 v2, v0242; GFX12-NEXT: s_endpgm243 %a = load i8, ptr addrspace(3) %ptra244 %a16 = zext i8 %a to i16245 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1246 store <2 x i16> %res, ptr addrspace(3) %out247 ret void248}249 250define amdgpu_ps void @load_P4_B16_D16(<2 x i16> %vec, ptr addrspace(4) %ptra, ptr addrspace(1) %out) {251; GFX12-LABEL: load_P4_B16_D16:252; GFX12: ; %bb.0:253; GFX12-NEXT: global_load_d16_b16 v0, v[1:2], off254; GFX12-NEXT: s_wait_loadcnt 0x0255; GFX12-NEXT: global_store_b32 v[3:4], v0, off256; GFX12-NEXT: s_endpgm257 %a = load i16, ptr addrspace(4) %ptra258 %res = insertelement <2 x i16> %vec, i16 %a, i32 0259 store <2 x i16> %res, ptr addrspace(1) %out260 ret void261}262 263define amdgpu_ps void @load_P4_B16_D16_Hi(<2 x i16> %vec, ptr addrspace(4) %ptra, ptr addrspace(1) %out) {264; GFX12-LABEL: load_P4_B16_D16_Hi:265; GFX12: ; %bb.0:266; GFX12-NEXT: global_load_d16_hi_b16 v0, v[1:2], off267; GFX12-NEXT: s_wait_loadcnt 0x0268; GFX12-NEXT: global_store_b32 v[3:4], v0, off269; GFX12-NEXT: s_endpgm270 %a = load i16, ptr addrspace(4) %ptra271 %res = insertelement <2 x i16> %vec, i16 %a, i32 1272 store <2 x i16> %res, ptr addrspace(1) %out273 ret void274}275 276define amdgpu_ps void @sextload_P4_i8_D16(<2 x i16> %vec, ptr addrspace(4) %ptra, ptr addrspace(1) %out) {277; GFX12-LABEL: sextload_P4_i8_D16:278; GFX12: ; %bb.0:279; GFX12-NEXT: global_load_d16_i8 v0, v[1:2], off280; GFX12-NEXT: s_wait_loadcnt 0x0281; GFX12-NEXT: global_store_b32 v[3:4], v0, off282; GFX12-NEXT: s_endpgm283 %a = load i8, ptr addrspace(4) %ptra284 %a16 = sext i8 %a to i16285 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0286 store <2 x i16> %res, ptr addrspace(1) %out287 ret void288}289 290define amdgpu_ps void @sextload_P4_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(4) %ptra, ptr addrspace(1) %out) {291; GFX12-LABEL: sextload_P4_i8_D16_Hi:292; GFX12: ; %bb.0:293; GFX12-NEXT: global_load_d16_hi_i8 v0, v[1:2], off294; GFX12-NEXT: s_wait_loadcnt 0x0295; GFX12-NEXT: global_store_b32 v[3:4], v0, off296; GFX12-NEXT: s_endpgm297 %a = load i8, ptr addrspace(4) %ptra298 %a16 = sext i8 %a to i16299 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1300 store <2 x i16> %res, ptr addrspace(1) %out301 ret void302}303 304define amdgpu_ps void @zextload_P4_i8_D16(<2 x i16> %vec, ptr addrspace(4) %ptra, ptr addrspace(1) %out) {305; GFX12-LABEL: zextload_P4_i8_D16:306; GFX12: ; %bb.0:307; GFX12-NEXT: global_load_d16_u8 v0, v[1:2], off308; GFX12-NEXT: s_wait_loadcnt 0x0309; GFX12-NEXT: global_store_b32 v[3:4], v0, off310; GFX12-NEXT: s_endpgm311 %a = load i8, ptr addrspace(4) %ptra312 %a16 = zext i8 %a to i16313 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0314 store <2 x i16> %res, ptr addrspace(1) %out315 ret void316}317 318define amdgpu_ps void @zextload_P4_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(4) %ptra, ptr addrspace(1) %out) {319; GFX12-LABEL: zextload_P4_i8_D16_Hi:320; GFX12: ; %bb.0:321; GFX12-NEXT: global_load_d16_hi_u8 v0, v[1:2], off322; GFX12-NEXT: s_wait_loadcnt 0x0323; GFX12-NEXT: global_store_b32 v[3:4], v0, off324; GFX12-NEXT: s_endpgm325 %a = load i8, ptr addrspace(4) %ptra326 %a16 = zext i8 %a to i16327 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1328 store <2 x i16> %res, ptr addrspace(1) %out329 ret void330}331 332define amdgpu_ps void @load_P5_B16_D16(<2 x i16> %vec, ptr addrspace(5) %ptra, ptr addrspace(5) %out) {333; GFX12-LABEL: load_P5_B16_D16:334; GFX12: ; %bb.0:335; GFX12-NEXT: scratch_load_d16_b16 v0, v1, off336; GFX12-NEXT: s_wait_loadcnt 0x0337; GFX12-NEXT: scratch_store_b32 v2, v0, off338; GFX12-NEXT: s_endpgm339 %a = load i16, ptr addrspace(5) %ptra340 %res = insertelement <2 x i16> %vec, i16 %a, i32 0341 store <2 x i16> %res, ptr addrspace(5) %out342 ret void343}344 345define amdgpu_ps void @load_P5_B16_D16_Hi(<2 x i16> %vec, ptr addrspace(5) %ptra, ptr addrspace(5) %out) {346; GFX12-LABEL: load_P5_B16_D16_Hi:347; GFX12: ; %bb.0:348; GFX12-NEXT: scratch_load_d16_hi_b16 v0, v1, off349; GFX12-NEXT: s_wait_loadcnt 0x0350; GFX12-NEXT: scratch_store_b32 v2, v0, off351; GFX12-NEXT: s_endpgm352 %a = load i16, ptr addrspace(5) %ptra353 %res = insertelement <2 x i16> %vec, i16 %a, i32 1354 store <2 x i16> %res, ptr addrspace(5) %out355 ret void356}357 358define amdgpu_ps void @sextload_P5_i8_D16(<2 x i16> %vec, ptr addrspace(5) %ptra, ptr addrspace(5) %out) {359; GFX12-LABEL: sextload_P5_i8_D16:360; GFX12: ; %bb.0:361; GFX12-NEXT: scratch_load_d16_i8 v0, v1, off362; GFX12-NEXT: s_wait_loadcnt 0x0363; GFX12-NEXT: scratch_store_b32 v2, v0, off364; GFX12-NEXT: s_endpgm365 %a = load i8, ptr addrspace(5) %ptra366 %a16 = sext i8 %a to i16367 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0368 store <2 x i16> %res, ptr addrspace(5) %out369 ret void370}371 372define amdgpu_ps void @sextload_P5_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(5) %ptra, ptr addrspace(5) %out) {373; GFX12-LABEL: sextload_P5_i8_D16_Hi:374; GFX12: ; %bb.0:375; GFX12-NEXT: scratch_load_d16_hi_i8 v0, v1, off376; GFX12-NEXT: s_wait_loadcnt 0x0377; GFX12-NEXT: scratch_store_b32 v2, v0, off378; GFX12-NEXT: s_endpgm379 %a = load i8, ptr addrspace(5) %ptra380 %a16 = sext i8 %a to i16381 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1382 store <2 x i16> %res, ptr addrspace(5) %out383 ret void384}385 386define amdgpu_ps void @zextload_P5_i8_D16(<2 x i16> %vec, ptr addrspace(5) %ptra, ptr addrspace(5) %out) {387; GFX12-LABEL: zextload_P5_i8_D16:388; GFX12: ; %bb.0:389; GFX12-NEXT: scratch_load_d16_u8 v0, v1, off390; GFX12-NEXT: s_wait_loadcnt 0x0391; GFX12-NEXT: scratch_store_b32 v2, v0, off392; GFX12-NEXT: s_endpgm393 %a = load i8, ptr addrspace(5) %ptra394 %a16 = zext i8 %a to i16395 %res = insertelement <2 x i16> %vec, i16 %a16, i32 0396 store <2 x i16> %res, ptr addrspace(5) %out397 ret void398}399 400define amdgpu_ps void @zextload_P5_i8_D16_Hi(<2 x i16> %vec, ptr addrspace(5) %ptra, ptr addrspace(5) %out) {401; GFX12-LABEL: zextload_P5_i8_D16_Hi:402; GFX12: ; %bb.0:403; GFX12-NEXT: scratch_load_d16_hi_u8 v0, v1, off404; GFX12-NEXT: s_wait_loadcnt 0x0405; GFX12-NEXT: scratch_store_b32 v2, v0, off406; GFX12-NEXT: s_endpgm407 %a = load i8, ptr addrspace(5) %ptra408 %a16 = zext i8 %a to i16409 %res = insertelement <2 x i16> %vec, i16 %a16, i32 1410 store <2 x i16> %res, ptr addrspace(5) %out411 ret void412}413