brintos

brintos / llvm-project-archived public Read only

0
0
Text · 58.6 KiB · 5428b5e Raw
1574 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=amdgcn -mcpu=tahiti | FileCheck %s -check-prefixes=GFX678910,GFX6789,GFX678,GFX67,GFX63; RUN: llc < %s -mtriple=amdgcn -mcpu=hawaii | FileCheck %s -check-prefixes=GFX678910,GFX6789,GFX78910,GFX678,GFX789,GFX67,GFX78,GFX74; RUN: llc < %s -mtriple=amdgcn -mcpu=tonga | FileCheck %s -check-prefixes=GFX678910,GFX6789,GFX78910,GFX678,GFX789,GFX8910,GFX78,GFX89,GFX85; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx900 | FileCheck %s -check-prefixes=GFX678910,GFX6789,GFX78910,GFX789,GFX8910,GFX89,GFX910,GFX96; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 | FileCheck %s -check-prefixes=GFX678910,GFX78910,GFX8910,GFX910,GFX107; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-vopd=0 | FileCheck %s -check-prefixes=GFX118; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1200 -amdgpu-enable-vopd=0 | FileCheck %s -check-prefixes=GFX129 10define amdgpu_ps void @s_buffer_load_imm(<4 x i32> inreg %desc) {11; GFX67-LABEL: s_buffer_load_imm:12; GFX67:       ; %bb.0: ; %main_body13; GFX67-NEXT:    s_buffer_load_dword s0, s[0:3], 0x114; GFX67-NEXT:    s_waitcnt lgkmcnt(0)15; GFX67-NEXT:    v_mov_b32_e32 v0, s016; GFX67-NEXT:    exp mrt0 v0, v0, v0, v0 done vm17; GFX67-NEXT:    s_endpgm18;19; GFX8910-LABEL: s_buffer_load_imm:20; GFX8910:       ; %bb.0: ; %main_body21; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x422; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)23; GFX8910-NEXT:    v_mov_b32_e32 v0, s024; GFX8910-NEXT:    exp mrt0 v0, v0, v0, v0 done vm25; GFX8910-NEXT:    s_endpgm26;27; GFX11-LABEL: s_buffer_load_imm:28; GFX11:       ; %bb.0: ; %main_body29; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x430; GFX11-NEXT:    s_waitcnt lgkmcnt(0)31; GFX11-NEXT:    v_mov_b32_e32 v0, s032; GFX11-NEXT:    exp mrt0 v0, v0, v0, v0 done33; GFX11-NEXT:    s_endpgm34;35; GFX12-LABEL: s_buffer_load_imm:36; GFX12:       ; %bb.0: ; %main_body37; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x438; GFX12-NEXT:    s_wait_kmcnt 0x039; GFX12-NEXT:    v_mov_b32_e32 v0, s040; GFX12-NEXT:    export mrt0 v0, v0, v0, v0 done41; GFX12-NEXT:    s_endpgm42main_body:43  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 4, i32 0)44  %bitcast = bitcast i32 %load to float45  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %bitcast, float poison, float poison, float poison, i1 true, i1 true)46  ret void47}48 49define amdgpu_ps void @s_buffer_load_index(<4 x i32> inreg %desc, i32 inreg %index) {50; GFX678-LABEL: s_buffer_load_index:51; GFX678:       ; %bb.0: ; %main_body52; GFX678-NEXT:    s_buffer_load_dword s0, s[0:3], s453; GFX678-NEXT:    s_waitcnt lgkmcnt(0)54; GFX678-NEXT:    v_mov_b32_e32 v0, s055; GFX678-NEXT:    exp mrt0 v0, v0, v0, v0 done vm56; GFX678-NEXT:    s_endpgm57;58; GFX910-LABEL: s_buffer_load_index:59; GFX910:       ; %bb.0: ; %main_body60; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x061; GFX910-NEXT:    s_waitcnt lgkmcnt(0)62; GFX910-NEXT:    v_mov_b32_e32 v0, s063; GFX910-NEXT:    exp mrt0 v0, v0, v0, v0 done vm64; GFX910-NEXT:    s_endpgm65;66; GFX11-LABEL: s_buffer_load_index:67; GFX11:       ; %bb.0: ; %main_body68; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x069; GFX11-NEXT:    s_waitcnt lgkmcnt(0)70; GFX11-NEXT:    v_mov_b32_e32 v0, s071; GFX11-NEXT:    exp mrt0 v0, v0, v0, v0 done72; GFX11-NEXT:    s_endpgm73;74; GFX12-LABEL: s_buffer_load_index:75; GFX12:       ; %bb.0: ; %main_body76; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x077; GFX12-NEXT:    s_wait_kmcnt 0x078; GFX12-NEXT:    v_mov_b32_e32 v0, s079; GFX12-NEXT:    export mrt0 v0, v0, v0, v0 done80; GFX12-NEXT:    s_endpgm81main_body:82  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 %index, i32 0)83  %bitcast = bitcast i32 %load to float84  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %bitcast, float poison, float poison, float poison, i1 true, i1 true)85  ret void86}87 88define amdgpu_ps void @s_buffer_load_index_divergent(<4 x i32> inreg %desc, i32 %index) {89; GFX678910-LABEL: s_buffer_load_index_divergent:90; GFX678910:       ; %bb.0: ; %main_body91; GFX678910-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen92; GFX678910-NEXT:    s_waitcnt vmcnt(0)93; GFX678910-NEXT:    exp mrt0 v0, v0, v0, v0 done vm94; GFX678910-NEXT:    s_endpgm95;96; GFX11-LABEL: s_buffer_load_index_divergent:97; GFX11:       ; %bb.0: ; %main_body98; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen99; GFX11-NEXT:    s_waitcnt vmcnt(0)100; GFX11-NEXT:    exp mrt0 v0, v0, v0, v0 done101; GFX11-NEXT:    s_endpgm102;103; GFX12-LABEL: s_buffer_load_index_divergent:104; GFX12:       ; %bb.0: ; %main_body105; GFX12-NEXT:    buffer_load_b32 v0, v0, s[0:3], null offen106; GFX12-NEXT:    s_wait_loadcnt 0x0107; GFX12-NEXT:    export mrt0 v0, v0, v0, v0 done108; GFX12-NEXT:    s_endpgm109main_body:110  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 %index, i32 0)111  %bitcast = bitcast i32 %load to float112  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %bitcast, float poison, float poison, float poison, i1 true, i1 true)113  ret void114}115 116define amdgpu_ps void @s_buffer_loadx2_imm(<4 x i32> inreg %desc) {117; GFX67-LABEL: s_buffer_loadx2_imm:118; GFX67:       ; %bb.0: ; %main_body119; GFX67-NEXT:    s_buffer_load_dwordx2 s[0:1], s[0:3], 0x10120; GFX67-NEXT:    s_waitcnt lgkmcnt(0)121; GFX67-NEXT:    v_mov_b32_e32 v0, s0122; GFX67-NEXT:    v_mov_b32_e32 v1, s1123; GFX67-NEXT:    exp mrt0 v0, v1, v0, v0 done vm124; GFX67-NEXT:    s_endpgm125;126; GFX8910-LABEL: s_buffer_loadx2_imm:127; GFX8910:       ; %bb.0: ; %main_body128; GFX8910-NEXT:    s_buffer_load_dwordx2 s[0:1], s[0:3], 0x40129; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)130; GFX8910-NEXT:    v_mov_b32_e32 v0, s0131; GFX8910-NEXT:    v_mov_b32_e32 v1, s1132; GFX8910-NEXT:    exp mrt0 v0, v1, v0, v0 done vm133; GFX8910-NEXT:    s_endpgm134;135; GFX11-LABEL: s_buffer_loadx2_imm:136; GFX11:       ; %bb.0: ; %main_body137; GFX11-NEXT:    s_buffer_load_b64 s[0:1], s[0:3], 0x40138; GFX11-NEXT:    s_waitcnt lgkmcnt(0)139; GFX11-NEXT:    v_mov_b32_e32 v0, s0140; GFX11-NEXT:    v_mov_b32_e32 v1, s1141; GFX11-NEXT:    exp mrt0 v0, v1, v0, v0 done142; GFX11-NEXT:    s_endpgm143;144; GFX12-LABEL: s_buffer_loadx2_imm:145; GFX12:       ; %bb.0: ; %main_body146; GFX12-NEXT:    s_buffer_load_b64 s[0:1], s[0:3], 0x40147; GFX12-NEXT:    s_wait_kmcnt 0x0148; GFX12-NEXT:    v_mov_b32_e32 v0, s0149; GFX12-NEXT:    v_mov_b32_e32 v1, s1150; GFX12-NEXT:    export mrt0 v0, v1, v0, v0 done151; GFX12-NEXT:    s_endpgm152main_body:153  %load = call <2 x i32> @llvm.amdgcn.s.buffer.load.v2i32(<4 x i32> %desc, i32 64, i32 0)154  %bitcast = bitcast <2 x i32> %load to <2 x float>155  %x = extractelement <2 x float> %bitcast, i32 0156  %y = extractelement <2 x float> %bitcast, i32 1157  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float poison, float poison, i1 true, i1 true)158  ret void159}160 161define amdgpu_ps void @s_buffer_loadx2_index(<4 x i32> inreg %desc, i32 inreg %index) {162; GFX678-LABEL: s_buffer_loadx2_index:163; GFX678:       ; %bb.0: ; %main_body164; GFX678-NEXT:    s_buffer_load_dwordx2 s[0:1], s[0:3], s4165; GFX678-NEXT:    s_waitcnt lgkmcnt(0)166; GFX678-NEXT:    v_mov_b32_e32 v0, s0167; GFX678-NEXT:    v_mov_b32_e32 v1, s1168; GFX678-NEXT:    exp mrt0 v0, v1, v0, v0 done vm169; GFX678-NEXT:    s_endpgm170;171; GFX910-LABEL: s_buffer_loadx2_index:172; GFX910:       ; %bb.0: ; %main_body173; GFX910-NEXT:    s_buffer_load_dwordx2 s[0:1], s[0:3], s4 offset:0x0174; GFX910-NEXT:    s_waitcnt lgkmcnt(0)175; GFX910-NEXT:    v_mov_b32_e32 v0, s0176; GFX910-NEXT:    v_mov_b32_e32 v1, s1177; GFX910-NEXT:    exp mrt0 v0, v1, v0, v0 done vm178; GFX910-NEXT:    s_endpgm179;180; GFX11-LABEL: s_buffer_loadx2_index:181; GFX11:       ; %bb.0: ; %main_body182; GFX11-NEXT:    s_buffer_load_b64 s[0:1], s[0:3], s4 offset:0x0183; GFX11-NEXT:    s_waitcnt lgkmcnt(0)184; GFX11-NEXT:    v_mov_b32_e32 v0, s0185; GFX11-NEXT:    v_mov_b32_e32 v1, s1186; GFX11-NEXT:    exp mrt0 v0, v1, v0, v0 done187; GFX11-NEXT:    s_endpgm188;189; GFX12-LABEL: s_buffer_loadx2_index:190; GFX12:       ; %bb.0: ; %main_body191; GFX12-NEXT:    s_buffer_load_b64 s[0:1], s[0:3], s4 offset:0x0192; GFX12-NEXT:    s_wait_kmcnt 0x0193; GFX12-NEXT:    v_mov_b32_e32 v0, s0194; GFX12-NEXT:    v_mov_b32_e32 v1, s1195; GFX12-NEXT:    export mrt0 v0, v1, v0, v0 done196; GFX12-NEXT:    s_endpgm197main_body:198  %load = call <2 x i32> @llvm.amdgcn.s.buffer.load.v2i32(<4 x i32> %desc, i32 %index, i32 0)199  %bitcast = bitcast <2 x i32> %load to <2 x float>200  %x = extractelement <2 x float> %bitcast, i32 0201  %y = extractelement <2 x float> %bitcast, i32 1202  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float poison, float poison, i1 true, i1 true)203  ret void204}205 206define amdgpu_ps void @s_buffer_loadx2_index_divergent(<4 x i32> inreg %desc, i32 %index) {207; GFX678910-LABEL: s_buffer_loadx2_index_divergent:208; GFX678910:       ; %bb.0: ; %main_body209; GFX678910-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[0:3], 0 offen210; GFX678910-NEXT:    s_waitcnt vmcnt(0)211; GFX678910-NEXT:    exp mrt0 v0, v1, v0, v0 done vm212; GFX678910-NEXT:    s_endpgm213;214; GFX11-LABEL: s_buffer_loadx2_index_divergent:215; GFX11:       ; %bb.0: ; %main_body216; GFX11-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], 0 offen217; GFX11-NEXT:    s_waitcnt vmcnt(0)218; GFX11-NEXT:    exp mrt0 v0, v1, v0, v0 done219; GFX11-NEXT:    s_endpgm220;221; GFX12-LABEL: s_buffer_loadx2_index_divergent:222; GFX12:       ; %bb.0: ; %main_body223; GFX12-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], null offen224; GFX12-NEXT:    s_wait_loadcnt 0x0225; GFX12-NEXT:    export mrt0 v0, v1, v0, v0 done226; GFX12-NEXT:    s_endpgm227main_body:228  %load = call <2 x i32> @llvm.amdgcn.s.buffer.load.v2i32(<4 x i32> %desc, i32 %index, i32 0)229  %bitcast = bitcast <2 x i32> %load to <2 x float>230  %x = extractelement <2 x float> %bitcast, i32 0231  %y = extractelement <2 x float> %bitcast, i32 1232  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float poison, float poison, i1 true, i1 true)233  ret void234}235 236define amdgpu_ps void @s_buffer_loadx3_imm(<4 x i32> inreg %desc) {237; GFX67-LABEL: s_buffer_loadx3_imm:238; GFX67:       ; %bb.0: ; %main_body239; GFX67-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], 0x10240; GFX67-NEXT:    s_waitcnt lgkmcnt(0)241; GFX67-NEXT:    v_mov_b32_e32 v0, s0242; GFX67-NEXT:    v_mov_b32_e32 v1, s1243; GFX67-NEXT:    v_mov_b32_e32 v2, s2244; GFX67-NEXT:    exp mrt0 v0, v1, v2, v0 done vm245; GFX67-NEXT:    s_endpgm246;247; GFX8910-LABEL: s_buffer_loadx3_imm:248; GFX8910:       ; %bb.0: ; %main_body249; GFX8910-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], 0x40250; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)251; GFX8910-NEXT:    v_mov_b32_e32 v0, s0252; GFX8910-NEXT:    v_mov_b32_e32 v1, s1253; GFX8910-NEXT:    v_mov_b32_e32 v2, s2254; GFX8910-NEXT:    exp mrt0 v0, v1, v2, v0 done vm255; GFX8910-NEXT:    s_endpgm256;257; GFX11-LABEL: s_buffer_loadx3_imm:258; GFX11:       ; %bb.0: ; %main_body259; GFX11-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], 0x40260; GFX11-NEXT:    s_waitcnt lgkmcnt(0)261; GFX11-NEXT:    v_mov_b32_e32 v0, s0262; GFX11-NEXT:    v_mov_b32_e32 v1, s1263; GFX11-NEXT:    v_mov_b32_e32 v2, s2264; GFX11-NEXT:    exp mrt0 v0, v1, v2, v0 done265; GFX11-NEXT:    s_endpgm266;267; GFX12-LABEL: s_buffer_loadx3_imm:268; GFX12:       ; %bb.0: ; %main_body269; GFX12-NEXT:    s_buffer_load_b96 s[0:2], s[0:3], 0x40270; GFX12-NEXT:    s_wait_kmcnt 0x0271; GFX12-NEXT:    v_mov_b32_e32 v0, s0272; GFX12-NEXT:    v_mov_b32_e32 v1, s1273; GFX12-NEXT:    v_mov_b32_e32 v2, s2274; GFX12-NEXT:    export mrt0 v0, v1, v2, v0 done275; GFX12-NEXT:    s_endpgm276main_body:277  %load = call <3 x i32> @llvm.amdgcn.s.buffer.load.v3i32(<4 x i32> %desc, i32 64, i32 0)278  %bitcast = bitcast <3 x i32> %load to <3 x float>279  %x = extractelement <3 x float> %bitcast, i32 0280  %y = extractelement <3 x float> %bitcast, i32 1281  %z = extractelement <3 x float> %bitcast, i32 2282  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float poison, i1 true, i1 true)283  ret void284}285 286define amdgpu_ps void @s_buffer_loadx3_index(<4 x i32> inreg %desc, i32 inreg %index) {287; GFX678-LABEL: s_buffer_loadx3_index:288; GFX678:       ; %bb.0: ; %main_body289; GFX678-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], s4290; GFX678-NEXT:    s_waitcnt lgkmcnt(0)291; GFX678-NEXT:    v_mov_b32_e32 v0, s0292; GFX678-NEXT:    v_mov_b32_e32 v1, s1293; GFX678-NEXT:    v_mov_b32_e32 v2, s2294; GFX678-NEXT:    exp mrt0 v0, v1, v2, v0 done vm295; GFX678-NEXT:    s_endpgm296;297; GFX910-LABEL: s_buffer_loadx3_index:298; GFX910:       ; %bb.0: ; %main_body299; GFX910-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], s4 offset:0x0300; GFX910-NEXT:    s_waitcnt lgkmcnt(0)301; GFX910-NEXT:    v_mov_b32_e32 v0, s0302; GFX910-NEXT:    v_mov_b32_e32 v1, s1303; GFX910-NEXT:    v_mov_b32_e32 v2, s2304; GFX910-NEXT:    exp mrt0 v0, v1, v2, v0 done vm305; GFX910-NEXT:    s_endpgm306;307; GFX11-LABEL: s_buffer_loadx3_index:308; GFX11:       ; %bb.0: ; %main_body309; GFX11-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], s4 offset:0x0310; GFX11-NEXT:    s_waitcnt lgkmcnt(0)311; GFX11-NEXT:    v_mov_b32_e32 v0, s0312; GFX11-NEXT:    v_mov_b32_e32 v1, s1313; GFX11-NEXT:    v_mov_b32_e32 v2, s2314; GFX11-NEXT:    exp mrt0 v0, v1, v2, v0 done315; GFX11-NEXT:    s_endpgm316;317; GFX12-LABEL: s_buffer_loadx3_index:318; GFX12:       ; %bb.0: ; %main_body319; GFX12-NEXT:    s_buffer_load_b96 s[0:2], s[0:3], s4 offset:0x0320; GFX12-NEXT:    s_wait_kmcnt 0x0321; GFX12-NEXT:    v_mov_b32_e32 v0, s0322; GFX12-NEXT:    v_mov_b32_e32 v1, s1323; GFX12-NEXT:    v_mov_b32_e32 v2, s2324; GFX12-NEXT:    export mrt0 v0, v1, v2, v0 done325; GFX12-NEXT:    s_endpgm326main_body:327  %load = call <3 x i32> @llvm.amdgcn.s.buffer.load.v3i32(<4 x i32> %desc, i32 %index, i32 0)328  %bitcast = bitcast <3 x i32> %load to <3 x float>329  %x = extractelement <3 x float> %bitcast, i32 0330  %y = extractelement <3 x float> %bitcast, i32 1331  %z = extractelement <3 x float> %bitcast, i32 2332  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float poison, i1 true, i1 true)333  ret void334}335 336define amdgpu_ps void @s_buffer_loadx3_index_divergent(<4 x i32> inreg %desc, i32 %index) {337; GFX6-LABEL: s_buffer_loadx3_index_divergent:338; GFX6:       ; %bb.0: ; %main_body339; GFX6-NEXT:    buffer_load_dwordx4 v[0:3], v0, s[0:3], 0 offen340; GFX6-NEXT:    s_waitcnt vmcnt(0)341; GFX6-NEXT:    exp mrt0 v0, v1, v2, v0 done vm342; GFX6-NEXT:    s_endpgm343;344; GFX78910-LABEL: s_buffer_loadx3_index_divergent:345; GFX78910:       ; %bb.0: ; %main_body346; GFX78910-NEXT:    buffer_load_dwordx3 v[0:2], v0, s[0:3], 0 offen347; GFX78910-NEXT:    s_waitcnt vmcnt(0)348; GFX78910-NEXT:    exp mrt0 v0, v1, v2, v0 done vm349; GFX78910-NEXT:    s_endpgm350;351; GFX11-LABEL: s_buffer_loadx3_index_divergent:352; GFX11:       ; %bb.0: ; %main_body353; GFX11-NEXT:    buffer_load_b96 v[0:2], v0, s[0:3], 0 offen354; GFX11-NEXT:    s_waitcnt vmcnt(0)355; GFX11-NEXT:    exp mrt0 v0, v1, v2, v0 done356; GFX11-NEXT:    s_endpgm357;358; GFX12-LABEL: s_buffer_loadx3_index_divergent:359; GFX12:       ; %bb.0: ; %main_body360; GFX12-NEXT:    buffer_load_b96 v[0:2], v0, s[0:3], null offen361; GFX12-NEXT:    s_wait_loadcnt 0x0362; GFX12-NEXT:    export mrt0 v0, v1, v2, v0 done363; GFX12-NEXT:    s_endpgm364main_body:365  %load = call <3 x i32> @llvm.amdgcn.s.buffer.load.v3i32(<4 x i32> %desc, i32 %index, i32 0)366  %bitcast = bitcast <3 x i32> %load to <3 x float>367  %x = extractelement <3 x float> %bitcast, i32 0368  %y = extractelement <3 x float> %bitcast, i32 1369  %z = extractelement <3 x float> %bitcast, i32 2370  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float poison, i1 true, i1 true)371  ret void372}373 374define amdgpu_ps void @s_buffer_loadx4_imm(<4 x i32> inreg %desc) {375; GFX67-LABEL: s_buffer_loadx4_imm:376; GFX67:       ; %bb.0: ; %main_body377; GFX67-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], 0x32378; GFX67-NEXT:    s_waitcnt lgkmcnt(0)379; GFX67-NEXT:    v_mov_b32_e32 v0, s0380; GFX67-NEXT:    v_mov_b32_e32 v1, s1381; GFX67-NEXT:    v_mov_b32_e32 v2, s2382; GFX67-NEXT:    v_mov_b32_e32 v3, s3383; GFX67-NEXT:    exp mrt0 v0, v1, v2, v3 done vm384; GFX67-NEXT:    s_endpgm385;386; GFX8910-LABEL: s_buffer_loadx4_imm:387; GFX8910:       ; %bb.0: ; %main_body388; GFX8910-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], 0xc8389; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)390; GFX8910-NEXT:    v_mov_b32_e32 v0, s0391; GFX8910-NEXT:    v_mov_b32_e32 v1, s1392; GFX8910-NEXT:    v_mov_b32_e32 v2, s2393; GFX8910-NEXT:    v_mov_b32_e32 v3, s3394; GFX8910-NEXT:    exp mrt0 v0, v1, v2, v3 done vm395; GFX8910-NEXT:    s_endpgm396;397; GFX11-LABEL: s_buffer_loadx4_imm:398; GFX11:       ; %bb.0: ; %main_body399; GFX11-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], 0xc8400; GFX11-NEXT:    s_waitcnt lgkmcnt(0)401; GFX11-NEXT:    v_mov_b32_e32 v0, s0402; GFX11-NEXT:    v_mov_b32_e32 v1, s1403; GFX11-NEXT:    v_mov_b32_e32 v2, s2404; GFX11-NEXT:    v_mov_b32_e32 v3, s3405; GFX11-NEXT:    exp mrt0 v0, v1, v2, v3 done406; GFX11-NEXT:    s_endpgm407;408; GFX12-LABEL: s_buffer_loadx4_imm:409; GFX12:       ; %bb.0: ; %main_body410; GFX12-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], 0xc8411; GFX12-NEXT:    s_wait_kmcnt 0x0412; GFX12-NEXT:    v_mov_b32_e32 v0, s0413; GFX12-NEXT:    v_mov_b32_e32 v1, s1414; GFX12-NEXT:    v_mov_b32_e32 v2, s2415; GFX12-NEXT:    v_mov_b32_e32 v3, s3416; GFX12-NEXT:    export mrt0 v0, v1, v2, v3 done417; GFX12-NEXT:    s_endpgm418main_body:419  %load = call <4 x i32> @llvm.amdgcn.s.buffer.load.v4i32(<4 x i32> %desc, i32 200, i32 0)420  %bitcast = bitcast <4 x i32> %load to <4 x float>421  %x = extractelement <4 x float> %bitcast, i32 0422  %y = extractelement <4 x float> %bitcast, i32 1423  %z = extractelement <4 x float> %bitcast, i32 2424  %w = extractelement <4 x float> %bitcast, i32 3425  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true)426  ret void427}428 429define amdgpu_ps void @s_buffer_loadx4_index(<4 x i32> inreg %desc, i32 inreg %index) {430; GFX678-LABEL: s_buffer_loadx4_index:431; GFX678:       ; %bb.0: ; %main_body432; GFX678-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], s4433; GFX678-NEXT:    s_waitcnt lgkmcnt(0)434; GFX678-NEXT:    v_mov_b32_e32 v0, s0435; GFX678-NEXT:    v_mov_b32_e32 v1, s1436; GFX678-NEXT:    v_mov_b32_e32 v2, s2437; GFX678-NEXT:    v_mov_b32_e32 v3, s3438; GFX678-NEXT:    exp mrt0 v0, v1, v2, v3 done vm439; GFX678-NEXT:    s_endpgm440;441; GFX910-LABEL: s_buffer_loadx4_index:442; GFX910:       ; %bb.0: ; %main_body443; GFX910-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], s4 offset:0x0444; GFX910-NEXT:    s_waitcnt lgkmcnt(0)445; GFX910-NEXT:    v_mov_b32_e32 v0, s0446; GFX910-NEXT:    v_mov_b32_e32 v1, s1447; GFX910-NEXT:    v_mov_b32_e32 v2, s2448; GFX910-NEXT:    v_mov_b32_e32 v3, s3449; GFX910-NEXT:    exp mrt0 v0, v1, v2, v3 done vm450; GFX910-NEXT:    s_endpgm451;452; GFX11-LABEL: s_buffer_loadx4_index:453; GFX11:       ; %bb.0: ; %main_body454; GFX11-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], s4 offset:0x0455; GFX11-NEXT:    s_waitcnt lgkmcnt(0)456; GFX11-NEXT:    v_mov_b32_e32 v0, s0457; GFX11-NEXT:    v_mov_b32_e32 v1, s1458; GFX11-NEXT:    v_mov_b32_e32 v2, s2459; GFX11-NEXT:    v_mov_b32_e32 v3, s3460; GFX11-NEXT:    exp mrt0 v0, v1, v2, v3 done461; GFX11-NEXT:    s_endpgm462;463; GFX12-LABEL: s_buffer_loadx4_index:464; GFX12:       ; %bb.0: ; %main_body465; GFX12-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], s4 offset:0x0466; GFX12-NEXT:    s_wait_kmcnt 0x0467; GFX12-NEXT:    v_mov_b32_e32 v0, s0468; GFX12-NEXT:    v_mov_b32_e32 v1, s1469; GFX12-NEXT:    v_mov_b32_e32 v2, s2470; GFX12-NEXT:    v_mov_b32_e32 v3, s3471; GFX12-NEXT:    export mrt0 v0, v1, v2, v3 done472; GFX12-NEXT:    s_endpgm473main_body:474  %load = call <4 x i32> @llvm.amdgcn.s.buffer.load.v4i32(<4 x i32> %desc, i32 %index, i32 0)475  %bitcast = bitcast <4 x i32> %load to <4 x float>476  %x = extractelement <4 x float> %bitcast, i32 0477  %y = extractelement <4 x float> %bitcast, i32 1478  %z = extractelement <4 x float> %bitcast, i32 2479  %w = extractelement <4 x float> %bitcast, i32 3480  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true)481  ret void482}483 484define amdgpu_ps void @s_buffer_loadx4_index_divergent(<4 x i32> inreg %desc, i32 %index) {485; GFX678910-LABEL: s_buffer_loadx4_index_divergent:486; GFX678910:       ; %bb.0: ; %main_body487; GFX678910-NEXT:    buffer_load_dwordx4 v[0:3], v0, s[0:3], 0 offen488; GFX678910-NEXT:    s_waitcnt vmcnt(0)489; GFX678910-NEXT:    exp mrt0 v0, v1, v2, v3 done vm490; GFX678910-NEXT:    s_endpgm491;492; GFX11-LABEL: s_buffer_loadx4_index_divergent:493; GFX11:       ; %bb.0: ; %main_body494; GFX11-NEXT:    buffer_load_b128 v[0:3], v0, s[0:3], 0 offen495; GFX11-NEXT:    s_waitcnt vmcnt(0)496; GFX11-NEXT:    exp mrt0 v0, v1, v2, v3 done497; GFX11-NEXT:    s_endpgm498;499; GFX12-LABEL: s_buffer_loadx4_index_divergent:500; GFX12:       ; %bb.0: ; %main_body501; GFX12-NEXT:    buffer_load_b128 v[0:3], v0, s[0:3], null offen502; GFX12-NEXT:    s_wait_loadcnt 0x0503; GFX12-NEXT:    export mrt0 v0, v1, v2, v3 done504; GFX12-NEXT:    s_endpgm505main_body:506  %load = call <4 x i32> @llvm.amdgcn.s.buffer.load.v4i32(<4 x i32> %desc, i32 %index, i32 0)507  %bitcast = bitcast <4 x i32> %load to <4 x float>508  %x = extractelement <4 x float> %bitcast, i32 0509  %y = extractelement <4 x float> %bitcast, i32 1510  %z = extractelement <4 x float> %bitcast, i32 2511  %w = extractelement <4 x float> %bitcast, i32 3512  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true)513  ret void514}515 516define amdgpu_ps void @s_buffer_load_imm_mergex2(<4 x i32> inreg %desc) {517; GFX67-LABEL: s_buffer_load_imm_mergex2:518; GFX67:       ; %bb.0: ; %main_body519; GFX67-NEXT:    s_buffer_load_dwordx2 s[0:1], s[0:3], 0x1520; GFX67-NEXT:    s_waitcnt lgkmcnt(0)521; GFX67-NEXT:    v_mov_b32_e32 v0, s0522; GFX67-NEXT:    v_mov_b32_e32 v1, s1523; GFX67-NEXT:    exp mrt0 v0, v1, v0, v0 done vm524; GFX67-NEXT:    s_endpgm525;526; GFX8-LABEL: s_buffer_load_imm_mergex2:527; GFX8:       ; %bb.0: ; %main_body528; GFX8-NEXT:    s_buffer_load_dwordx2 s[0:1], s[0:3], 0x4529; GFX8-NEXT:    s_waitcnt lgkmcnt(0)530; GFX8-NEXT:    v_mov_b32_e32 v0, s0531; GFX8-NEXT:    v_mov_b32_e32 v1, s1532; GFX8-NEXT:    exp mrt0 v0, v1, v0, v0 done vm533; GFX8-NEXT:    s_endpgm534;535; GFX910-LABEL: s_buffer_load_imm_mergex2:536; GFX910:       ; %bb.0: ; %main_body537; GFX910-NEXT:    s_buffer_load_dwordx2 s[4:5], s[0:3], 0x4538; GFX910-NEXT:    s_waitcnt lgkmcnt(0)539; GFX910-NEXT:    v_mov_b32_e32 v0, s4540; GFX910-NEXT:    v_mov_b32_e32 v1, s5541; GFX910-NEXT:    exp mrt0 v0, v1, v0, v0 done vm542; GFX910-NEXT:    s_endpgm543;544; GFX11-LABEL: s_buffer_load_imm_mergex2:545; GFX11:       ; %bb.0: ; %main_body546; GFX11-NEXT:    s_buffer_load_b64 s[0:1], s[0:3], 0x4547; GFX11-NEXT:    s_waitcnt lgkmcnt(0)548; GFX11-NEXT:    v_mov_b32_e32 v0, s0549; GFX11-NEXT:    v_mov_b32_e32 v1, s1550; GFX11-NEXT:    exp mrt0 v0, v1, v0, v0 done551; GFX11-NEXT:    s_endpgm552;553; GFX12-LABEL: s_buffer_load_imm_mergex2:554; GFX12:       ; %bb.0: ; %main_body555; GFX12-NEXT:    s_buffer_load_b64 s[0:1], s[0:3], 0x4556; GFX12-NEXT:    s_wait_kmcnt 0x0557; GFX12-NEXT:    v_mov_b32_e32 v0, s0558; GFX12-NEXT:    v_mov_b32_e32 v1, s1559; GFX12-NEXT:    export mrt0 v0, v1, v0, v0 done560; GFX12-NEXT:    s_endpgm561main_body:562  %load0 = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 4, i32 0)563  %load1 = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 8, i32 0)564  %x = bitcast i32 %load0 to float565  %y = bitcast i32 %load1 to float566  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float poison, float poison, i1 true, i1 true)567  ret void568}569 570define amdgpu_ps void @s_buffer_load_imm_mergex4(<4 x i32> inreg %desc) {571; GFX67-LABEL: s_buffer_load_imm_mergex4:572; GFX67:       ; %bb.0: ; %main_body573; GFX67-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], 0x2574; GFX67-NEXT:    s_waitcnt lgkmcnt(0)575; GFX67-NEXT:    v_mov_b32_e32 v0, s0576; GFX67-NEXT:    v_mov_b32_e32 v1, s1577; GFX67-NEXT:    v_mov_b32_e32 v2, s2578; GFX67-NEXT:    v_mov_b32_e32 v3, s3579; GFX67-NEXT:    exp mrt0 v0, v1, v2, v3 done vm580; GFX67-NEXT:    s_endpgm581;582; GFX8-LABEL: s_buffer_load_imm_mergex4:583; GFX8:       ; %bb.0: ; %main_body584; GFX8-NEXT:    s_buffer_load_dwordx4 s[0:3], s[0:3], 0x8585; GFX8-NEXT:    s_waitcnt lgkmcnt(0)586; GFX8-NEXT:    v_mov_b32_e32 v0, s0587; GFX8-NEXT:    v_mov_b32_e32 v1, s1588; GFX8-NEXT:    v_mov_b32_e32 v2, s2589; GFX8-NEXT:    v_mov_b32_e32 v3, s3590; GFX8-NEXT:    exp mrt0 v0, v1, v2, v3 done vm591; GFX8-NEXT:    s_endpgm592;593; GFX910-LABEL: s_buffer_load_imm_mergex4:594; GFX910:       ; %bb.0: ; %main_body595; GFX910-NEXT:    s_buffer_load_dwordx4 s[4:7], s[0:3], 0x8596; GFX910-NEXT:    s_waitcnt lgkmcnt(0)597; GFX910-NEXT:    v_mov_b32_e32 v0, s4598; GFX910-NEXT:    v_mov_b32_e32 v1, s5599; GFX910-NEXT:    v_mov_b32_e32 v2, s6600; GFX910-NEXT:    v_mov_b32_e32 v3, s7601; GFX910-NEXT:    exp mrt0 v0, v1, v2, v3 done vm602; GFX910-NEXT:    s_endpgm603;604; GFX11-LABEL: s_buffer_load_imm_mergex4:605; GFX11:       ; %bb.0: ; %main_body606; GFX11-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], 0x8607; GFX11-NEXT:    s_waitcnt lgkmcnt(0)608; GFX11-NEXT:    v_mov_b32_e32 v0, s0609; GFX11-NEXT:    v_mov_b32_e32 v1, s1610; GFX11-NEXT:    v_mov_b32_e32 v2, s2611; GFX11-NEXT:    v_mov_b32_e32 v3, s3612; GFX11-NEXT:    exp mrt0 v0, v1, v2, v3 done613; GFX11-NEXT:    s_endpgm614;615; GFX12-LABEL: s_buffer_load_imm_mergex4:616; GFX12:       ; %bb.0: ; %main_body617; GFX12-NEXT:    s_buffer_load_b128 s[0:3], s[0:3], 0x8618; GFX12-NEXT:    s_wait_kmcnt 0x0619; GFX12-NEXT:    v_mov_b32_e32 v0, s0620; GFX12-NEXT:    v_mov_b32_e32 v1, s1621; GFX12-NEXT:    v_mov_b32_e32 v2, s2622; GFX12-NEXT:    v_mov_b32_e32 v3, s3623; GFX12-NEXT:    export mrt0 v0, v1, v2, v3 done624; GFX12-NEXT:    s_endpgm625main_body:626  %load0 = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 8, i32 0)627  %load1 = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 12, i32 0)628  %load2 = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 16, i32 0)629  %load3 = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 20, i32 0)630  %x = bitcast i32 %load0 to float631  %y = bitcast i32 %load1 to float632  %z = bitcast i32 %load2 to float633  %w = bitcast i32 %load3 to float634  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true)635  ret void636}637 638@gv = external addrspace(1) global i32639 640define amdgpu_ps void @s_buffer_load_index_across_bb(<4 x i32> inreg %desc, i32 %index) {641; GFX6-LABEL: s_buffer_load_index_across_bb:642; GFX6:       ; %bb.0: ; %main_body643; GFX6-NEXT:    s_getpc_b64 s[4:5]644; GFX6-NEXT:    s_add_u32 s4, s4, gv@gotpcrel32@lo+4645; GFX6-NEXT:    s_addc_u32 s5, s5, gv@gotpcrel32@hi+12646; GFX6-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0647; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 4, v0648; GFX6-NEXT:    s_mov_b32 s7, 0xf000649; GFX6-NEXT:    s_mov_b32 s6, -1650; GFX6-NEXT:    s_waitcnt lgkmcnt(0)651; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0652; GFX6-NEXT:    s_waitcnt expcnt(0)653; GFX6-NEXT:    v_or_b32_e32 v0, 8, v0654; GFX6-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen655; GFX6-NEXT:    s_waitcnt vmcnt(0)656; GFX6-NEXT:    exp mrt0 v0, v0, v0, v0 done vm657; GFX6-NEXT:    s_endpgm658;659; GFX7-LABEL: s_buffer_load_index_across_bb:660; GFX7:       ; %bb.0: ; %main_body661; GFX7-NEXT:    s_getpc_b64 s[4:5]662; GFX7-NEXT:    s_add_u32 s4, s4, gv@gotpcrel32@lo+4663; GFX7-NEXT:    s_addc_u32 s5, s5, gv@gotpcrel32@hi+12664; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0665; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 4, v0666; GFX7-NEXT:    s_mov_b32 s7, 0xf000667; GFX7-NEXT:    s_mov_b32 s6, -1668; GFX7-NEXT:    s_waitcnt lgkmcnt(0)669; GFX7-NEXT:    buffer_store_dword v0, off, s[4:7], 0670; GFX7-NEXT:    v_or_b32_e32 v0, 8, v0671; GFX7-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen672; GFX7-NEXT:    s_waitcnt vmcnt(0)673; GFX7-NEXT:    exp mrt0 v0, v0, v0, v0 done vm674; GFX7-NEXT:    s_endpgm675;676; GFX8-LABEL: s_buffer_load_index_across_bb:677; GFX8:       ; %bb.0: ; %main_body678; GFX8-NEXT:    s_getpc_b64 s[4:5]679; GFX8-NEXT:    s_add_u32 s4, s4, gv@gotpcrel32@lo+4680; GFX8-NEXT:    s_addc_u32 s5, s5, gv@gotpcrel32@hi+12681; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0682; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 4, v0683; GFX8-NEXT:    s_waitcnt lgkmcnt(0)684; GFX8-NEXT:    v_mov_b32_e32 v1, s4685; GFX8-NEXT:    v_mov_b32_e32 v2, s5686; GFX8-NEXT:    flat_store_dword v[1:2], v0687; GFX8-NEXT:    v_or_b32_e32 v0, 8, v0688; GFX8-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen689; GFX8-NEXT:    s_waitcnt vmcnt(0)690; GFX8-NEXT:    exp mrt0 v0, v0, v0, v0 done vm691; GFX8-NEXT:    s_endpgm692;693; GFX9-LABEL: s_buffer_load_index_across_bb:694; GFX9:       ; %bb.0: ; %main_body695; GFX9-NEXT:    s_getpc_b64 s[4:5]696; GFX9-NEXT:    s_add_u32 s4, s4, gv@gotpcrel32@lo+4697; GFX9-NEXT:    s_addc_u32 s5, s5, gv@gotpcrel32@hi+12698; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0699; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 4, v0700; GFX9-NEXT:    v_mov_b32_e32 v1, 0701; GFX9-NEXT:    s_waitcnt lgkmcnt(0)702; GFX9-NEXT:    global_store_dword v1, v0, s[4:5]703; GFX9-NEXT:    v_or_b32_e32 v0, 8, v0704; GFX9-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen705; GFX9-NEXT:    s_waitcnt vmcnt(0)706; GFX9-NEXT:    exp mrt0 v0, v0, v0, v0 done vm707; GFX9-NEXT:    s_endpgm708;709; GFX10-LABEL: s_buffer_load_index_across_bb:710; GFX10:       ; %bb.0: ; %main_body711; GFX10-NEXT:    s_getpc_b64 s[4:5]712; GFX10-NEXT:    s_add_u32 s4, s4, gv@gotpcrel32@lo+4713; GFX10-NEXT:    s_addc_u32 s5, s5, gv@gotpcrel32@hi+12714; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 4, v0715; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0716; GFX10-NEXT:    v_mov_b32_e32 v1, 0717; GFX10-NEXT:    s_waitcnt lgkmcnt(0)718; GFX10-NEXT:    global_store_dword v1, v0, s[4:5]719; GFX10-NEXT:    v_or_b32_e32 v0, 8, v0720; GFX10-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen721; GFX10-NEXT:    s_waitcnt vmcnt(0)722; GFX10-NEXT:    exp mrt0 v0, v0, v0, v0 done vm723; GFX10-NEXT:    s_endpgm724;725; GFX11-LABEL: s_buffer_load_index_across_bb:726; GFX11:       ; %bb.0: ; %main_body727; GFX11-NEXT:    s_getpc_b64 s[4:5]728; GFX11-NEXT:    s_add_u32 s4, s4, gv@gotpcrel32@lo+4729; GFX11-NEXT:    s_addc_u32 s5, s5, gv@gotpcrel32@hi+12730; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 4, v0731; GFX11-NEXT:    s_load_b64 s[4:5], s[4:5], 0x0732; GFX11-NEXT:    v_mov_b32_e32 v1, 0733; GFX11-NEXT:    s_waitcnt lgkmcnt(0)734; GFX11-NEXT:    global_store_b32 v1, v0, s[4:5]735; GFX11-NEXT:    v_or_b32_e32 v0, 8, v0736; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen737; GFX11-NEXT:    s_waitcnt vmcnt(0)738; GFX11-NEXT:    exp mrt0 v0, v0, v0, v0 done739; GFX11-NEXT:    s_endpgm740;741; GFX12-LABEL: s_buffer_load_index_across_bb:742; GFX12:       ; %bb.0: ; %main_body743; GFX12-NEXT:    s_getpc_b64 s[4:5]744; GFX12-NEXT:    s_sext_i32_i16 s5, s5745; GFX12-NEXT:    s_add_co_u32 s4, s4, gv@gotpcrel32@lo+8746; GFX12-NEXT:    s_add_co_ci_u32 s5, s5, gv@gotpcrel32@hi+16747; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 4, v0748; GFX12-NEXT:    s_load_b64 s[4:5], s[4:5], 0x0749; GFX12-NEXT:    v_mov_b32_e32 v1, 0750; GFX12-NEXT:    s_wait_kmcnt 0x0751; GFX12-NEXT:    global_store_b32 v1, v0, s[4:5]752; GFX12-NEXT:    v_or_b32_e32 v0, 8, v0753; GFX12-NEXT:    buffer_load_b32 v0, v0, s[0:3], null offen754; GFX12-NEXT:    s_wait_loadcnt 0x0755; GFX12-NEXT:    export mrt0 v0, v0, v0, v0 done756; GFX12-NEXT:    s_endpgm757main_body:758  %tmp = shl i32 %index, 4759  store i32 %tmp, ptr addrspace(1) @gv760  br label %bb1761 762bb1:                                              ; preds = %main_body763  %tmp1 = or i32 %tmp, 8764  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 %tmp1, i32 0)765  %bitcast = bitcast i32 %load to float766  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %bitcast, float poison, float poison, float poison, i1 true, i1 true)767  ret void768}769 770define amdgpu_ps void @s_buffer_load_index_across_bb_merged(<4 x i32> inreg %desc, i32 %index) {771; GFX678910-LABEL: s_buffer_load_index_across_bb_merged:772; GFX678910:       ; %bb.0: ; %main_body773; GFX678910-NEXT:    v_lshlrev_b32_e32 v0, 4, v0774; GFX678910-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[0:3], 0 offen offset:8775; GFX678910-NEXT:    s_waitcnt vmcnt(0)776; GFX678910-NEXT:    exp mrt0 v0, v1, v0, v0 done vm777; GFX678910-NEXT:    s_endpgm778;779; GFX11-LABEL: s_buffer_load_index_across_bb_merged:780; GFX11:       ; %bb.0: ; %main_body781; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 4, v0782; GFX11-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], 0 offen offset:8783; GFX11-NEXT:    s_waitcnt vmcnt(0)784; GFX11-NEXT:    exp mrt0 v0, v1, v0, v0 done785; GFX11-NEXT:    s_endpgm786;787; GFX12-LABEL: s_buffer_load_index_across_bb_merged:788; GFX12:       ; %bb.0: ; %main_body789; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 4, v0790; GFX12-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], null offen offset:8791; GFX12-NEXT:    s_wait_loadcnt 0x0792; GFX12-NEXT:    export mrt0 v0, v1, v0, v0 done793; GFX12-NEXT:    s_endpgm794main_body:795  %tmp = shl i32 %index, 4796  br label %bb1797 798bb1:                                              ; preds = %main_body799  %tmp1 = or i32 %tmp, 8800  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 %tmp1, i32 0)801  %tmp2 = or i32 %tmp1, 4802  %load2 = tail call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 %tmp2, i32 0)803  %bitcast = bitcast i32 %load to float804  %bitcast2 = bitcast i32 %load2 to float805  call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %bitcast, float %bitcast2, float poison, float poison, i1 true, i1 true)806  ret void807}808 809define amdgpu_ps i32 @s_buffer_load_imm_neg1(<4 x i32> inreg %desc) {810; GFX6-LABEL: s_buffer_load_imm_neg1:811; GFX6:       ; %bb.0:812; GFX6-NEXT:    s_mov_b32 s4, -1813; GFX6-NEXT:    s_nop 3814; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s4815; GFX6-NEXT:    s_waitcnt lgkmcnt(0)816; GFX6-NEXT:    ; return to shader part epilog817;818; GFX78-LABEL: s_buffer_load_imm_neg1:819; GFX78:       ; %bb.0:820; GFX78-NEXT:    s_mov_b32 s4, -1821; GFX78-NEXT:    s_buffer_load_dword s0, s[0:3], s4822; GFX78-NEXT:    s_waitcnt lgkmcnt(0)823; GFX78-NEXT:    ; return to shader part epilog824;825; GFX910-LABEL: s_buffer_load_imm_neg1:826; GFX910:       ; %bb.0:827; GFX910-NEXT:    s_mov_b32 s4, -1828; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x0829; GFX910-NEXT:    s_waitcnt lgkmcnt(0)830; GFX910-NEXT:    ; return to shader part epilog831;832; GFX11-LABEL: s_buffer_load_imm_neg1:833; GFX11:       ; %bb.0:834; GFX11-NEXT:    s_mov_b32 s4, -1835; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0836; GFX11-NEXT:    s_waitcnt lgkmcnt(0)837; GFX11-NEXT:    ; return to shader part epilog838;839; GFX12-LABEL: s_buffer_load_imm_neg1:840; GFX12:       ; %bb.0:841; GFX12-NEXT:    s_mov_b32 s4, -1842; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0843; GFX12-NEXT:    s_wait_kmcnt 0x0844; GFX12-NEXT:    ; return to shader part epilog845  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 -1, i32 0)846  ret i32 %load847}848 849define amdgpu_ps i32 @s_buffer_load_imm_neg4(<4 x i32> inreg %desc) {850; GFX6-LABEL: s_buffer_load_imm_neg4:851; GFX6:       ; %bb.0:852; GFX6-NEXT:    s_mov_b32 s4, -4853; GFX6-NEXT:    s_nop 3854; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s4855; GFX6-NEXT:    s_waitcnt lgkmcnt(0)856; GFX6-NEXT:    ; return to shader part epilog857;858; GFX7-LABEL: s_buffer_load_imm_neg4:859; GFX7:       ; %bb.0:860; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x3fffffff861; GFX7-NEXT:    s_waitcnt lgkmcnt(0)862; GFX7-NEXT:    ; return to shader part epilog863;864; GFX8-LABEL: s_buffer_load_imm_neg4:865; GFX8:       ; %bb.0:866; GFX8-NEXT:    s_mov_b32 s4, -4867; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s4868; GFX8-NEXT:    s_waitcnt lgkmcnt(0)869; GFX8-NEXT:    ; return to shader part epilog870;871; GFX910-LABEL: s_buffer_load_imm_neg4:872; GFX910:       ; %bb.0:873; GFX910-NEXT:    s_mov_b32 s4, -4874; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x0875; GFX910-NEXT:    s_waitcnt lgkmcnt(0)876; GFX910-NEXT:    ; return to shader part epilog877;878; GFX11-LABEL: s_buffer_load_imm_neg4:879; GFX11:       ; %bb.0:880; GFX11-NEXT:    s_mov_b32 s4, -4881; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0882; GFX11-NEXT:    s_waitcnt lgkmcnt(0)883; GFX11-NEXT:    ; return to shader part epilog884;885; GFX12-LABEL: s_buffer_load_imm_neg4:886; GFX12:       ; %bb.0:887; GFX12-NEXT:    s_mov_b32 s4, -4888; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0889; GFX12-NEXT:    s_wait_kmcnt 0x0890; GFX12-NEXT:    ; return to shader part epilog891  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 -4, i32 0)892  ret i32 %load893}894 895define amdgpu_ps i32 @s_buffer_load_imm_neg8(<4 x i32> inreg %desc) {896; GFX6-LABEL: s_buffer_load_imm_neg8:897; GFX6:       ; %bb.0:898; GFX6-NEXT:    s_mov_b32 s4, -8899; GFX6-NEXT:    s_nop 3900; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s4901; GFX6-NEXT:    s_waitcnt lgkmcnt(0)902; GFX6-NEXT:    ; return to shader part epilog903;904; GFX7-LABEL: s_buffer_load_imm_neg8:905; GFX7:       ; %bb.0:906; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x3ffffffe907; GFX7-NEXT:    s_waitcnt lgkmcnt(0)908; GFX7-NEXT:    ; return to shader part epilog909;910; GFX8-LABEL: s_buffer_load_imm_neg8:911; GFX8:       ; %bb.0:912; GFX8-NEXT:    s_mov_b32 s4, -8913; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s4914; GFX8-NEXT:    s_waitcnt lgkmcnt(0)915; GFX8-NEXT:    ; return to shader part epilog916;917; GFX910-LABEL: s_buffer_load_imm_neg8:918; GFX910:       ; %bb.0:919; GFX910-NEXT:    s_mov_b32 s4, -8920; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x0921; GFX910-NEXT:    s_waitcnt lgkmcnt(0)922; GFX910-NEXT:    ; return to shader part epilog923;924; GFX11-LABEL: s_buffer_load_imm_neg8:925; GFX11:       ; %bb.0:926; GFX11-NEXT:    s_mov_b32 s4, -8927; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0928; GFX11-NEXT:    s_waitcnt lgkmcnt(0)929; GFX11-NEXT:    ; return to shader part epilog930;931; GFX12-LABEL: s_buffer_load_imm_neg8:932; GFX12:       ; %bb.0:933; GFX12-NEXT:    s_mov_b32 s4, -8934; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0935; GFX12-NEXT:    s_wait_kmcnt 0x0936; GFX12-NEXT:    ; return to shader part epilog937  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 -8, i32 0)938  ret i32 %load939}940 941define amdgpu_ps i32 @s_buffer_load_imm_bit31(<4 x i32> inreg %desc) {942; GFX6-LABEL: s_buffer_load_imm_bit31:943; GFX6:       ; %bb.0:944; GFX6-NEXT:    s_brev_b32 s4, 1945; GFX6-NEXT:    s_nop 3946; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s4947; GFX6-NEXT:    s_waitcnt lgkmcnt(0)948; GFX6-NEXT:    ; return to shader part epilog949;950; GFX7-LABEL: s_buffer_load_imm_bit31:951; GFX7:       ; %bb.0:952; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x20000000953; GFX7-NEXT:    s_waitcnt lgkmcnt(0)954; GFX7-NEXT:    ; return to shader part epilog955;956; GFX8-LABEL: s_buffer_load_imm_bit31:957; GFX8:       ; %bb.0:958; GFX8-NEXT:    s_brev_b32 s4, 1959; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s4960; GFX8-NEXT:    s_waitcnt lgkmcnt(0)961; GFX8-NEXT:    ; return to shader part epilog962;963; GFX910-LABEL: s_buffer_load_imm_bit31:964; GFX910:       ; %bb.0:965; GFX910-NEXT:    s_brev_b32 s4, 1966; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x0967; GFX910-NEXT:    s_waitcnt lgkmcnt(0)968; GFX910-NEXT:    ; return to shader part epilog969;970; GFX11-LABEL: s_buffer_load_imm_bit31:971; GFX11:       ; %bb.0:972; GFX11-NEXT:    s_brev_b32 s4, 1973; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0974; GFX11-NEXT:    s_waitcnt lgkmcnt(0)975; GFX11-NEXT:    ; return to shader part epilog976;977; GFX12-LABEL: s_buffer_load_imm_bit31:978; GFX12:       ; %bb.0:979; GFX12-NEXT:    s_brev_b32 s4, 1980; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x0981; GFX12-NEXT:    s_wait_kmcnt 0x0982; GFX12-NEXT:    ; return to shader part epilog983  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 -2147483648, i32 0)984  ret i32 %load985}986 987define amdgpu_ps i32 @s_buffer_load_imm_bit30(<4 x i32> inreg %desc) {988; GFX6-LABEL: s_buffer_load_imm_bit30:989; GFX6:       ; %bb.0:990; GFX6-NEXT:    s_mov_b32 s4, 2.0991; GFX6-NEXT:    s_nop 3992; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s4993; GFX6-NEXT:    s_waitcnt lgkmcnt(0)994; GFX6-NEXT:    ; return to shader part epilog995;996; GFX7-LABEL: s_buffer_load_imm_bit30:997; GFX7:       ; %bb.0:998; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x10000000999; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1000; GFX7-NEXT:    ; return to shader part epilog1001;1002; GFX8-LABEL: s_buffer_load_imm_bit30:1003; GFX8:       ; %bb.0:1004; GFX8-NEXT:    s_mov_b32 s4, 2.01005; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s41006; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1007; GFX8-NEXT:    ; return to shader part epilog1008;1009; GFX910-LABEL: s_buffer_load_imm_bit30:1010; GFX910:       ; %bb.0:1011; GFX910-NEXT:    s_mov_b32 s4, 2.01012; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x01013; GFX910-NEXT:    s_waitcnt lgkmcnt(0)1014; GFX910-NEXT:    ; return to shader part epilog1015;1016; GFX11-LABEL: s_buffer_load_imm_bit30:1017; GFX11:       ; %bb.0:1018; GFX11-NEXT:    s_mov_b32 s4, 2.01019; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01020; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1021; GFX11-NEXT:    ; return to shader part epilog1022;1023; GFX12-LABEL: s_buffer_load_imm_bit30:1024; GFX12:       ; %bb.0:1025; GFX12-NEXT:    s_mov_b32 s4, 2.01026; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01027; GFX12-NEXT:    s_wait_kmcnt 0x01028; GFX12-NEXT:    ; return to shader part epilog1029  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1073741824, i32 0)1030  ret i32 %load1031}1032 1033define amdgpu_ps i32 @s_buffer_load_imm_bit29(<4 x i32> inreg %desc) {1034; GFX6-LABEL: s_buffer_load_imm_bit29:1035; GFX6:       ; %bb.0:1036; GFX6-NEXT:    s_brev_b32 s4, 41037; GFX6-NEXT:    s_nop 31038; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41039; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1040; GFX6-NEXT:    ; return to shader part epilog1041;1042; GFX7-LABEL: s_buffer_load_imm_bit29:1043; GFX7:       ; %bb.0:1044; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x80000001045; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1046; GFX7-NEXT:    ; return to shader part epilog1047;1048; GFX8-LABEL: s_buffer_load_imm_bit29:1049; GFX8:       ; %bb.0:1050; GFX8-NEXT:    s_brev_b32 s4, 41051; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s41052; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1053; GFX8-NEXT:    ; return to shader part epilog1054;1055; GFX910-LABEL: s_buffer_load_imm_bit29:1056; GFX910:       ; %bb.0:1057; GFX910-NEXT:    s_brev_b32 s4, 41058; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x01059; GFX910-NEXT:    s_waitcnt lgkmcnt(0)1060; GFX910-NEXT:    ; return to shader part epilog1061;1062; GFX11-LABEL: s_buffer_load_imm_bit29:1063; GFX11:       ; %bb.0:1064; GFX11-NEXT:    s_brev_b32 s4, 41065; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01066; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1067; GFX11-NEXT:    ; return to shader part epilog1068;1069; GFX12-LABEL: s_buffer_load_imm_bit29:1070; GFX12:       ; %bb.0:1071; GFX12-NEXT:    s_brev_b32 s4, 41072; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01073; GFX12-NEXT:    s_wait_kmcnt 0x01074; GFX12-NEXT:    ; return to shader part epilog1075  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 536870912, i32 0)1076  ret i32 %load1077}1078 1079define amdgpu_ps i32 @s_buffer_load_imm_bit21(<4 x i32> inreg %desc) {1080; GFX6-LABEL: s_buffer_load_imm_bit21:1081; GFX6:       ; %bb.0:1082; GFX6-NEXT:    s_mov_b32 s4, 0x2000001083; GFX6-NEXT:    s_nop 31084; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41085; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1086; GFX6-NEXT:    ; return to shader part epilog1087;1088; GFX7-LABEL: s_buffer_load_imm_bit21:1089; GFX7:       ; %bb.0:1090; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x800001091; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1092; GFX7-NEXT:    ; return to shader part epilog1093;1094; GFX8-LABEL: s_buffer_load_imm_bit21:1095; GFX8:       ; %bb.0:1096; GFX8-NEXT:    s_mov_b32 s4, 0x2000001097; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s41098; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1099; GFX8-NEXT:    ; return to shader part epilog1100;1101; GFX910-LABEL: s_buffer_load_imm_bit21:1102; GFX910:       ; %bb.0:1103; GFX910-NEXT:    s_mov_b32 s4, 0x2000001104; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x01105; GFX910-NEXT:    s_waitcnt lgkmcnt(0)1106; GFX910-NEXT:    ; return to shader part epilog1107;1108; GFX11-LABEL: s_buffer_load_imm_bit21:1109; GFX11:       ; %bb.0:1110; GFX11-NEXT:    s_mov_b32 s4, 0x2000001111; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01112; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1113; GFX11-NEXT:    ; return to shader part epilog1114;1115; GFX12-LABEL: s_buffer_load_imm_bit21:1116; GFX12:       ; %bb.0:1117; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x2000001118; GFX12-NEXT:    s_wait_kmcnt 0x01119; GFX12-NEXT:    ; return to shader part epilog1120  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 2097152, i32 0)1121  ret i32 %load1122}1123 1124define amdgpu_ps i32 @s_buffer_load_imm_bit20(<4 x i32> inreg %desc) {1125; GFX6-LABEL: s_buffer_load_imm_bit20:1126; GFX6:       ; %bb.0:1127; GFX6-NEXT:    s_mov_b32 s4, 0x1000001128; GFX6-NEXT:    s_nop 31129; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41130; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1131; GFX6-NEXT:    ; return to shader part epilog1132;1133; GFX7-LABEL: s_buffer_load_imm_bit20:1134; GFX7:       ; %bb.0:1135; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x400001136; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1137; GFX7-NEXT:    ; return to shader part epilog1138;1139; GFX8-LABEL: s_buffer_load_imm_bit20:1140; GFX8:       ; %bb.0:1141; GFX8-NEXT:    s_mov_b32 s4, 0x1000001142; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s41143; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1144; GFX8-NEXT:    ; return to shader part epilog1145;1146; GFX910-LABEL: s_buffer_load_imm_bit20:1147; GFX910:       ; %bb.0:1148; GFX910-NEXT:    s_mov_b32 s4, 0x1000001149; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x01150; GFX910-NEXT:    s_waitcnt lgkmcnt(0)1151; GFX910-NEXT:    ; return to shader part epilog1152;1153; GFX11-LABEL: s_buffer_load_imm_bit20:1154; GFX11:       ; %bb.0:1155; GFX11-NEXT:    s_mov_b32 s4, 0x1000001156; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01157; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1158; GFX11-NEXT:    ; return to shader part epilog1159;1160; GFX12-LABEL: s_buffer_load_imm_bit20:1161; GFX12:       ; %bb.0:1162; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x1000001163; GFX12-NEXT:    s_wait_kmcnt 0x01164; GFX12-NEXT:    ; return to shader part epilog1165  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1048576, i32 0)1166  ret i32 %load1167}1168 1169define amdgpu_ps i32 @s_buffer_load_imm_neg_bit20(<4 x i32> inreg %desc) {1170; GFX6-LABEL: s_buffer_load_imm_neg_bit20:1171; GFX6:       ; %bb.0:1172; GFX6-NEXT:    s_mov_b32 s4, 0xfff000001173; GFX6-NEXT:    s_nop 31174; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41175; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1176; GFX6-NEXT:    ; return to shader part epilog1177;1178; GFX7-LABEL: s_buffer_load_imm_neg_bit20:1179; GFX7:       ; %bb.0:1180; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x3ffc00001181; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1182; GFX7-NEXT:    ; return to shader part epilog1183;1184; GFX8-LABEL: s_buffer_load_imm_neg_bit20:1185; GFX8:       ; %bb.0:1186; GFX8-NEXT:    s_mov_b32 s4, 0xfff000001187; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s41188; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1189; GFX8-NEXT:    ; return to shader part epilog1190;1191; GFX910-LABEL: s_buffer_load_imm_neg_bit20:1192; GFX910:       ; %bb.0:1193; GFX910-NEXT:    s_mov_b32 s4, 0xfff000001194; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x01195; GFX910-NEXT:    s_waitcnt lgkmcnt(0)1196; GFX910-NEXT:    ; return to shader part epilog1197;1198; GFX11-LABEL: s_buffer_load_imm_neg_bit20:1199; GFX11:       ; %bb.0:1200; GFX11-NEXT:    s_mov_b32 s4, 0xfff000001201; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01202; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1203; GFX11-NEXT:    ; return to shader part epilog1204;1205; GFX12-LABEL: s_buffer_load_imm_neg_bit20:1206; GFX12:       ; %bb.0:1207; GFX12-NEXT:    s_mov_b32 s4, 0xfff000001208; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01209; GFX12-NEXT:    s_wait_kmcnt 0x01210; GFX12-NEXT:    ; return to shader part epilog1211  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32  -1048576, i32 0)1212  ret i32 %load1213}1214 1215define amdgpu_ps i32 @s_buffer_load_imm_bit19(<4 x i32> inreg %desc) {1216; GFX6-LABEL: s_buffer_load_imm_bit19:1217; GFX6:       ; %bb.0:1218; GFX6-NEXT:    s_mov_b32 s4, 0x800001219; GFX6-NEXT:    s_nop 31220; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41221; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1222; GFX6-NEXT:    ; return to shader part epilog1223;1224; GFX7-LABEL: s_buffer_load_imm_bit19:1225; GFX7:       ; %bb.0:1226; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x200001227; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1228; GFX7-NEXT:    ; return to shader part epilog1229;1230; GFX8910-LABEL: s_buffer_load_imm_bit19:1231; GFX8910:       ; %bb.0:1232; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x800001233; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1234; GFX8910-NEXT:    ; return to shader part epilog1235;1236; GFX11-LABEL: s_buffer_load_imm_bit19:1237; GFX11:       ; %bb.0:1238; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x800001239; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1240; GFX11-NEXT:    ; return to shader part epilog1241;1242; GFX12-LABEL: s_buffer_load_imm_bit19:1243; GFX12:       ; %bb.0:1244; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x800001245; GFX12-NEXT:    s_wait_kmcnt 0x01246; GFX12-NEXT:    ; return to shader part epilog1247  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 524288, i32 0)1248  ret i32 %load1249}1250 1251define amdgpu_ps i32 @s_buffer_load_imm_neg_bit19(<4 x i32> inreg %desc) {1252; GFX6-LABEL: s_buffer_load_imm_neg_bit19:1253; GFX6:       ; %bb.0:1254; GFX6-NEXT:    s_mov_b32 s4, 0xfff800001255; GFX6-NEXT:    s_nop 31256; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41257; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1258; GFX6-NEXT:    ; return to shader part epilog1259;1260; GFX7-LABEL: s_buffer_load_imm_neg_bit19:1261; GFX7:       ; %bb.0:1262; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x3ffe00001263; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1264; GFX7-NEXT:    ; return to shader part epilog1265;1266; GFX8-LABEL: s_buffer_load_imm_neg_bit19:1267; GFX8:       ; %bb.0:1268; GFX8-NEXT:    s_mov_b32 s4, 0xfff800001269; GFX8-NEXT:    s_buffer_load_dword s0, s[0:3], s41270; GFX8-NEXT:    s_waitcnt lgkmcnt(0)1271; GFX8-NEXT:    ; return to shader part epilog1272;1273; GFX910-LABEL: s_buffer_load_imm_neg_bit19:1274; GFX910:       ; %bb.0:1275; GFX910-NEXT:    s_mov_b32 s4, 0xfff800001276; GFX910-NEXT:    s_buffer_load_dword s0, s[0:3], s4 offset:0x01277; GFX910-NEXT:    s_waitcnt lgkmcnt(0)1278; GFX910-NEXT:    ; return to shader part epilog1279;1280; GFX11-LABEL: s_buffer_load_imm_neg_bit19:1281; GFX11:       ; %bb.0:1282; GFX11-NEXT:    s_mov_b32 s4, 0xfff800001283; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01284; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1285; GFX11-NEXT:    ; return to shader part epilog1286;1287; GFX12-LABEL: s_buffer_load_imm_neg_bit19:1288; GFX12:       ; %bb.0:1289; GFX12-NEXT:    s_mov_b32 s4, 0xfff800001290; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], s4 offset:0x01291; GFX12-NEXT:    s_wait_kmcnt 0x01292; GFX12-NEXT:    ; return to shader part epilog1293  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 -524288, i32 0)1294  ret i32 %load1295}1296 1297define amdgpu_ps i32 @s_buffer_load_imm_255(<4 x i32> inreg %desc) {1298; GFX6-LABEL: s_buffer_load_imm_255:1299; GFX6:       ; %bb.0:1300; GFX6-NEXT:    s_movk_i32 s4, 0xff1301; GFX6-NEXT:    s_nop 31302; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41303; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1304; GFX6-NEXT:    ; return to shader part epilog1305;1306; GFX7-LABEL: s_buffer_load_imm_255:1307; GFX7:       ; %bb.0:1308; GFX7-NEXT:    s_movk_i32 s4, 0xff1309; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], s41310; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1311; GFX7-NEXT:    ; return to shader part epilog1312;1313; GFX8910-LABEL: s_buffer_load_imm_255:1314; GFX8910:       ; %bb.0:1315; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0xff1316; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1317; GFX8910-NEXT:    ; return to shader part epilog1318;1319; GFX11-LABEL: s_buffer_load_imm_255:1320; GFX11:       ; %bb.0:1321; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0xff1322; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1323; GFX11-NEXT:    ; return to shader part epilog1324;1325; GFX12-LABEL: s_buffer_load_imm_255:1326; GFX12:       ; %bb.0:1327; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0xff1328; GFX12-NEXT:    s_wait_kmcnt 0x01329; GFX12-NEXT:    ; return to shader part epilog1330  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 255, i32 0)1331  ret i32 %load1332}1333 1334define amdgpu_ps i32 @s_buffer_load_imm_256(<4 x i32> inreg %desc) {1335; GFX67-LABEL: s_buffer_load_imm_256:1336; GFX67:       ; %bb.0:1337; GFX67-NEXT:    s_buffer_load_dword s0, s[0:3], 0x401338; GFX67-NEXT:    s_waitcnt lgkmcnt(0)1339; GFX67-NEXT:    ; return to shader part epilog1340;1341; GFX8910-LABEL: s_buffer_load_imm_256:1342; GFX8910:       ; %bb.0:1343; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x1001344; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1345; GFX8910-NEXT:    ; return to shader part epilog1346;1347; GFX11-LABEL: s_buffer_load_imm_256:1348; GFX11:       ; %bb.0:1349; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x1001350; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1351; GFX11-NEXT:    ; return to shader part epilog1352;1353; GFX12-LABEL: s_buffer_load_imm_256:1354; GFX12:       ; %bb.0:1355; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x1001356; GFX12-NEXT:    s_wait_kmcnt 0x01357; GFX12-NEXT:    ; return to shader part epilog1358  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 256, i32 0)1359  ret i32 %load1360}1361 1362define amdgpu_ps i32 @s_buffer_load_imm_1016(<4 x i32> inreg %desc) {1363; GFX67-LABEL: s_buffer_load_imm_1016:1364; GFX67:       ; %bb.0:1365; GFX67-NEXT:    s_buffer_load_dword s0, s[0:3], 0xfe1366; GFX67-NEXT:    s_waitcnt lgkmcnt(0)1367; GFX67-NEXT:    ; return to shader part epilog1368;1369; GFX8910-LABEL: s_buffer_load_imm_1016:1370; GFX8910:       ; %bb.0:1371; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x3f81372; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1373; GFX8910-NEXT:    ; return to shader part epilog1374;1375; GFX11-LABEL: s_buffer_load_imm_1016:1376; GFX11:       ; %bb.0:1377; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x3f81378; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1379; GFX11-NEXT:    ; return to shader part epilog1380;1381; GFX12-LABEL: s_buffer_load_imm_1016:1382; GFX12:       ; %bb.0:1383; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x3f81384; GFX12-NEXT:    s_wait_kmcnt 0x01385; GFX12-NEXT:    ; return to shader part epilog1386  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1016, i32 0)1387  ret i32 %load1388}1389 1390define amdgpu_ps i32 @s_buffer_load_imm_1020(<4 x i32> inreg %desc) {1391; GFX67-LABEL: s_buffer_load_imm_1020:1392; GFX67:       ; %bb.0:1393; GFX67-NEXT:    s_buffer_load_dword s0, s[0:3], 0xff1394; GFX67-NEXT:    s_waitcnt lgkmcnt(0)1395; GFX67-NEXT:    ; return to shader part epilog1396;1397; GFX8910-LABEL: s_buffer_load_imm_1020:1398; GFX8910:       ; %bb.0:1399; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x3fc1400; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1401; GFX8910-NEXT:    ; return to shader part epilog1402;1403; GFX11-LABEL: s_buffer_load_imm_1020:1404; GFX11:       ; %bb.0:1405; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x3fc1406; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1407; GFX11-NEXT:    ; return to shader part epilog1408;1409; GFX12-LABEL: s_buffer_load_imm_1020:1410; GFX12:       ; %bb.0:1411; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x3fc1412; GFX12-NEXT:    s_wait_kmcnt 0x01413; GFX12-NEXT:    ; return to shader part epilog1414  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1020, i32 0)1415  ret i32 %load1416}1417 1418define amdgpu_ps i32 @s_buffer_load_imm_1021(<4 x i32> inreg %desc) {1419; GFX6-LABEL: s_buffer_load_imm_1021:1420; GFX6:       ; %bb.0:1421; GFX6-NEXT:    s_movk_i32 s4, 0x3fd1422; GFX6-NEXT:    s_nop 31423; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41424; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1425; GFX6-NEXT:    ; return to shader part epilog1426;1427; GFX7-LABEL: s_buffer_load_imm_1021:1428; GFX7:       ; %bb.0:1429; GFX7-NEXT:    s_movk_i32 s4, 0x3fd1430; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], s41431; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1432; GFX7-NEXT:    ; return to shader part epilog1433;1434; GFX8910-LABEL: s_buffer_load_imm_1021:1435; GFX8910:       ; %bb.0:1436; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x3fd1437; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1438; GFX8910-NEXT:    ; return to shader part epilog1439;1440; GFX11-LABEL: s_buffer_load_imm_1021:1441; GFX11:       ; %bb.0:1442; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x3fd1443; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1444; GFX11-NEXT:    ; return to shader part epilog1445;1446; GFX12-LABEL: s_buffer_load_imm_1021:1447; GFX12:       ; %bb.0:1448; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x3fd1449; GFX12-NEXT:    s_wait_kmcnt 0x01450; GFX12-NEXT:    ; return to shader part epilog1451  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1021, i32 0)1452  ret i32 %load1453}1454 1455define amdgpu_ps i32 @s_buffer_load_imm_1024(<4 x i32> inreg %desc) {1456; GFX6-LABEL: s_buffer_load_imm_1024:1457; GFX6:       ; %bb.0:1458; GFX6-NEXT:    s_movk_i32 s4, 0x4001459; GFX6-NEXT:    s_nop 31460; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41461; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1462; GFX6-NEXT:    ; return to shader part epilog1463;1464; GFX7-LABEL: s_buffer_load_imm_1024:1465; GFX7:       ; %bb.0:1466; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x1001467; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1468; GFX7-NEXT:    ; return to shader part epilog1469;1470; GFX8910-LABEL: s_buffer_load_imm_1024:1471; GFX8910:       ; %bb.0:1472; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x4001473; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1474; GFX8910-NEXT:    ; return to shader part epilog1475;1476; GFX11-LABEL: s_buffer_load_imm_1024:1477; GFX11:       ; %bb.0:1478; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x4001479; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1480; GFX11-NEXT:    ; return to shader part epilog1481;1482; GFX12-LABEL: s_buffer_load_imm_1024:1483; GFX12:       ; %bb.0:1484; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x4001485; GFX12-NEXT:    s_wait_kmcnt 0x01486; GFX12-NEXT:    ; return to shader part epilog1487  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1024, i32 0)1488  ret i32 %load1489}1490 1491define amdgpu_ps i32 @s_buffer_load_imm_1025(<4 x i32> inreg %desc) {1492; GFX6-LABEL: s_buffer_load_imm_1025:1493; GFX6:       ; %bb.0:1494; GFX6-NEXT:    s_movk_i32 s4, 0x4011495; GFX6-NEXT:    s_nop 31496; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41497; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1498; GFX6-NEXT:    ; return to shader part epilog1499;1500; GFX7-LABEL: s_buffer_load_imm_1025:1501; GFX7:       ; %bb.0:1502; GFX7-NEXT:    s_movk_i32 s4, 0x4011503; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], s41504; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1505; GFX7-NEXT:    ; return to shader part epilog1506;1507; GFX8910-LABEL: s_buffer_load_imm_1025:1508; GFX8910:       ; %bb.0:1509; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x4011510; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1511; GFX8910-NEXT:    ; return to shader part epilog1512;1513; GFX11-LABEL: s_buffer_load_imm_1025:1514; GFX11:       ; %bb.0:1515; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x4011516; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1517; GFX11-NEXT:    ; return to shader part epilog1518;1519; GFX12-LABEL: s_buffer_load_imm_1025:1520; GFX12:       ; %bb.0:1521; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x4011522; GFX12-NEXT:    s_wait_kmcnt 0x01523; GFX12-NEXT:    ; return to shader part epilog1524  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1025, i32 0)1525  ret i32 %load1526}1527 1528define amdgpu_ps i32 @s_buffer_load_imm_1028(<4 x i32> inreg %desc) {1529; GFX6-LABEL: s_buffer_load_imm_1028:1530; GFX6:       ; %bb.0:1531; GFX6-NEXT:    s_movk_i32 s4, 0x4001532; GFX6-NEXT:    s_nop 31533; GFX6-NEXT:    s_buffer_load_dword s0, s[0:3], s41534; GFX6-NEXT:    s_waitcnt lgkmcnt(0)1535; GFX6-NEXT:    ; return to shader part epilog1536;1537; GFX7-LABEL: s_buffer_load_imm_1028:1538; GFX7:       ; %bb.0:1539; GFX7-NEXT:    s_buffer_load_dword s0, s[0:3], 0x1001540; GFX7-NEXT:    s_waitcnt lgkmcnt(0)1541; GFX7-NEXT:    ; return to shader part epilog1542;1543; GFX8910-LABEL: s_buffer_load_imm_1028:1544; GFX8910:       ; %bb.0:1545; GFX8910-NEXT:    s_buffer_load_dword s0, s[0:3], 0x4001546; GFX8910-NEXT:    s_waitcnt lgkmcnt(0)1547; GFX8910-NEXT:    ; return to shader part epilog1548;1549; GFX11-LABEL: s_buffer_load_imm_1028:1550; GFX11:       ; %bb.0:1551; GFX11-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x4001552; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1553; GFX11-NEXT:    ; return to shader part epilog1554;1555; GFX12-LABEL: s_buffer_load_imm_1028:1556; GFX12:       ; %bb.0:1557; GFX12-NEXT:    s_buffer_load_b32 s0, s[0:3], 0x4001558; GFX12-NEXT:    s_wait_kmcnt 0x01559; GFX12-NEXT:    ; return to shader part epilog1560  %load = call i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32> %desc, i32 1024, i32 0)1561  ret i32 %load1562}1563 1564declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1)1565declare i32 @llvm.amdgcn.s.buffer.load.i32(<4 x i32>, i32, i32)1566declare <2 x i32> @llvm.amdgcn.s.buffer.load.v2i32(<4 x i32>, i32, i32)1567declare <3 x i32> @llvm.amdgcn.s.buffer.load.v3i32(<4 x i32>, i32, i32)1568declare <4 x i32> @llvm.amdgcn.s.buffer.load.v4i32(<4 x i32>, i32, i32)1569 1570;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1571; GFX6789: {{.*}}1572; GFX789: {{.*}}1573; GFX89: {{.*}}1574