brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 3dd9252 Raw
189 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn < %s | FileCheck -check-prefix=GCN %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1030 < %s | FileCheck -check-prefix=GFX10 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11-TRUE16 %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11-FAKE16 %s7 8declare i32 @llvm.amdgcn.alignbyte(i32, i32, i32) #09 10define amdgpu_kernel void @v_alignbyte_b32(ptr addrspace(1) %out, i32 %src1, i32 %src2, i32 %src3) #1 {11; GCN-LABEL: v_alignbyte_b32:12; GCN:       ; %bb.0:13; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0xb14; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x915; GCN-NEXT:    s_mov_b32 s7, 0xf00016; GCN-NEXT:    s_mov_b32 s6, -117; GCN-NEXT:    s_waitcnt lgkmcnt(0)18; GCN-NEXT:    v_mov_b32_e32 v0, s119; GCN-NEXT:    v_mov_b32_e32 v1, s220; GCN-NEXT:    v_alignbyte_b32 v0, s0, v0, v121; GCN-NEXT:    buffer_store_dword v0, off, s[4:7], 022; GCN-NEXT:    s_endpgm23;24; GFX9-LABEL: v_alignbyte_b32:25; GFX9:       ; %bb.0:26; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2c27; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x2428; GFX9-NEXT:    v_mov_b32_e32 v0, 029; GFX9-NEXT:    s_waitcnt lgkmcnt(0)30; GFX9-NEXT:    v_mov_b32_e32 v1, s131; GFX9-NEXT:    v_mov_b32_e32 v2, s232; GFX9-NEXT:    v_alignbyte_b32 v1, s0, v1, v233; GFX9-NEXT:    global_store_dword v0, v1, s[6:7]34; GFX9-NEXT:    s_endpgm35;36; GFX10-LABEL: v_alignbyte_b32:37; GFX10:       ; %bb.0:38; GFX10-NEXT:    s_clause 0x139; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2c40; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x2441; GFX10-NEXT:    v_mov_b32_e32 v1, 042; GFX10-NEXT:    s_waitcnt lgkmcnt(0)43; GFX10-NEXT:    v_mov_b32_e32 v0, s244; GFX10-NEXT:    v_alignbyte_b32 v0, s0, s1, v045; GFX10-NEXT:    global_store_dword v1, v0, s[4:5]46; GFX10-NEXT:    s_endpgm47;48; GFX11-TRUE16-LABEL: v_alignbyte_b32:49; GFX11-TRUE16:       ; %bb.0:50; GFX11-TRUE16-NEXT:    s_clause 0x151; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2c52; GFX11-TRUE16-NEXT:    s_load_b64 s[4:5], s[4:5], 0x2453; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 054; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)55; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v0.l, s256; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)57; GFX11-TRUE16-NEXT:    v_alignbyte_b32 v0, s0, s1, v0.l58; GFX11-TRUE16-NEXT:    global_store_b32 v1, v0, s[4:5]59; GFX11-TRUE16-NEXT:    s_endpgm60;61; GFX11-FAKE16-LABEL: v_alignbyte_b32:62; GFX11-FAKE16:       ; %bb.0:63; GFX11-FAKE16-NEXT:    s_clause 0x164; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2c65; GFX11-FAKE16-NEXT:    s_load_b64 s[4:5], s[4:5], 0x2466; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)67; GFX11-FAKE16-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s268; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)69; GFX11-FAKE16-NEXT:    v_alignbyte_b32 v0, s0, s1, v070; GFX11-FAKE16-NEXT:    global_store_b32 v1, v0, s[4:5]71; GFX11-FAKE16-NEXT:    s_endpgm72  %val = call i32 @llvm.amdgcn.alignbyte(i32 %src1, i32 %src2, i32 %src3) #073  store i32 %val, ptr addrspace(1) %out74  ret void75}76 77define amdgpu_kernel void @v_alignbyte_b32_2(ptr addrspace(1) %out, ptr addrspace(1) %src1, ptr addrspace(1) %src2, i32 %src3) #1 {78; GCN-LABEL: v_alignbyte_b32_2:79; GCN:       ; %bb.0:80; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x981; GCN-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd82; GCN-NEXT:    s_load_dword s16, s[4:5], 0xf83; GCN-NEXT:    s_mov_b32 s7, 0xf00084; GCN-NEXT:    s_mov_b32 s14, 085; GCN-NEXT:    v_lshlrev_b32_e32 v0, 2, v086; GCN-NEXT:    v_mov_b32_e32 v1, 087; GCN-NEXT:    s_mov_b32 s15, s788; GCN-NEXT:    s_mov_b64 s[10:11], s[14:15]89; GCN-NEXT:    s_waitcnt lgkmcnt(0)90; GCN-NEXT:    s_mov_b64 s[12:13], s[2:3]91; GCN-NEXT:    buffer_load_dword v2, v[0:1], s[12:15], 0 addr64 glc92; GCN-NEXT:    s_waitcnt vmcnt(0)93; GCN-NEXT:    buffer_load_dword v0, v[0:1], s[8:11], 0 addr64 glc94; GCN-NEXT:    s_waitcnt vmcnt(0)95; GCN-NEXT:    s_mov_b32 s6, -196; GCN-NEXT:    s_mov_b32 s4, s097; GCN-NEXT:    s_mov_b32 s5, s198; GCN-NEXT:    v_alignbyte_b32 v0, v2, v0, s1699; GCN-NEXT:    buffer_store_dword v0, off, s[4:7], 0100; GCN-NEXT:    s_endpgm101;102; GFX9-LABEL: v_alignbyte_b32_2:103; GFX9:       ; %bb.0:104; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24105; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34106; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0107; GFX9-NEXT:    s_waitcnt lgkmcnt(0)108; GFX9-NEXT:    global_load_dword v1, v0, s[2:3] glc109; GFX9-NEXT:    s_waitcnt vmcnt(0)110; GFX9-NEXT:    global_load_dword v2, v0, s[6:7] glc111; GFX9-NEXT:    s_waitcnt vmcnt(0)112; GFX9-NEXT:    s_load_dword s2, s[4:5], 0x3c113; GFX9-NEXT:    v_mov_b32_e32 v0, 0114; GFX9-NEXT:    s_waitcnt lgkmcnt(0)115; GFX9-NEXT:    v_alignbyte_b32 v1, v1, v2, s2116; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]117; GFX9-NEXT:    s_endpgm118;119; GFX10-LABEL: v_alignbyte_b32_2:120; GFX10:       ; %bb.0:121; GFX10-NEXT:    s_clause 0x1122; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24123; GFX10-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34124; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0125; GFX10-NEXT:    v_mov_b32_e32 v2, 0126; GFX10-NEXT:    s_waitcnt lgkmcnt(0)127; GFX10-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc128; GFX10-NEXT:    s_waitcnt vmcnt(0)129; GFX10-NEXT:    global_load_dword v0, v0, s[6:7] glc dlc130; GFX10-NEXT:    s_waitcnt vmcnt(0)131; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x3c132; GFX10-NEXT:    s_waitcnt lgkmcnt(0)133; GFX10-NEXT:    v_alignbyte_b32 v0, v1, v0, s2134; GFX10-NEXT:    global_store_dword v2, v0, s[0:1]135; GFX10-NEXT:    s_endpgm136;137; GFX11-TRUE16-LABEL: v_alignbyte_b32_2:138; GFX11-TRUE16:       ; %bb.0:139; GFX11-TRUE16-NEXT:    s_clause 0x1140; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24141; GFX11-TRUE16-NEXT:    s_load_b64 s[6:7], s[4:5], 0x34142; GFX11-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0143; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v2, 0144; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)145; GFX11-TRUE16-NEXT:    v_lshlrev_b32_e32 v0, 2, v0146; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)147; GFX11-TRUE16-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc148; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)149; GFX11-TRUE16-NEXT:    global_load_b32 v0, v0, s[6:7] glc dlc150; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)151; GFX11-TRUE16-NEXT:    s_load_b32 s2, s[4:5], 0x3c152; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)153; GFX11-TRUE16-NEXT:    v_alignbyte_b32 v0, v1, v0, s2154; GFX11-TRUE16-NEXT:    global_store_b32 v2, v0, s[0:1]155; GFX11-TRUE16-NEXT:    s_endpgm156;157; GFX11-FAKE16-LABEL: v_alignbyte_b32_2:158; GFX11-FAKE16:       ; %bb.0:159; GFX11-FAKE16-NEXT:    s_clause 0x1160; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24161; GFX11-FAKE16-NEXT:    s_load_b64 s[6:7], s[4:5], 0x34162; GFX11-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0163; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v2, 0164; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)165; GFX11-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 2, v0166; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)167; GFX11-FAKE16-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc168; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)169; GFX11-FAKE16-NEXT:    global_load_b32 v0, v0, s[6:7] glc dlc170; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)171; GFX11-FAKE16-NEXT:    s_load_b32 s2, s[4:5], 0x3c172; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)173; GFX11-FAKE16-NEXT:    v_alignbyte_b32 v0, v1, v0, s2174; GFX11-FAKE16-NEXT:    global_store_b32 v2, v0, s[0:1]175; GFX11-FAKE16-NEXT:    s_endpgm176  %tid = call i32 @llvm.amdgcn.workitem.id.x()177  %a.gep = getelementptr inbounds i32, ptr addrspace(1) %src1, i32 %tid178  %b.gep = getelementptr inbounds i32, ptr addrspace(1) %src2, i32 %tid179  %a.val = load volatile i32, ptr addrspace(1) %a.gep180  %b.val = load volatile i32, ptr addrspace(1) %b.gep181 182  %val = call i32 @llvm.amdgcn.alignbyte(i32 %a.val, i32 %b.val, i32 %src3) #0183  store i32 %val, ptr addrspace(1) %out184  ret void185}186 187attributes #0 = { nounwind readnone }188attributes #1 = { nounwind }189