303 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 @sextload_P0_i8(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {5; GFX12-LABEL: sextload_P0_i8:6; GFX12: ; %bb.0:7; GFX12-NEXT: flat_load_i8 v0, v[0:1]8; GFX12-NEXT: s_wait_loadcnt_dscnt 0x09; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v010; GFX12-NEXT: flat_store_b32 v[2:3], v011; GFX12-NEXT: s_endpgm12 %a = load i8, ptr addrspace(0) %ptra13 %a32 = sext i8 %a to i3214 %res = add i32 %a32, %a3215 store i32 %res, ptr addrspace(0) %out16 ret void17}18 19define amdgpu_ps void @sextload_P0_i16(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {20; GFX12-LABEL: sextload_P0_i16:21; GFX12: ; %bb.0:22; GFX12-NEXT: flat_load_i16 v0, v[0:1]23; GFX12-NEXT: s_wait_loadcnt_dscnt 0x024; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v025; GFX12-NEXT: flat_store_b32 v[2:3], v026; GFX12-NEXT: s_endpgm27 %a = load i16, ptr addrspace(0) %ptra28 %a32 = sext i16 %a to i3229 %res = add i32 %a32, %a3230 store i32 %res, ptr addrspace(0) %out31 ret void32}33 34define amdgpu_ps void @zextload_P0_i8(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {35; GFX12-LABEL: zextload_P0_i8:36; GFX12: ; %bb.0:37; GFX12-NEXT: flat_load_u8 v0, v[0:1]38; GFX12-NEXT: s_wait_loadcnt_dscnt 0x039; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v040; GFX12-NEXT: flat_store_b32 v[2:3], v041; GFX12-NEXT: s_endpgm42 %a = load i8, ptr addrspace(0) %ptra43 %a32 = zext i8 %a to i3244 %res = add i32 %a32, %a3245 store i32 %res, ptr addrspace(0) %out46 ret void47}48 49define amdgpu_ps void @zextload_P0_i16(ptr addrspace(0) %ptra, ptr addrspace(0) %out) {50; GFX12-LABEL: zextload_P0_i16:51; GFX12: ; %bb.0:52; GFX12-NEXT: flat_load_u16 v0, v[0:1]53; GFX12-NEXT: s_wait_loadcnt_dscnt 0x054; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v055; GFX12-NEXT: flat_store_b32 v[2:3], v056; GFX12-NEXT: s_endpgm57 %a = load i16, ptr addrspace(0) %ptra58 %a32 = zext i16 %a to i3259 %res = add i32 %a32, %a3260 store i32 %res, ptr addrspace(0) %out61 ret void62}63 64define amdgpu_ps void @sextload_P1_i8(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {65; GFX12-LABEL: sextload_P1_i8:66; GFX12: ; %bb.0:67; GFX12-NEXT: global_load_i8 v0, v[0:1], off68; GFX12-NEXT: s_wait_loadcnt 0x069; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v070; GFX12-NEXT: global_store_b32 v[2:3], v0, off71; GFX12-NEXT: s_endpgm72 %a = load i8, ptr addrspace(1) %ptra73 %a32 = sext i8 %a to i3274 %res = add i32 %a32, %a3275 store i32 %res, ptr addrspace(1) %out76 ret void77}78 79define amdgpu_ps void @sextload_P1_i16(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {80; GFX12-LABEL: sextload_P1_i16:81; GFX12: ; %bb.0:82; GFX12-NEXT: global_load_i16 v0, v[0:1], off83; GFX12-NEXT: s_wait_loadcnt 0x084; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v085; GFX12-NEXT: global_store_b32 v[2:3], v0, off86; GFX12-NEXT: s_endpgm87 %a = load i16, ptr addrspace(1) %ptra88 %a32 = sext i16 %a to i3289 %res = add i32 %a32, %a3290 store i32 %res, ptr addrspace(1) %out91 ret void92}93 94define amdgpu_ps void @zextload_P1_i8(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {95; GFX12-LABEL: zextload_P1_i8:96; GFX12: ; %bb.0:97; GFX12-NEXT: global_load_u8 v0, v[0:1], off98; GFX12-NEXT: s_wait_loadcnt 0x099; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0100; GFX12-NEXT: global_store_b32 v[2:3], v0, off101; GFX12-NEXT: s_endpgm102 %a = load i8, ptr addrspace(1) %ptra103 %a32 = zext i8 %a to i32104 %res = add i32 %a32, %a32105 store i32 %res, ptr addrspace(1) %out106 ret void107}108 109define amdgpu_ps void @zextload_P1_i16(ptr addrspace(1) %ptra, ptr addrspace(1) %out) {110; GFX12-LABEL: zextload_P1_i16:111; GFX12: ; %bb.0:112; GFX12-NEXT: global_load_u16 v0, v[0:1], off113; GFX12-NEXT: s_wait_loadcnt 0x0114; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0115; GFX12-NEXT: global_store_b32 v[2:3], v0, off116; GFX12-NEXT: s_endpgm117 %a = load i16, ptr addrspace(1) %ptra118 %a32 = zext i16 %a to i32119 %res = add i32 %a32, %a32120 store i32 %res, ptr addrspace(1) %out121 ret void122}123 124define amdgpu_ps void @sextload_P3_i8(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {125; GFX12-LABEL: sextload_P3_i8:126; GFX12: ; %bb.0:127; GFX12-NEXT: ds_load_i8 v0, v0128; GFX12-NEXT: s_wait_dscnt 0x0129; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0130; GFX12-NEXT: ds_store_b32 v1, v0131; GFX12-NEXT: s_endpgm132 %a = load i8, ptr addrspace(3) %ptra133 %a32 = sext i8 %a to i32134 %res = add i32 %a32, %a32135 store i32 %res, ptr addrspace(3) %out136 ret void137}138 139define amdgpu_ps void @sextload_P3_i16(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {140; GFX12-LABEL: sextload_P3_i16:141; GFX12: ; %bb.0:142; GFX12-NEXT: ds_load_i16 v0, v0143; GFX12-NEXT: s_wait_dscnt 0x0144; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0145; GFX12-NEXT: ds_store_b32 v1, v0146; GFX12-NEXT: s_endpgm147 %a = load i16, ptr addrspace(3) %ptra148 %a32 = sext i16 %a to i32149 %res = add i32 %a32, %a32150 store i32 %res, ptr addrspace(3) %out151 ret void152}153 154define amdgpu_ps void @zextload_P3_i8(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {155; GFX12-LABEL: zextload_P3_i8:156; GFX12: ; %bb.0:157; GFX12-NEXT: ds_load_u8 v0, v0158; GFX12-NEXT: s_wait_dscnt 0x0159; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0160; GFX12-NEXT: ds_store_b32 v1, v0161; GFX12-NEXT: s_endpgm162 %a = load i8, ptr addrspace(3) %ptra163 %a32 = zext i8 %a to i32164 %res = add i32 %a32, %a32165 store i32 %res, ptr addrspace(3) %out166 ret void167}168 169define amdgpu_ps void @zextload_P3_i16(ptr addrspace(3) %ptra, ptr addrspace(3) %out) {170; GFX12-LABEL: zextload_P3_i16:171; GFX12: ; %bb.0:172; GFX12-NEXT: ds_load_u16 v0, v0173; GFX12-NEXT: s_wait_dscnt 0x0174; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0175; GFX12-NEXT: ds_store_b32 v1, v0176; GFX12-NEXT: s_endpgm177 %a = load i16, ptr addrspace(3) %ptra178 %a32 = zext i16 %a to i32179 %res = add i32 %a32, %a32180 store i32 %res, ptr addrspace(3) %out181 ret void182}183 184define amdgpu_ps void @sextload_P4_i8(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {185; GFX12-LABEL: sextload_P4_i8:186; GFX12: ; %bb.0:187; GFX12-NEXT: global_load_i8 v0, v[0:1], off188; GFX12-NEXT: s_wait_loadcnt 0x0189; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0190; GFX12-NEXT: global_store_b32 v[2:3], v0, off191; GFX12-NEXT: s_endpgm192 %a = load i8, ptr addrspace(4) %ptra193 %a32 = sext i8 %a to i32194 %res = add i32 %a32, %a32195 store i32 %res, ptr addrspace(1) %out196 ret void197}198 199define amdgpu_ps void @sextload_P4_i16(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {200; GFX12-LABEL: sextload_P4_i16:201; GFX12: ; %bb.0:202; GFX12-NEXT: global_load_i16 v0, v[0:1], off203; GFX12-NEXT: s_wait_loadcnt 0x0204; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0205; GFX12-NEXT: global_store_b32 v[2:3], v0, off206; GFX12-NEXT: s_endpgm207 %a = load i16, ptr addrspace(4) %ptra208 %a32 = sext i16 %a to i32209 %res = add i32 %a32, %a32210 store i32 %res, ptr addrspace(1) %out211 ret void212}213 214define amdgpu_ps void @zextload_P4_i8(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {215; GFX12-LABEL: zextload_P4_i8:216; GFX12: ; %bb.0:217; GFX12-NEXT: global_load_u8 v0, v[0:1], off218; GFX12-NEXT: s_wait_loadcnt 0x0219; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0220; GFX12-NEXT: global_store_b32 v[2:3], v0, off221; GFX12-NEXT: s_endpgm222 %a = load i8, ptr addrspace(4) %ptra223 %a32 = zext i8 %a to i32224 %res = add i32 %a32, %a32225 store i32 %res, ptr addrspace(1) %out226 ret void227}228 229define amdgpu_ps void @zextload_P4_i16(ptr addrspace(4) %ptra, ptr addrspace(1) %out) {230; GFX12-LABEL: zextload_P4_i16:231; GFX12: ; %bb.0:232; GFX12-NEXT: global_load_u16 v0, v[0:1], off233; GFX12-NEXT: s_wait_loadcnt 0x0234; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0235; GFX12-NEXT: global_store_b32 v[2:3], v0, off236; GFX12-NEXT: s_endpgm237 %a = load i16, ptr addrspace(4) %ptra238 %a32 = zext i16 %a to i32239 %res = add i32 %a32, %a32240 store i32 %res, ptr addrspace(1) %out241 ret void242}243 244define amdgpu_ps void @sextload_P5_i8(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {245; GFX12-LABEL: sextload_P5_i8:246; GFX12: ; %bb.0:247; GFX12-NEXT: scratch_load_i8 v0, v0, off248; GFX12-NEXT: s_wait_loadcnt 0x0249; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0250; GFX12-NEXT: scratch_store_b32 v1, v0, off251; GFX12-NEXT: s_endpgm252 %a = load i8, ptr addrspace(5) %ptra253 %a32 = sext i8 %a to i32254 %res = add i32 %a32, %a32255 store i32 %res, ptr addrspace(5) %out256 ret void257}258 259define amdgpu_ps void @sextload_P5_i16(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {260; GFX12-LABEL: sextload_P5_i16:261; GFX12: ; %bb.0:262; GFX12-NEXT: scratch_load_i16 v0, v0, off263; GFX12-NEXT: s_wait_loadcnt 0x0264; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0265; GFX12-NEXT: scratch_store_b32 v1, v0, off266; GFX12-NEXT: s_endpgm267 %a = load i16, ptr addrspace(5) %ptra268 %a32 = sext i16 %a to i32269 %res = add i32 %a32, %a32270 store i32 %res, ptr addrspace(5) %out271 ret void272}273 274define amdgpu_ps void @zextload_P5_i8(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {275; GFX12-LABEL: zextload_P5_i8:276; GFX12: ; %bb.0:277; GFX12-NEXT: scratch_load_u8 v0, v0, off278; GFX12-NEXT: s_wait_loadcnt 0x0279; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0280; GFX12-NEXT: scratch_store_b32 v1, v0, off281; GFX12-NEXT: s_endpgm282 %a = load i8, ptr addrspace(5) %ptra283 %a32 = zext i8 %a to i32284 %res = add i32 %a32, %a32285 store i32 %res, ptr addrspace(5) %out286 ret void287}288 289define amdgpu_ps void @zextload_P5_i16(ptr addrspace(5) %ptra, ptr addrspace(5) %out) {290; GFX12-LABEL: zextload_P5_i16:291; GFX12: ; %bb.0:292; GFX12-NEXT: scratch_load_u16 v0, v0, off293; GFX12-NEXT: s_wait_loadcnt 0x0294; GFX12-NEXT: v_add_nc_u32_e32 v0, v0, v0295; GFX12-NEXT: scratch_store_b32 v1, v0, off296; GFX12-NEXT: s_endpgm297 %a = load i16, ptr addrspace(5) %ptra298 %a32 = zext i16 %a to i32299 %res = add i32 %a32, %a32300 store i32 %res, ptr addrspace(5) %out301 ret void302}303