brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.5 KiB · 4a22a91 Raw
636 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx906 < %s | FileCheck --check-prefix=GFX906 %s3 4define amdgpu_kernel void @v3i8_liveout(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {5; GFX906-LABEL: v3i8_liveout:6; GFX906:       ; %bb.0: ; %entry7; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x248; GFX906-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x349; GFX906-NEXT:    v_lshlrev_b32_e32 v2, 2, v010; GFX906-NEXT:    v_mov_b32_e32 v3, 811; GFX906-NEXT:    v_mov_b32_e32 v5, 1612; GFX906-NEXT:    s_waitcnt lgkmcnt(0)13; GFX906-NEXT:    global_load_dword v4, v2, s[0:1]14; GFX906-NEXT:    v_mov_b32_e32 v1, 0xff15; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v016; GFX906-NEXT:    s_waitcnt vmcnt(0)17; GFX906-NEXT:    v_and_b32_e32 v6, 0xff, v418; GFX906-NEXT:    v_lshlrev_b32_sdwa v7, v3, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_119; GFX906-NEXT:    v_lshlrev_b32_sdwa v4, v5, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_220; GFX906-NEXT:    v_or3_b32 v4, v6, v7, v421; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc22; GFX906-NEXT:    s_cbranch_execz .LBB0_223; GFX906-NEXT:  ; %bb.1: ; %bb.124; GFX906-NEXT:    global_load_dword v0, v2, s[2:3]25; GFX906-NEXT:    s_waitcnt vmcnt(0)26; GFX906-NEXT:    v_and_b32_e32 v2, 0xff, v027; GFX906-NEXT:    v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_128; GFX906-NEXT:    v_lshlrev_b32_sdwa v0, v5, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_229; GFX906-NEXT:    v_or3_b32 v4, v2, v3, v030; GFX906-NEXT:  .LBB0_2: ; %bb.231; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]32; GFX906-NEXT:    v_lshrrev_b32_e32 v0, 8, v433; GFX906-NEXT:    v_and_b32_e32 v0, 0xff, v034; GFX906-NEXT:    v_lshlrev_b16_e32 v0, 8, v035; GFX906-NEXT:    v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD36; GFX906-NEXT:    v_and_b32_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD37; GFX906-NEXT:    v_and_b32_e32 v0, 0xffff, v038; GFX906-NEXT:    v_and_b32_e32 v1, 0xffff, v139; GFX906-NEXT:    v_lshl_or_b32 v0, v1, 16, v040; GFX906-NEXT:    v_mov_b32_e32 v1, 041; GFX906-NEXT:    global_store_short v1, v0, s[6:7]42; GFX906-NEXT:    global_store_byte_d16_hi v1, v0, s[6:7] offset:243; GFX906-NEXT:    s_endpgm44entry:45  %idx = call i32 @llvm.amdgcn.workitem.id.x()46  %gep1 = getelementptr <3 x i8>, ptr addrspace(1) %src1, i32 %idx47  %vec1 = load <3 x i8>, ptr addrspace(1) %gep148  %gep2 = getelementptr <3 x i8>, ptr addrspace(1) %src2, i32 %idx49  %vec2 = load <3 x i8>, ptr addrspace(1) %gep250  %cmp = icmp ult i32 %idx, 1551  br i1 %cmp, label %bb.1, label %bb.252bb.1:53  br label %bb.254 55bb.2:56  %tmp5 = phi <3 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]57  store <3 x i8> %tmp5, ptr addrspace(1) %dst, align 458  ret void59}60 61define amdgpu_kernel void @v4i8_liveout(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {62; GFX906-LABEL: v4i8_liveout:63; GFX906:       ; %bb.0: ; %entry64; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2465; GFX906-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x3466; GFX906-NEXT:    v_lshlrev_b32_e32 v2, 2, v067; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v068; GFX906-NEXT:    s_waitcnt lgkmcnt(0)69; GFX906-NEXT:    global_load_dword v1, v2, s[0:1]70; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc71; GFX906-NEXT:    s_cbranch_execz .LBB1_272; GFX906-NEXT:  ; %bb.1: ; %bb.173; GFX906-NEXT:    global_load_dword v1, v2, s[2:3]74; GFX906-NEXT:  .LBB1_2: ; %bb.275; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]76; GFX906-NEXT:    v_mov_b32_e32 v0, 077; GFX906-NEXT:    s_waitcnt vmcnt(0)78; GFX906-NEXT:    global_store_dword v0, v1, s[6:7]79; GFX906-NEXT:    s_endpgm80entry:81  %idx = call i32 @llvm.amdgcn.workitem.id.x()82  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %src1, i32 %idx83  %vec1 = load <4 x i8>, ptr addrspace(1) %gep184  %gep2 = getelementptr <4 x i8>, ptr addrspace(1) %src2, i32 %idx85  %vec2 = load <4 x i8>, ptr addrspace(1) %gep286  %cmp = icmp ult i32 %idx, 1587  br i1 %cmp, label %bb.1, label %bb.288bb.1:89  br label %bb.290 91bb.2:92  %tmp5 = phi <4 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]93  store <4 x i8> %tmp5, ptr addrspace(1) %dst, align 494  ret void95}96 97define amdgpu_kernel void @v5i8_liveout(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {98; GFX906-LABEL: v5i8_liveout:99; GFX906:       ; %bb.0: ; %entry100; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24101; GFX906-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34102; GFX906-NEXT:    v_lshlrev_b32_e32 v3, 3, v0103; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v0104; GFX906-NEXT:    s_waitcnt lgkmcnt(0)105; GFX906-NEXT:    global_load_dwordx2 v[1:2], v3, s[0:1]106; GFX906-NEXT:    s_waitcnt vmcnt(0)107; GFX906-NEXT:    v_and_b32_e32 v2, 0xff, v2108; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc109; GFX906-NEXT:    s_cbranch_execz .LBB2_2110; GFX906-NEXT:  ; %bb.1: ; %bb.1111; GFX906-NEXT:    global_load_dwordx2 v[1:2], v3, s[2:3]112; GFX906-NEXT:    s_waitcnt vmcnt(0)113; GFX906-NEXT:    v_and_b32_e32 v2, 0xff, v2114; GFX906-NEXT:  .LBB2_2: ; %bb.2115; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]116; GFX906-NEXT:    v_mov_b32_e32 v4, 0117; GFX906-NEXT:    v_lshrrev_b32_e32 v0, 8, v1118; GFX906-NEXT:    v_lshrrev_b32_e32 v3, 24, v1119; GFX906-NEXT:    global_store_byte v4, v1, s[6:7]120; GFX906-NEXT:    global_store_byte v4, v0, s[6:7] offset:1121; GFX906-NEXT:    global_store_byte_d16_hi v4, v1, s[6:7] offset:2122; GFX906-NEXT:    global_store_byte v4, v3, s[6:7] offset:3123; GFX906-NEXT:    global_store_byte v4, v2, s[6:7] offset:4124; GFX906-NEXT:    s_endpgm125entry:126  %idx = call i32 @llvm.amdgcn.workitem.id.x()127  %gep1 = getelementptr <5 x i8>, ptr addrspace(1) %src1, i32 %idx128  %vec1 = load <5 x i8>, ptr addrspace(1) %gep1129  %gep2 = getelementptr <5 x i8>, ptr addrspace(1) %src2, i32 %idx130  %vec2 = load <5 x i8>, ptr addrspace(1) %gep2131  %cmp = icmp ult i32 %idx, 15132  br i1 %cmp, label %bb.1, label %bb.2133bb.1:134  br label %bb.2135 136bb.2:137  %tmp5 = phi <5 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]138  store <5 x i8> %tmp5, ptr addrspace(1) %dst, align 4139  ret void140}141 142define amdgpu_kernel void @v8i8_liveout(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {143; GFX906-LABEL: v8i8_liveout:144; GFX906:       ; %bb.0: ; %entry145; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24146; GFX906-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34147; GFX906-NEXT:    v_lshlrev_b32_e32 v3, 3, v0148; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v0149; GFX906-NEXT:    s_waitcnt lgkmcnt(0)150; GFX906-NEXT:    global_load_dwordx2 v[1:2], v3, s[0:1]151; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc152; GFX906-NEXT:    s_cbranch_execz .LBB3_2153; GFX906-NEXT:  ; %bb.1: ; %bb.1154; GFX906-NEXT:    global_load_dwordx2 v[1:2], v3, s[2:3]155; GFX906-NEXT:  .LBB3_2: ; %bb.2156; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]157; GFX906-NEXT:    v_mov_b32_e32 v0, 0158; GFX906-NEXT:    s_waitcnt vmcnt(0)159; GFX906-NEXT:    global_store_dwordx2 v0, v[1:2], s[6:7]160; GFX906-NEXT:    s_endpgm161entry:162  %idx = call i32 @llvm.amdgcn.workitem.id.x()163  %gep1 = getelementptr <8 x i8>, ptr addrspace(1) %src1, i32 %idx164  %vec1 = load <8 x i8>, ptr addrspace(1) %gep1165  %gep2 = getelementptr <8 x i8>, ptr addrspace(1) %src2, i32 %idx166  %vec2 = load <8 x i8>, ptr addrspace(1) %gep2167  %cmp = icmp ult i32 %idx, 15168  br i1 %cmp, label %bb.1, label %bb.2169bb.1:170  br label %bb.2171 172bb.2:173  %tmp5 = phi <8 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]174  store <8 x i8> %tmp5, ptr addrspace(1) %dst, align 4175  ret void176}177 178define amdgpu_kernel void @v16i8_liveout(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {179; GFX906-LABEL: v16i8_liveout:180; GFX906:       ; %bb.0: ; %entry181; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24182; GFX906-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34183; GFX906-NEXT:    v_lshlrev_b32_e32 v5, 4, v0184; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v0185; GFX906-NEXT:    s_waitcnt lgkmcnt(0)186; GFX906-NEXT:    global_load_dwordx4 v[1:4], v5, s[0:1]187; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc188; GFX906-NEXT:    s_cbranch_execz .LBB4_2189; GFX906-NEXT:  ; %bb.1: ; %bb.1190; GFX906-NEXT:    global_load_dwordx4 v[1:4], v5, s[2:3]191; GFX906-NEXT:  .LBB4_2: ; %bb.2192; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]193; GFX906-NEXT:    v_mov_b32_e32 v0, 0194; GFX906-NEXT:    s_waitcnt vmcnt(0)195; GFX906-NEXT:    global_store_dwordx4 v0, v[1:4], s[6:7]196; GFX906-NEXT:    s_endpgm197entry:198  %idx = call i32 @llvm.amdgcn.workitem.id.x()199  %gep1 = getelementptr <16 x i8>, ptr addrspace(1) %src1, i32 %idx200  %vec1 = load <16 x i8>, ptr addrspace(1) %gep1201  %gep2 = getelementptr <16 x i8>, ptr addrspace(1) %src2, i32 %idx202  %vec2 = load <16 x i8>, ptr addrspace(1) %gep2203  %cmp = icmp ult i32 %idx, 15204  br i1 %cmp, label %bb.1, label %bb.2205bb.1:206  br label %bb.2207 208bb.2:209  %tmp5 = phi <16 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]210  store <16 x i8> %tmp5, ptr addrspace(1) %dst, align 4211  ret void212}213 214define amdgpu_kernel void @v32i8_liveout(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {215; GFX906-LABEL: v32i8_liveout:216; GFX906:       ; %bb.0: ; %entry217; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24218; GFX906-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34219; GFX906-NEXT:    v_lshlrev_b32_e32 v9, 5, v0220; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v0221; GFX906-NEXT:    s_waitcnt lgkmcnt(0)222; GFX906-NEXT:    global_load_dwordx4 v[1:4], v9, s[0:1]223; GFX906-NEXT:    global_load_dwordx4 v[5:8], v9, s[0:1] offset:16224; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc225; GFX906-NEXT:    s_cbranch_execz .LBB5_2226; GFX906-NEXT:  ; %bb.1: ; %bb.1227; GFX906-NEXT:    global_load_dwordx4 v[1:4], v9, s[2:3]228; GFX906-NEXT:    global_load_dwordx4 v[5:8], v9, s[2:3] offset:16229; GFX906-NEXT:  .LBB5_2: ; %bb.2230; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]231; GFX906-NEXT:    v_mov_b32_e32 v0, 0232; GFX906-NEXT:    s_waitcnt vmcnt(1)233; GFX906-NEXT:    global_store_dwordx4 v0, v[1:4], s[6:7]234; GFX906-NEXT:    s_waitcnt vmcnt(1)235; GFX906-NEXT:    global_store_dwordx4 v0, v[5:8], s[6:7] offset:16236; GFX906-NEXT:    s_endpgm237entry:238  %idx = call i32 @llvm.amdgcn.workitem.id.x()239  %gep1 = getelementptr <32 x i8>, ptr addrspace(1) %src1, i32 %idx240  %vec1 = load <32 x i8>, ptr addrspace(1) %gep1241  %gep2 = getelementptr <32 x i8>, ptr addrspace(1) %src2, i32 %idx242  %vec2 = load <32 x i8>, ptr addrspace(1) %gep2243  %cmp = icmp ult i32 %idx, 15244  br i1 %cmp, label %bb.1, label %bb.2245bb.1:246  br label %bb.2247 248bb.2:249  %tmp5 = phi <32 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]250  store <32 x i8> %tmp5, ptr addrspace(1) %dst, align 4251  ret void252}253 254define amdgpu_kernel void @v256i8_liveout(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {255; GFX906-LABEL: v256i8_liveout:256; GFX906:       ; %bb.0: ; %entry257; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24258; GFX906-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34259; GFX906-NEXT:    v_lshlrev_b32_e32 v4, 3, v0260; GFX906-NEXT:    s_mov_b32 s12, SCRATCH_RSRC_DWORD0261; GFX906-NEXT:    s_mov_b32 s13, SCRATCH_RSRC_DWORD1262; GFX906-NEXT:    s_waitcnt lgkmcnt(0)263; GFX906-NEXT:    global_load_dwordx4 v[5:8], v4, s[0:1]264; GFX906-NEXT:    s_mov_b32 s14, -1265; GFX906-NEXT:    s_mov_b32 s15, 0xe00000266; GFX906-NEXT:    s_add_u32 s12, s12, s11267; GFX906-NEXT:    s_addc_u32 s13, s13, 0268; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v0269; GFX906-NEXT:    s_waitcnt vmcnt(0)270; GFX906-NEXT:    buffer_store_dword v5, off, s[12:15], 0 ; 4-byte Folded Spill271; GFX906-NEXT:    s_nop 0272; GFX906-NEXT:    buffer_store_dword v6, off, s[12:15], 0 offset:4 ; 4-byte Folded Spill273; GFX906-NEXT:    buffer_store_dword v7, off, s[12:15], 0 offset:8 ; 4-byte Folded Spill274; GFX906-NEXT:    buffer_store_dword v8, off, s[12:15], 0 offset:12 ; 4-byte Folded Spill275; GFX906-NEXT:    global_load_dwordx4 v[17:20], v4, s[0:1] offset:64276; GFX906-NEXT:    global_load_dwordx4 v[21:24], v4, s[0:1] offset:80277; GFX906-NEXT:    global_load_dwordx4 v[25:28], v4, s[0:1] offset:96278; GFX906-NEXT:    global_load_dwordx4 v[29:32], v4, s[0:1] offset:112279; GFX906-NEXT:    global_load_dwordx4 v[33:36], v4, s[0:1] offset:128280; GFX906-NEXT:    global_load_dwordx4 v[37:40], v4, s[0:1] offset:144281; GFX906-NEXT:    global_load_dwordx4 v[41:44], v4, s[0:1] offset:160282; GFX906-NEXT:    global_load_dwordx4 v[45:48], v4, s[0:1] offset:176283; GFX906-NEXT:    global_load_dwordx4 v[49:52], v4, s[0:1] offset:192284; GFX906-NEXT:    global_load_dwordx4 v[53:56], v4, s[0:1] offset:208285; GFX906-NEXT:    global_load_dwordx4 v[57:60], v4, s[0:1] offset:224286; GFX906-NEXT:    global_load_dwordx4 v[0:3], v4, s[0:1] offset:240287; GFX906-NEXT:    global_load_dwordx4 v[5:8], v4, s[0:1] offset:16288; GFX906-NEXT:    global_load_dwordx4 v[9:12], v4, s[0:1] offset:32289; GFX906-NEXT:    global_load_dwordx4 v[13:16], v4, s[0:1] offset:48290; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc291; GFX906-NEXT:    s_cbranch_execz .LBB6_2292; GFX906-NEXT:  ; %bb.1: ; %bb.1293; GFX906-NEXT:    global_load_dwordx4 v[0:3], v4, s[2:3]294; GFX906-NEXT:    s_waitcnt vmcnt(0)295; GFX906-NEXT:    buffer_store_dword v0, off, s[12:15], 0 ; 4-byte Folded Spill296; GFX906-NEXT:    s_nop 0297; GFX906-NEXT:    buffer_store_dword v1, off, s[12:15], 0 offset:4 ; 4-byte Folded Spill298; GFX906-NEXT:    buffer_store_dword v2, off, s[12:15], 0 offset:8 ; 4-byte Folded Spill299; GFX906-NEXT:    buffer_store_dword v3, off, s[12:15], 0 offset:12 ; 4-byte Folded Spill300; GFX906-NEXT:    global_load_dwordx4 v[5:8], v4, s[2:3] offset:16301; GFX906-NEXT:    global_load_dwordx4 v[9:12], v4, s[2:3] offset:32302; GFX906-NEXT:    global_load_dwordx4 v[13:16], v4, s[2:3] offset:48303; GFX906-NEXT:    global_load_dwordx4 v[17:20], v4, s[2:3] offset:64304; GFX906-NEXT:    global_load_dwordx4 v[21:24], v4, s[2:3] offset:80305; GFX906-NEXT:    global_load_dwordx4 v[25:28], v4, s[2:3] offset:96306; GFX906-NEXT:    global_load_dwordx4 v[29:32], v4, s[2:3] offset:112307; GFX906-NEXT:    global_load_dwordx4 v[33:36], v4, s[2:3] offset:128308; GFX906-NEXT:    global_load_dwordx4 v[37:40], v4, s[2:3] offset:144309; GFX906-NEXT:    global_load_dwordx4 v[41:44], v4, s[2:3] offset:160310; GFX906-NEXT:    global_load_dwordx4 v[45:48], v4, s[2:3] offset:176311; GFX906-NEXT:    global_load_dwordx4 v[49:52], v4, s[2:3] offset:192312; GFX906-NEXT:    global_load_dwordx4 v[53:56], v4, s[2:3] offset:208313; GFX906-NEXT:    global_load_dwordx4 v[57:60], v4, s[2:3] offset:224314; GFX906-NEXT:    global_load_dwordx4 v[0:3], v4, s[2:3] offset:240315; GFX906-NEXT:  .LBB6_2: ; %bb.2316; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]317; GFX906-NEXT:    s_waitcnt vmcnt(0)318; GFX906-NEXT:    buffer_store_dword v0, off, s[12:15], 0 offset:16 ; 4-byte Folded Spill319; GFX906-NEXT:    s_nop 0320; GFX906-NEXT:    buffer_store_dword v1, off, s[12:15], 0 offset:20 ; 4-byte Folded Spill321; GFX906-NEXT:    buffer_store_dword v2, off, s[12:15], 0 offset:24 ; 4-byte Folded Spill322; GFX906-NEXT:    buffer_store_dword v3, off, s[12:15], 0 offset:28 ; 4-byte Folded Spill323; GFX906-NEXT:    v_mov_b32_e32 v0, v57324; GFX906-NEXT:    v_mov_b32_e32 v1, v58325; GFX906-NEXT:    v_mov_b32_e32 v2, v59326; GFX906-NEXT:    v_mov_b32_e32 v3, v60327; GFX906-NEXT:    v_mov_b32_e32 v60, v56328; GFX906-NEXT:    v_mov_b32_e32 v59, v55329; GFX906-NEXT:    v_mov_b32_e32 v58, v54330; GFX906-NEXT:    v_mov_b32_e32 v57, v53331; GFX906-NEXT:    v_mov_b32_e32 v56, v52332; GFX906-NEXT:    v_mov_b32_e32 v55, v51333; GFX906-NEXT:    v_mov_b32_e32 v54, v50334; GFX906-NEXT:    v_mov_b32_e32 v53, v49335; GFX906-NEXT:    v_mov_b32_e32 v52, v48336; GFX906-NEXT:    v_mov_b32_e32 v51, v47337; GFX906-NEXT:    v_mov_b32_e32 v50, v46338; GFX906-NEXT:    v_mov_b32_e32 v49, v45339; GFX906-NEXT:    v_mov_b32_e32 v48, v44340; GFX906-NEXT:    v_mov_b32_e32 v47, v43341; GFX906-NEXT:    v_mov_b32_e32 v46, v42342; GFX906-NEXT:    v_mov_b32_e32 v45, v41343; GFX906-NEXT:    v_mov_b32_e32 v44, v40344; GFX906-NEXT:    v_mov_b32_e32 v43, v39345; GFX906-NEXT:    v_mov_b32_e32 v42, v38346; GFX906-NEXT:    v_mov_b32_e32 v41, v37347; GFX906-NEXT:    v_mov_b32_e32 v40, v36348; GFX906-NEXT:    v_mov_b32_e32 v39, v35349; GFX906-NEXT:    v_mov_b32_e32 v38, v34350; GFX906-NEXT:    v_mov_b32_e32 v37, v33351; GFX906-NEXT:    v_mov_b32_e32 v36, v32352; GFX906-NEXT:    v_mov_b32_e32 v35, v31353; GFX906-NEXT:    v_mov_b32_e32 v34, v30354; GFX906-NEXT:    v_mov_b32_e32 v33, v29355; GFX906-NEXT:    v_mov_b32_e32 v32, v28356; GFX906-NEXT:    v_mov_b32_e32 v31, v27357; GFX906-NEXT:    v_mov_b32_e32 v30, v26358; GFX906-NEXT:    v_mov_b32_e32 v29, v25359; GFX906-NEXT:    v_mov_b32_e32 v28, v24360; GFX906-NEXT:    v_mov_b32_e32 v27, v23361; GFX906-NEXT:    v_mov_b32_e32 v26, v22362; GFX906-NEXT:    v_mov_b32_e32 v25, v21363; GFX906-NEXT:    v_mov_b32_e32 v24, v20364; GFX906-NEXT:    v_mov_b32_e32 v23, v19365; GFX906-NEXT:    v_mov_b32_e32 v22, v18366; GFX906-NEXT:    v_mov_b32_e32 v21, v17367; GFX906-NEXT:    v_mov_b32_e32 v20, v16368; GFX906-NEXT:    v_mov_b32_e32 v19, v15369; GFX906-NEXT:    v_mov_b32_e32 v18, v14370; GFX906-NEXT:    v_mov_b32_e32 v17, v13371; GFX906-NEXT:    v_mov_b32_e32 v16, v12372; GFX906-NEXT:    v_mov_b32_e32 v15, v11373; GFX906-NEXT:    v_mov_b32_e32 v14, v10374; GFX906-NEXT:    v_mov_b32_e32 v13, v9375; GFX906-NEXT:    v_mov_b32_e32 v12, v8376; GFX906-NEXT:    v_mov_b32_e32 v11, v7377; GFX906-NEXT:    v_mov_b32_e32 v10, v6378; GFX906-NEXT:    v_mov_b32_e32 v9, v5379; GFX906-NEXT:    buffer_load_dword v5, off, s[12:15], 0 ; 4-byte Folded Reload380; GFX906-NEXT:    buffer_load_dword v6, off, s[12:15], 0 offset:4 ; 4-byte Folded Reload381; GFX906-NEXT:    buffer_load_dword v7, off, s[12:15], 0 offset:8 ; 4-byte Folded Reload382; GFX906-NEXT:    buffer_load_dword v8, off, s[12:15], 0 offset:12 ; 4-byte Folded Reload383; GFX906-NEXT:    v_mov_b32_e32 v4, 0384; GFX906-NEXT:    s_waitcnt vmcnt(0)385; GFX906-NEXT:    global_store_dwordx4 v4, v[5:8], s[6:7]386; GFX906-NEXT:    global_store_dwordx4 v4, v[9:12], s[6:7] offset:16387; GFX906-NEXT:    global_store_dwordx4 v4, v[13:16], s[6:7] offset:32388; GFX906-NEXT:    global_store_dwordx4 v4, v[17:20], s[6:7] offset:48389; GFX906-NEXT:    global_store_dwordx4 v4, v[21:24], s[6:7] offset:64390; GFX906-NEXT:    global_store_dwordx4 v4, v[25:28], s[6:7] offset:80391; GFX906-NEXT:    global_store_dwordx4 v4, v[29:32], s[6:7] offset:96392; GFX906-NEXT:    global_store_dwordx4 v4, v[33:36], s[6:7] offset:112393; GFX906-NEXT:    global_store_dwordx4 v4, v[37:40], s[6:7] offset:128394; GFX906-NEXT:    global_store_dwordx4 v4, v[41:44], s[6:7] offset:144395; GFX906-NEXT:    global_store_dwordx4 v4, v[45:48], s[6:7] offset:160396; GFX906-NEXT:    global_store_dwordx4 v4, v[49:52], s[6:7] offset:176397; GFX906-NEXT:    global_store_dwordx4 v4, v[53:56], s[6:7] offset:192398; GFX906-NEXT:    global_store_dwordx4 v4, v[57:60], s[6:7] offset:208399; GFX906-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7] offset:224400; GFX906-NEXT:    buffer_load_dword v0, off, s[12:15], 0 offset:16 ; 4-byte Folded Reload401; GFX906-NEXT:    s_nop 0402; GFX906-NEXT:    buffer_load_dword v1, off, s[12:15], 0 offset:20 ; 4-byte Folded Reload403; GFX906-NEXT:    buffer_load_dword v2, off, s[12:15], 0 offset:24 ; 4-byte Folded Reload404; GFX906-NEXT:    buffer_load_dword v3, off, s[12:15], 0 offset:28 ; 4-byte Folded Reload405; GFX906-NEXT:    s_waitcnt vmcnt(0)406; GFX906-NEXT:    global_store_dwordx4 v4, v[0:3], s[6:7] offset:240407; GFX906-NEXT:    s_endpgm408entry:409  %idx = call i32 @llvm.amdgcn.workitem.id.x()410  %gep1 = getelementptr <8 x i8>, ptr addrspace(1) %src1, i32 %idx411  %vec1 = load <256 x i8>, ptr addrspace(1) %gep1412  %gep2 = getelementptr <8 x i8>, ptr addrspace(1) %src2, i32 %idx413  %vec2 = load <256 x i8>, ptr addrspace(1) %gep2414  %cmp = icmp ult i32 %idx, 15415  br i1 %cmp, label %bb.1, label %bb.2416bb.1:417  br label %bb.2418 419bb.2:420  %tmp5 = phi <256 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]421  store <256 x i8> %tmp5, ptr addrspace(1) %dst, align 4422  ret void423}424 425 426define amdgpu_kernel void @repeat_successor(i32 %in, ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {427; GFX906-LABEL: repeat_successor:428; GFX906:       ; %bb.0: ; %entry429; GFX906-NEXT:    s_load_dword s6, s[4:5], 0x24430; GFX906-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2c431; GFX906-NEXT:    s_waitcnt lgkmcnt(0)432; GFX906-NEXT:    s_cmp_lt_i32 s6, 3433; GFX906-NEXT:    s_cbranch_scc0 .LBB7_3434; GFX906-NEXT:  ; %bb.1: ; %LeafBlock435; GFX906-NEXT:    s_cmp_ge_i32 s6, 1436; GFX906-NEXT:    s_cbranch_scc0 .LBB7_6437; GFX906-NEXT:  ; %bb.2:438; GFX906-NEXT:    v_lshlrev_b32_e32 v0, 2, v0439; GFX906-NEXT:    global_load_dword v0, v0, s[0:1]440; GFX906-NEXT:    s_branch .LBB7_5441; GFX906-NEXT:  .LBB7_3: ; %LeafBlock5442; GFX906-NEXT:    s_cmp_eq_u32 s6, 3443; GFX906-NEXT:    s_cbranch_scc0 .LBB7_6444; GFX906-NEXT:  ; %bb.4: ; %sw.bb5445; GFX906-NEXT:    v_lshlrev_b32_e32 v0, 2, v0446; GFX906-NEXT:    global_load_dword v0, v0, s[2:3]447; GFX906-NEXT:  .LBB7_5: ; %return.sink.split448; GFX906-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x3c449; GFX906-NEXT:    v_mov_b32_e32 v1, 0450; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)451; GFX906-NEXT:    global_store_dword v1, v0, s[0:1]452; GFX906-NEXT:  .LBB7_6: ; %return453; GFX906-NEXT:    s_endpgm454entry:455  %idx = call i32 @llvm.amdgcn.workitem.id.x()456  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %src1, i32 %idx457  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1458  %gep2 = getelementptr <4 x i8>, ptr addrspace(1) %src2, i32 %idx459  %vec2 = load <4 x i8>, ptr addrspace(1) %gep2460  switch i32 %in, label %return [461    i32 1, label %return.sink.split462    i32 2, label %return.sink.split463    i32 3, label %sw.bb5464  ]465 466sw.bb5:467  br label %return.sink.split468 469return.sink.split:470  %tmp5 = phi <4 x i8> [ %vec2, %sw.bb5 ], [ %vec1, %entry ], [ %vec1, %entry ]471  store <4 x i8> %tmp5, ptr addrspace(1) %dst, align 4472  ret void473 474return:475  ret void476}477 478define amdgpu_kernel void @v8i8_phi_chain(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst0, ptr addrspace(1) nocapture %dst1) {479; GFX906-LABEL: v8i8_phi_chain:480; GFX906:       ; %bb.0: ; %entry481; GFX906-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24482; GFX906-NEXT:    v_lshlrev_b32_e32 v3, 3, v0483; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v0484; GFX906-NEXT:    s_xor_b64 s[0:1], vcc, -1485; GFX906-NEXT:    s_waitcnt lgkmcnt(0)486; GFX906-NEXT:    global_load_dwordx2 v[1:2], v3, s[8:9]487; GFX906-NEXT:    s_and_saveexec_b64 s[2:3], vcc488; GFX906-NEXT:    s_cbranch_execz .LBB8_2489; GFX906-NEXT:  ; %bb.1: ; %bb.1490; GFX906-NEXT:    global_load_dwordx2 v[1:2], v3, s[10:11]491; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 7, v0492; GFX906-NEXT:    s_andn2_b64 s[0:1], s[0:1], exec493; GFX906-NEXT:    s_and_b64 s[4:5], exec, vcc494; GFX906-NEXT:    s_or_b64 s[0:1], s[0:1], s[4:5]495; GFX906-NEXT:  .LBB8_2: ; %Flow496; GFX906-NEXT:    s_or_b64 exec, exec, s[2:3]497; GFX906-NEXT:    s_and_saveexec_b64 s[2:3], s[0:1]498; GFX906-NEXT:    s_cbranch_execz .LBB8_4499; GFX906-NEXT:  ; %bb.3: ; %bb.2500; GFX906-NEXT:    v_mov_b32_e32 v0, 0501; GFX906-NEXT:    s_waitcnt vmcnt(0)502; GFX906-NEXT:    global_store_dwordx2 v0, v[1:2], s[12:13]503; GFX906-NEXT:  .LBB8_4: ; %bb.3504; GFX906-NEXT:    s_or_b64 exec, exec, s[2:3]505; GFX906-NEXT:    v_mov_b32_e32 v0, 0506; GFX906-NEXT:    s_waitcnt vmcnt(0)507; GFX906-NEXT:    global_store_dwordx2 v0, v[1:2], s[14:15]508; GFX906-NEXT:    s_endpgm509entry:510  %idx = call i32 @llvm.amdgcn.workitem.id.x()511  %gep1 = getelementptr <8 x i8>, ptr addrspace(1) %src1, i32 %idx512  %vec1 = load <8 x i8>, ptr addrspace(1) %gep1513  %gep2 = getelementptr <8 x i8>, ptr addrspace(1) %src2, i32 %idx514  %vec2 = load <8 x i8>, ptr addrspace(1) %gep2515  %cmp = icmp ult i32 %idx, 15516  br i1 %cmp, label %bb.1, label %bb.2517bb.1:518  %cmp2 = icmp ult i32 %idx, 7519  br i1 %cmp2, label %bb.2, label %bb.3520 521bb.2:522  %tmp5 = phi <8 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]523  store <8 x i8> %tmp5, ptr addrspace(1) %dst0, align 4524  br label %bb.3525 526bb.3:527  %tmp7 = phi <8 x i8> [ %vec2, %bb.1], [%tmp5, %bb.2]528  store <8 x i8> %tmp7, ptr addrspace(1) %dst1, align 4529  ret void530}531 532define amdgpu_kernel void @v8i8_multi_block(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst0, ptr addrspace(1) nocapture %dst1) {533; GFX906-LABEL: v8i8_multi_block:534; GFX906:       ; %bb.0: ; %entry535; GFX906-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24536; GFX906-NEXT:    v_lshlrev_b32_e32 v5, 3, v0537; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 15, v0538; GFX906-NEXT:    s_waitcnt lgkmcnt(0)539; GFX906-NEXT:    global_load_dwordx2 v[3:4], v5, s[8:9]540; GFX906-NEXT:    s_waitcnt vmcnt(0)541; GFX906-NEXT:    v_mov_b32_e32 v1, v3542; GFX906-NEXT:    v_mov_b32_e32 v2, v4543; GFX906-NEXT:    s_and_saveexec_b64 s[0:1], vcc544; GFX906-NEXT:    s_cbranch_execz .LBB9_4545; GFX906-NEXT:  ; %bb.1: ; %bb.1546; GFX906-NEXT:    global_load_dwordx2 v[1:2], v5, s[10:11]547; GFX906-NEXT:    v_cmp_gt_u32_e32 vcc, 7, v0548; GFX906-NEXT:    s_and_saveexec_b64 s[2:3], vcc549; GFX906-NEXT:    s_cbranch_execz .LBB9_3550; GFX906-NEXT:  ; %bb.2: ; %bb.2551; GFX906-NEXT:    v_mov_b32_e32 v0, 0552; GFX906-NEXT:    global_store_dwordx2 v0, v[3:4], s[12:13]553; GFX906-NEXT:  .LBB9_3: ; %Flow554; GFX906-NEXT:    s_or_b64 exec, exec, s[2:3]555; GFX906-NEXT:  .LBB9_4: ; %bb.3556; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]557; GFX906-NEXT:    v_mov_b32_e32 v0, 0558; GFX906-NEXT:    s_waitcnt vmcnt(0)559; GFX906-NEXT:    global_store_dwordx2 v0, v[1:2], s[14:15]560; GFX906-NEXT:    s_endpgm561entry:562  %idx = call i32 @llvm.amdgcn.workitem.id.x()563  %gep1 = getelementptr <8 x i8>, ptr addrspace(1) %src1, i32 %idx564  %vec1 = load <8 x i8>, ptr addrspace(1) %gep1565  %gep2 = getelementptr <8 x i8>, ptr addrspace(1) %src2, i32 %idx566  %vec2 = load <8 x i8>, ptr addrspace(1) %gep2567  %cmp = icmp ult i32 %idx, 15568  br i1 %cmp, label %bb.1, label %bb.3569bb.1:570  %cmp2 = icmp ult i32 %idx, 7571  br i1 %cmp2, label %bb.2, label %bb.3572 573bb.2:574  store <8 x i8> %vec1, ptr addrspace(1) %dst0, align 4575  br label %bb.3576 577bb.3:578  %tmp5 = phi <8 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ], [ %vec2, %bb.2]579  store <8 x i8> %tmp5, ptr addrspace(1) %dst1, align 4580  ret void581}582 583define amdgpu_kernel void @v32i8_loop_carried(ptr addrspace(1) %src1, ptr addrspace(1) %src2, ptr addrspace(1) nocapture %dst) {584; GFX906-LABEL: v32i8_loop_carried:585; GFX906:       ; %bb.0: ; %entry586; GFX906-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24587; GFX906-NEXT:    v_lshlrev_b32_e32 v1, 5, v0588; GFX906-NEXT:    v_mov_b32_e32 v3, 8589; GFX906-NEXT:    v_mov_b32_e32 v2, 0xff590; GFX906-NEXT:    v_cmp_le_u32_e32 vcc, 15, v0591; GFX906-NEXT:    s_waitcnt lgkmcnt(0)592; GFX906-NEXT:    global_load_dword v1, v1, s[0:1]593; GFX906-NEXT:    s_mov_b64 s[0:1], 0594; GFX906-NEXT:    s_waitcnt vmcnt(0)595; GFX906-NEXT:    v_lshlrev_b32_sdwa v0, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2596; GFX906-NEXT:    v_and_or_b32 v0, v1, v2, v0597; GFX906-NEXT:    v_mov_b32_e32 v2, 24598; GFX906-NEXT:  .LBB10_1: ; %bb.1599; GFX906-NEXT:    ; =>This Inner Loop Header: Depth=1600; GFX906-NEXT:    v_and_b32_e32 v3, 0xff, v1601; GFX906-NEXT:    s_and_b64 s[2:3], exec, vcc602; GFX906-NEXT:    v_lshlrev_b32_e32 v3, 16, v3603; GFX906-NEXT:    v_lshlrev_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2604; GFX906-NEXT:    s_or_b64 s[0:1], s[2:3], s[0:1]605; GFX906-NEXT:    v_or3_b32 v1, v0, v3, v1606; GFX906-NEXT:    s_andn2_b64 exec, exec, s[0:1]607; GFX906-NEXT:    s_cbranch_execnz .LBB10_1608; GFX906-NEXT:  ; %bb.2: ; %bb.2.loopexit609; GFX906-NEXT:    s_or_b64 exec, exec, s[0:1]610; GFX906-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x34611; GFX906-NEXT:    v_mov_b32_e32 v0, 0612; GFX906-NEXT:    s_waitcnt lgkmcnt(0)613; GFX906-NEXT:    global_store_dword v0, v1, s[0:1]614; GFX906-NEXT:    s_endpgm615entry:616  %idx = call i32 @llvm.amdgcn.workitem.id.x()617  %gep1 = getelementptr <32 x i8>, ptr addrspace(1) %src1, i32 %idx618  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1619  br label %bb.1620 621bb.1:622  %temp = phi <4 x i8> [ %vec1, %entry ], [ %vec2, %bb.1 ]623  %vec2 = shufflevector <4 x i8> %vec1, <4 x i8> %temp, <4 x i32> <i32 0, i32 2, i32 4, i32 6>624  %cmp = icmp ult i32 %idx, 15625  br i1 %cmp, label %bb.1, label %bb.2626  br label %bb.2627 628bb.2:629  store <4 x i8> %vec2, ptr addrspace(1) %dst, align 4630  ret void631}632 633 634declare i32 @llvm.amdgcn.workitem.id.x()635 636