1326 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx700 < %s | FileCheck --check-prefixes=GFX7 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1010 < %s | FileCheck --check-prefixes=GFX10-WGP %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1010 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX10-CU %s5; RUN: llc -mtriple=amdgcn-amd-amdpal -O0 -mcpu=gfx700 -amdgcn-skip-cache-invalidations < %s | FileCheck --check-prefixes=SKIP-CACHE-INV %s6; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX90A-NOTTGSPLIT %s7; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx90a -mattr=+tgsplit < %s | FileCheck -check-prefixes=GFX90A-TGSPLIT %s8; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX942-NOTTGSPLIT %s9; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx942 -mattr=+tgsplit < %s | FileCheck -check-prefixes=GFX942-TGSPLIT %s10; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GFX11-WGP %s11; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1100 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX11-CU %s12; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GFX12-WGP %s13; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1200 -mattr=+cumode < %s | FileCheck --check-prefixes=GFX12-CU %s14; RUN: llc -mtriple=amdgcn-amd-amdhsa -O0 -mcpu=gfx1250 < %s | FileCheck --check-prefixes=GFX1250 %s15 16define amdgpu_kernel void @flat_nontemporal_load_0(17; GFX7-LABEL: flat_nontemporal_load_0:18; GFX7: ; %bb.0: ; %entry19; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s1320; GFX7-NEXT: s_add_i32 s12, s12, s1721; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 822; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x023; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x224; GFX7-NEXT: s_waitcnt lgkmcnt(0)25; GFX7-NEXT: v_mov_b32_e32 v0, s626; GFX7-NEXT: v_mov_b32_e32 v1, s727; GFX7-NEXT: flat_load_dword v2, v[0:1] glc slc28; GFX7-NEXT: v_mov_b32_e32 v0, s429; GFX7-NEXT: v_mov_b32_e32 v1, s530; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)31; GFX7-NEXT: flat_store_dword v[0:1], v232; GFX7-NEXT: s_endpgm33;34; GFX10-WGP-LABEL: flat_nontemporal_load_0:35; GFX10-WGP: ; %bb.0: ; %entry36; GFX10-WGP-NEXT: s_add_u32 s12, s12, s1737; GFX10-WGP-NEXT: s_addc_u32 s13, s13, 038; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s1239; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s1340; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x041; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x842; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)43; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s644; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s745; GFX10-WGP-NEXT: flat_load_dword v2, v[0:1] slc46; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s447; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s548; GFX10-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)49; GFX10-WGP-NEXT: flat_store_dword v[0:1], v250; GFX10-WGP-NEXT: s_endpgm51;52; GFX10-CU-LABEL: flat_nontemporal_load_0:53; GFX10-CU: ; %bb.0: ; %entry54; GFX10-CU-NEXT: s_add_u32 s12, s12, s1755; GFX10-CU-NEXT: s_addc_u32 s13, s13, 056; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s1257; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s1358; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x059; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x860; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)61; GFX10-CU-NEXT: v_mov_b32_e32 v0, s662; GFX10-CU-NEXT: v_mov_b32_e32 v1, s763; GFX10-CU-NEXT: flat_load_dword v2, v[0:1] slc64; GFX10-CU-NEXT: v_mov_b32_e32 v0, s465; GFX10-CU-NEXT: v_mov_b32_e32 v1, s566; GFX10-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)67; GFX10-CU-NEXT: flat_store_dword v[0:1], v268; GFX10-CU-NEXT: s_endpgm69;70; SKIP-CACHE-INV-LABEL: flat_nontemporal_load_0:71; SKIP-CACHE-INV: ; %bb.0: ; %entry72; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x073; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x274; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)75; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s276; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s377; SKIP-CACHE-INV-NEXT: flat_load_dword v2, v[0:1] glc slc78; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s079; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s180; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)81; SKIP-CACHE-INV-NEXT: flat_store_dword v[0:1], v282; SKIP-CACHE-INV-NEXT: s_endpgm83;84; GFX90A-NOTTGSPLIT-LABEL: flat_nontemporal_load_0:85; GFX90A-NOTTGSPLIT: ; %bb.0: ; %entry86; GFX90A-NOTTGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s1787; GFX90A-NOTTGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 088; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x089; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x890; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)91; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[6:7], s[6:7] op_sel:[0,1]92; GFX90A-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1] glc slc93; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]94; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)95; GFX90A-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v296; GFX90A-NOTTGSPLIT-NEXT: s_endpgm97;98; GFX90A-TGSPLIT-LABEL: flat_nontemporal_load_0:99; GFX90A-TGSPLIT: ; %bb.0: ; %entry100; GFX90A-TGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s17101; GFX90A-TGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 0102; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0103; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8104; GFX90A-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)105; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[6:7], s[6:7] op_sel:[0,1]106; GFX90A-TGSPLIT-NEXT: flat_load_dword v2, v[0:1] glc slc107; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]108; GFX90A-TGSPLIT-NEXT: s_waitcnt vmcnt(0)109; GFX90A-TGSPLIT-NEXT: flat_store_dword v[0:1], v2110; GFX90A-TGSPLIT-NEXT: s_endpgm111;112; GFX942-NOTTGSPLIT-LABEL: flat_nontemporal_load_0:113; GFX942-NOTTGSPLIT: ; %bb.0: ; %entry114; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0115; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8116; GFX942-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)117; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[2:3]118; GFX942-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1] nt119; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]120; GFX942-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)121; GFX942-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v2122; GFX942-NOTTGSPLIT-NEXT: s_endpgm123;124; GFX942-TGSPLIT-LABEL: flat_nontemporal_load_0:125; GFX942-TGSPLIT: ; %bb.0: ; %entry126; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0127; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8128; GFX942-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)129; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[2:3]130; GFX942-TGSPLIT-NEXT: flat_load_dword v2, v[0:1] nt131; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]132; GFX942-TGSPLIT-NEXT: s_waitcnt vmcnt(0)133; GFX942-TGSPLIT-NEXT: flat_store_dword v[0:1], v2134; GFX942-TGSPLIT-NEXT: s_endpgm135;136; GFX11-WGP-LABEL: flat_nontemporal_load_0:137; GFX11-WGP: ; %bb.0: ; %entry138; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0139; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8140; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)141; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s2142; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s3143; GFX11-WGP-NEXT: flat_load_b32 v2, v[0:1] slc dlc144; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s0145; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s1146; GFX11-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)147; GFX11-WGP-NEXT: flat_store_b32 v[0:1], v2148; GFX11-WGP-NEXT: s_endpgm149;150; GFX11-CU-LABEL: flat_nontemporal_load_0:151; GFX11-CU: ; %bb.0: ; %entry152; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0153; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8154; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)155; GFX11-CU-NEXT: v_mov_b32_e32 v0, s2156; GFX11-CU-NEXT: v_mov_b32_e32 v1, s3157; GFX11-CU-NEXT: flat_load_b32 v2, v[0:1] slc dlc158; GFX11-CU-NEXT: v_mov_b32_e32 v0, s0159; GFX11-CU-NEXT: v_mov_b32_e32 v1, s1160; GFX11-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)161; GFX11-CU-NEXT: flat_store_b32 v[0:1], v2162; GFX11-CU-NEXT: s_endpgm163;164; GFX12-WGP-LABEL: flat_nontemporal_load_0:165; GFX12-WGP: ; %bb.0: ; %entry166; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0167; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8168; GFX12-WGP-NEXT: s_wait_kmcnt 0x0169; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s2170; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s3171; GFX12-WGP-NEXT: flat_load_b32 v2, v[0:1] th:TH_LOAD_NT172; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s0173; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s1174; GFX12-WGP-NEXT: s_wait_loadcnt_dscnt 0x0175; GFX12-WGP-NEXT: flat_store_b32 v[0:1], v2176; GFX12-WGP-NEXT: s_endpgm177;178; GFX12-CU-LABEL: flat_nontemporal_load_0:179; GFX12-CU: ; %bb.0: ; %entry180; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0181; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8182; GFX12-CU-NEXT: s_wait_kmcnt 0x0183; GFX12-CU-NEXT: v_mov_b32_e32 v0, s2184; GFX12-CU-NEXT: v_mov_b32_e32 v1, s3185; GFX12-CU-NEXT: flat_load_b32 v2, v[0:1] th:TH_LOAD_NT186; GFX12-CU-NEXT: v_mov_b32_e32 v0, s0187; GFX12-CU-NEXT: v_mov_b32_e32 v1, s1188; GFX12-CU-NEXT: s_wait_loadcnt_dscnt 0x0189; GFX12-CU-NEXT: flat_store_b32 v[0:1], v2190; GFX12-CU-NEXT: s_endpgm191;192; GFX1250-LABEL: flat_nontemporal_load_0:193; GFX1250: ; %bb.0: ; %entry194; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1195; GFX1250-NEXT: v_mov_b32_e32 v0, 0196; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0197; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8198; GFX1250-NEXT: s_wait_kmcnt 0x0199; GFX1250-NEXT: flat_load_b32 v1, v0, s[2:3] th:TH_LOAD_NT200; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0201; GFX1250-NEXT: flat_store_b32 v0, v1, s[0:1]202; GFX1250-NEXT: s_endpgm203 ptr %in, ptr %out) {204entry:205 %val = load i32, ptr %in, align 4, !nontemporal !0206 store i32 %val, ptr %out207 ret void208}209 210define amdgpu_kernel void @flat_nontemporal_load_1(211; GFX7-LABEL: flat_nontemporal_load_1:212; GFX7: ; %bb.0: ; %entry213; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13214; GFX7-NEXT: s_add_i32 s12, s12, s17215; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8216; GFX7-NEXT: s_mov_b64 s[4:5], s[8:9]217; GFX7-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x0218; GFX7-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x2219; GFX7-NEXT: s_mov_b32 s6, 2220; GFX7-NEXT: v_lshlrev_b32_e64 v1, s6, v0221; GFX7-NEXT: v_mov_b32_e32 v0, 0222; GFX7-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec223; GFX7-NEXT: v_mov_b32_e32 v2, v0224; GFX7-NEXT: s_waitcnt lgkmcnt(0)225; GFX7-NEXT: s_mov_b32 s6, s8226; GFX7-NEXT: v_mov_b32_e32 v0, v1227; GFX7-NEXT: s_mov_b32 s8, s9228; GFX7-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec229; GFX7-NEXT: v_add_i32_e64 v0, s[6:7], s6, v0230; GFX7-NEXT: v_mov_b32_e32 v1, s8231; GFX7-NEXT: v_addc_u32_e64 v2, s[6:7], v1, v2, s[6:7]232; GFX7-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec233; GFX7-NEXT: v_mov_b32_e32 v1, v2234; GFX7-NEXT: flat_load_dword v2, v[0:1] glc slc235; GFX7-NEXT: v_mov_b32_e32 v0, s4236; GFX7-NEXT: v_mov_b32_e32 v1, s5237; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)238; GFX7-NEXT: flat_store_dword v[0:1], v2239; GFX7-NEXT: s_endpgm240;241; GFX10-WGP-LABEL: flat_nontemporal_load_1:242; GFX10-WGP: ; %bb.0: ; %entry243; GFX10-WGP-NEXT: s_add_u32 s12, s12, s17244; GFX10-WGP-NEXT: s_addc_u32 s13, s13, 0245; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12246; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13247; GFX10-WGP-NEXT: s_mov_b64 s[4:5], s[8:9]248; GFX10-WGP-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x0249; GFX10-WGP-NEXT: s_nop 0250; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x8251; GFX10-WGP-NEXT: s_mov_b32 s6, 2252; GFX10-WGP-NEXT: v_lshlrev_b32_e64 v1, s6, v0253; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 0254; GFX10-WGP-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec255; GFX10-WGP-NEXT: v_mov_b32_e32 v2, v0256; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)257; GFX10-WGP-NEXT: s_mov_b32 s7, s8258; GFX10-WGP-NEXT: v_mov_b32_e32 v0, v1259; GFX10-WGP-NEXT: s_mov_b32 s6, s9260; GFX10-WGP-NEXT: v_mov_b32_e32 v1, v2261; GFX10-WGP-NEXT: v_add_co_u32 v0, s7, s7, v0262; GFX10-WGP-NEXT: v_add_co_ci_u32_e64 v2, s6, s6, v1, s7263; GFX10-WGP-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec264; GFX10-WGP-NEXT: v_mov_b32_e32 v1, v2265; GFX10-WGP-NEXT: flat_load_dword v2, v[0:1] slc266; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s4267; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s5268; GFX10-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)269; GFX10-WGP-NEXT: flat_store_dword v[0:1], v2270; GFX10-WGP-NEXT: s_endpgm271;272; GFX10-CU-LABEL: flat_nontemporal_load_1:273; GFX10-CU: ; %bb.0: ; %entry274; GFX10-CU-NEXT: s_add_u32 s12, s12, s17275; GFX10-CU-NEXT: s_addc_u32 s13, s13, 0276; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12277; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13278; GFX10-CU-NEXT: s_mov_b64 s[4:5], s[8:9]279; GFX10-CU-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x0280; GFX10-CU-NEXT: s_nop 0281; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x8282; GFX10-CU-NEXT: s_mov_b32 s6, 2283; GFX10-CU-NEXT: v_lshlrev_b32_e64 v1, s6, v0284; GFX10-CU-NEXT: v_mov_b32_e32 v0, 0285; GFX10-CU-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec286; GFX10-CU-NEXT: v_mov_b32_e32 v2, v0287; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)288; GFX10-CU-NEXT: s_mov_b32 s7, s8289; GFX10-CU-NEXT: v_mov_b32_e32 v0, v1290; GFX10-CU-NEXT: s_mov_b32 s6, s9291; GFX10-CU-NEXT: v_mov_b32_e32 v1, v2292; GFX10-CU-NEXT: v_add_co_u32 v0, s7, s7, v0293; GFX10-CU-NEXT: v_add_co_ci_u32_e64 v2, s6, s6, v1, s7294; GFX10-CU-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec295; GFX10-CU-NEXT: v_mov_b32_e32 v1, v2296; GFX10-CU-NEXT: flat_load_dword v2, v[0:1] slc297; GFX10-CU-NEXT: v_mov_b32_e32 v0, s4298; GFX10-CU-NEXT: v_mov_b32_e32 v1, s5299; GFX10-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)300; GFX10-CU-NEXT: flat_store_dword v[0:1], v2301; GFX10-CU-NEXT: s_endpgm302;303; SKIP-CACHE-INV-LABEL: flat_nontemporal_load_1:304; SKIP-CACHE-INV: ; %bb.0: ; %entry305; SKIP-CACHE-INV-NEXT: s_mov_b64 s[0:1], s[4:5]306; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[4:5], s[0:1], 0x0307; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[0:1], 0x2308; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, 2309; SKIP-CACHE-INV-NEXT: v_lshlrev_b32_e64 v1, s2, v0310; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, 0311; SKIP-CACHE-INV-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec312; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v2, v0313; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)314; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s4315; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, v1316; SKIP-CACHE-INV-NEXT: s_mov_b32 s4, s5317; SKIP-CACHE-INV-NEXT: ; kill: def $vgpr2 killed $vgpr2 killed $vgpr1_vgpr2 killed $exec318; SKIP-CACHE-INV-NEXT: v_add_i32_e64 v0, s[2:3], s2, v0319; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s4320; SKIP-CACHE-INV-NEXT: v_addc_u32_e64 v2, s[2:3], v1, v2, s[2:3]321; SKIP-CACHE-INV-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec322; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, v2323; SKIP-CACHE-INV-NEXT: flat_load_dword v2, v[0:1] glc slc324; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s0325; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s1326; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)327; SKIP-CACHE-INV-NEXT: flat_store_dword v[0:1], v2328; SKIP-CACHE-INV-NEXT: s_endpgm329;330; GFX90A-NOTTGSPLIT-LABEL: flat_nontemporal_load_1:331; GFX90A-NOTTGSPLIT: ; %bb.0: ; %entry332; GFX90A-NOTTGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s17333; GFX90A-NOTTGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 0334; GFX90A-NOTTGSPLIT-NEXT: s_mov_b64 s[4:5], s[8:9]335; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x0336; GFX90A-NOTTGSPLIT-NEXT: s_nop 0337; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x8338; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s6, 0x3ff339; GFX90A-NOTTGSPLIT-NEXT: v_and_b32_e64 v0, v0, s6340; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s6, 2341; GFX90A-NOTTGSPLIT-NEXT: v_lshlrev_b32_e64 v2, s6, v0342; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v0, 0343; GFX90A-NOTTGSPLIT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec344; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v3, v0345; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)346; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s6, s8347; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v0, v2348; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s8, s9349; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v2, v3350; GFX90A-NOTTGSPLIT-NEXT: v_add_co_u32_e64 v0, s[6:7], s6, v0351; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v1, s8352; GFX90A-NOTTGSPLIT-NEXT: v_addc_co_u32_e64 v2, s[6:7], v1, v2, s[6:7]353; GFX90A-NOTTGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec354; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v1, v2355; GFX90A-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1] glc slc356; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]357; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)358; GFX90A-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v2359; GFX90A-NOTTGSPLIT-NEXT: s_endpgm360;361; GFX90A-TGSPLIT-LABEL: flat_nontemporal_load_1:362; GFX90A-TGSPLIT: ; %bb.0: ; %entry363; GFX90A-TGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s17364; GFX90A-TGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 0365; GFX90A-TGSPLIT-NEXT: s_mov_b64 s[4:5], s[8:9]366; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x0367; GFX90A-TGSPLIT-NEXT: s_nop 0368; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x8369; GFX90A-TGSPLIT-NEXT: s_mov_b32 s6, 0x3ff370; GFX90A-TGSPLIT-NEXT: v_and_b32_e64 v0, v0, s6371; GFX90A-TGSPLIT-NEXT: s_mov_b32 s6, 2372; GFX90A-TGSPLIT-NEXT: v_lshlrev_b32_e64 v2, s6, v0373; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v0, 0374; GFX90A-TGSPLIT-NEXT: ; kill: def $vgpr2 killed $vgpr2 def $vgpr2_vgpr3 killed $exec375; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v3, v0376; GFX90A-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)377; GFX90A-TGSPLIT-NEXT: s_mov_b32 s6, s8378; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v0, v2379; GFX90A-TGSPLIT-NEXT: s_mov_b32 s8, s9380; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v2, v3381; GFX90A-TGSPLIT-NEXT: v_add_co_u32_e64 v0, s[6:7], s6, v0382; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v1, s8383; GFX90A-TGSPLIT-NEXT: v_addc_co_u32_e64 v2, s[6:7], v1, v2, s[6:7]384; GFX90A-TGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec385; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v1, v2386; GFX90A-TGSPLIT-NEXT: flat_load_dword v2, v[0:1] glc slc387; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]388; GFX90A-TGSPLIT-NEXT: s_waitcnt vmcnt(0)389; GFX90A-TGSPLIT-NEXT: flat_store_dword v[0:1], v2390; GFX90A-TGSPLIT-NEXT: s_endpgm391;392; GFX942-NOTTGSPLIT-LABEL: flat_nontemporal_load_1:393; GFX942-NOTTGSPLIT: ; %bb.0: ; %entry394; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0395; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8396; GFX942-NOTTGSPLIT-NEXT: s_mov_b32 s4, 0x3ff397; GFX942-NOTTGSPLIT-NEXT: v_and_b32_e64 v0, v0, s4398; GFX942-NOTTGSPLIT-NEXT: s_mov_b32 s4, 2399; GFX942-NOTTGSPLIT-NEXT: v_lshlrev_b32_e64 v0, s4, v0400; GFX942-NOTTGSPLIT-NEXT: v_mov_b32_e32 v2, 0401; GFX942-NOTTGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec402; GFX942-NOTTGSPLIT-NEXT: v_mov_b32_e32 v1, v2403; GFX942-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)404; GFX942-NOTTGSPLIT-NEXT: v_lshl_add_u64 v[0:1], s[2:3], 0, v[0:1]405; GFX942-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1] nt406; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]407; GFX942-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)408; GFX942-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v2409; GFX942-NOTTGSPLIT-NEXT: s_endpgm410;411; GFX942-TGSPLIT-LABEL: flat_nontemporal_load_1:412; GFX942-TGSPLIT: ; %bb.0: ; %entry413; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0414; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8415; GFX942-TGSPLIT-NEXT: s_mov_b32 s4, 0x3ff416; GFX942-TGSPLIT-NEXT: v_and_b32_e64 v0, v0, s4417; GFX942-TGSPLIT-NEXT: s_mov_b32 s4, 2418; GFX942-TGSPLIT-NEXT: v_lshlrev_b32_e64 v0, s4, v0419; GFX942-TGSPLIT-NEXT: v_mov_b32_e32 v2, 0420; GFX942-TGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec421; GFX942-TGSPLIT-NEXT: v_mov_b32_e32 v1, v2422; GFX942-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)423; GFX942-TGSPLIT-NEXT: v_lshl_add_u64 v[0:1], s[2:3], 0, v[0:1]424; GFX942-TGSPLIT-NEXT: flat_load_dword v2, v[0:1] nt425; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]426; GFX942-TGSPLIT-NEXT: s_waitcnt vmcnt(0)427; GFX942-TGSPLIT-NEXT: flat_store_dword v[0:1], v2428; GFX942-TGSPLIT-NEXT: s_endpgm429;430; GFX11-WGP-LABEL: flat_nontemporal_load_1:431; GFX11-WGP: ; %bb.0: ; %entry432; GFX11-WGP-NEXT: s_mov_b64 s[0:1], s[4:5]433; GFX11-WGP-NEXT: s_load_b64 s[4:5], s[0:1], 0x0434; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[0:1], 0x8435; GFX11-WGP-NEXT: s_mov_b32 s2, 0x3ff436; GFX11-WGP-NEXT: v_and_b32_e64 v0, v0, s2437; GFX11-WGP-NEXT: s_mov_b32 s2, 2438; GFX11-WGP-NEXT: v_lshlrev_b32_e64 v1, s2, v0439; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0440; GFX11-WGP-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec441; GFX11-WGP-NEXT: v_mov_b32_e32 v2, v0442; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)443; GFX11-WGP-NEXT: s_mov_b32 s3, s4444; GFX11-WGP-NEXT: v_mov_b32_e32 v0, v1445; GFX11-WGP-NEXT: s_mov_b32 s2, s5446; GFX11-WGP-NEXT: v_mov_b32_e32 v1, v2447; GFX11-WGP-NEXT: v_add_co_u32 v0, s3, s3, v0448; GFX11-WGP-NEXT: v_add_co_ci_u32_e64 v2, s2, s2, v1, s3449; GFX11-WGP-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec450; GFX11-WGP-NEXT: v_mov_b32_e32 v1, v2451; GFX11-WGP-NEXT: flat_load_b32 v2, v[0:1] slc dlc452; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s0453; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s1454; GFX11-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)455; GFX11-WGP-NEXT: flat_store_b32 v[0:1], v2456; GFX11-WGP-NEXT: s_endpgm457;458; GFX11-CU-LABEL: flat_nontemporal_load_1:459; GFX11-CU: ; %bb.0: ; %entry460; GFX11-CU-NEXT: s_mov_b64 s[0:1], s[4:5]461; GFX11-CU-NEXT: s_load_b64 s[4:5], s[0:1], 0x0462; GFX11-CU-NEXT: s_load_b64 s[0:1], s[0:1], 0x8463; GFX11-CU-NEXT: s_mov_b32 s2, 0x3ff464; GFX11-CU-NEXT: v_and_b32_e64 v0, v0, s2465; GFX11-CU-NEXT: s_mov_b32 s2, 2466; GFX11-CU-NEXT: v_lshlrev_b32_e64 v1, s2, v0467; GFX11-CU-NEXT: v_mov_b32_e32 v0, 0468; GFX11-CU-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec469; GFX11-CU-NEXT: v_mov_b32_e32 v2, v0470; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)471; GFX11-CU-NEXT: s_mov_b32 s3, s4472; GFX11-CU-NEXT: v_mov_b32_e32 v0, v1473; GFX11-CU-NEXT: s_mov_b32 s2, s5474; GFX11-CU-NEXT: v_mov_b32_e32 v1, v2475; GFX11-CU-NEXT: v_add_co_u32 v0, s3, s3, v0476; GFX11-CU-NEXT: v_add_co_ci_u32_e64 v2, s2, s2, v1, s3477; GFX11-CU-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec478; GFX11-CU-NEXT: v_mov_b32_e32 v1, v2479; GFX11-CU-NEXT: flat_load_b32 v2, v[0:1] slc dlc480; GFX11-CU-NEXT: v_mov_b32_e32 v0, s0481; GFX11-CU-NEXT: v_mov_b32_e32 v1, s1482; GFX11-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)483; GFX11-CU-NEXT: flat_store_b32 v[0:1], v2484; GFX11-CU-NEXT: s_endpgm485;486; GFX12-WGP-LABEL: flat_nontemporal_load_1:487; GFX12-WGP: ; %bb.0: ; %entry488; GFX12-WGP-NEXT: s_mov_b64 s[0:1], s[4:5]489; GFX12-WGP-NEXT: s_load_b64 s[4:5], s[0:1], 0x0490; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[0:1], 0x8491; GFX12-WGP-NEXT: s_mov_b32 s2, 0x3ff492; GFX12-WGP-NEXT: v_and_b32_e64 v0, v0, s2493; GFX12-WGP-NEXT: s_mov_b32 s2, 2494; GFX12-WGP-NEXT: s_wait_alu depctr_sa_sdst(0)495; GFX12-WGP-NEXT: v_lshlrev_b32_e64 v1, s2, v0496; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 0497; GFX12-WGP-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec498; GFX12-WGP-NEXT: v_mov_b32_e32 v2, v0499; GFX12-WGP-NEXT: s_wait_kmcnt 0x0500; GFX12-WGP-NEXT: s_mov_b32 s3, s4501; GFX12-WGP-NEXT: v_mov_b32_e32 v0, v1502; GFX12-WGP-NEXT: s_mov_b32 s2, s5503; GFX12-WGP-NEXT: v_mov_b32_e32 v1, v2504; GFX12-WGP-NEXT: s_wait_alu depctr_sa_sdst(0)505; GFX12-WGP-NEXT: v_add_co_u32 v0, s3, s3, v0506; GFX12-WGP-NEXT: s_wait_alu depctr_va_sdst(0)507; GFX12-WGP-NEXT: v_add_co_ci_u32_e64 v2, s2, s2, v1, s3508; GFX12-WGP-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec509; GFX12-WGP-NEXT: v_mov_b32_e32 v1, v2510; GFX12-WGP-NEXT: flat_load_b32 v2, v[0:1] th:TH_LOAD_NT511; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s0512; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s1513; GFX12-WGP-NEXT: s_wait_loadcnt_dscnt 0x0514; GFX12-WGP-NEXT: flat_store_b32 v[0:1], v2515; GFX12-WGP-NEXT: s_endpgm516;517; GFX12-CU-LABEL: flat_nontemporal_load_1:518; GFX12-CU: ; %bb.0: ; %entry519; GFX12-CU-NEXT: s_mov_b64 s[0:1], s[4:5]520; GFX12-CU-NEXT: s_load_b64 s[4:5], s[0:1], 0x0521; GFX12-CU-NEXT: s_load_b64 s[0:1], s[0:1], 0x8522; GFX12-CU-NEXT: s_mov_b32 s2, 0x3ff523; GFX12-CU-NEXT: v_and_b32_e64 v0, v0, s2524; GFX12-CU-NEXT: s_mov_b32 s2, 2525; GFX12-CU-NEXT: s_wait_alu depctr_sa_sdst(0)526; GFX12-CU-NEXT: v_lshlrev_b32_e64 v1, s2, v0527; GFX12-CU-NEXT: v_mov_b32_e32 v0, 0528; GFX12-CU-NEXT: ; kill: def $vgpr1 killed $vgpr1 def $vgpr1_vgpr2 killed $exec529; GFX12-CU-NEXT: v_mov_b32_e32 v2, v0530; GFX12-CU-NEXT: s_wait_kmcnt 0x0531; GFX12-CU-NEXT: s_mov_b32 s3, s4532; GFX12-CU-NEXT: v_mov_b32_e32 v0, v1533; GFX12-CU-NEXT: s_mov_b32 s2, s5534; GFX12-CU-NEXT: v_mov_b32_e32 v1, v2535; GFX12-CU-NEXT: s_wait_alu depctr_sa_sdst(0)536; GFX12-CU-NEXT: v_add_co_u32 v0, s3, s3, v0537; GFX12-CU-NEXT: s_wait_alu depctr_va_sdst(0)538; GFX12-CU-NEXT: v_add_co_ci_u32_e64 v2, s2, s2, v1, s3539; GFX12-CU-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec540; GFX12-CU-NEXT: v_mov_b32_e32 v1, v2541; GFX12-CU-NEXT: flat_load_b32 v2, v[0:1] th:TH_LOAD_NT542; GFX12-CU-NEXT: v_mov_b32_e32 v0, s0543; GFX12-CU-NEXT: v_mov_b32_e32 v1, s1544; GFX12-CU-NEXT: s_wait_loadcnt_dscnt 0x0545; GFX12-CU-NEXT: flat_store_b32 v[0:1], v2546; GFX12-CU-NEXT: s_endpgm547;548; GFX1250-LABEL: flat_nontemporal_load_1:549; GFX1250: ; %bb.0: ; %entry550; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1551; GFX1250-NEXT: v_mov_b32_e32 v1, v0552; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0553; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8554; GFX1250-NEXT: v_mov_b32_e32 v0, 0555; GFX1250-NEXT: s_wait_xcnt 0x0556; GFX1250-NEXT: s_mov_b32 s4, 0x3ff557; GFX1250-NEXT: v_and_b32_e64 v1, v1, s4558; GFX1250-NEXT: s_wait_kmcnt 0x0559; GFX1250-NEXT: flat_load_b32 v1, v1, s[2:3] scale_offset th:TH_LOAD_NT560; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0561; GFX1250-NEXT: flat_store_b32 v0, v1, s[0:1]562; GFX1250-NEXT: s_endpgm563 ptr %in, ptr %out) {564entry:565 %tid = call i32 @llvm.amdgcn.workitem.id.x()566 %val.gep = getelementptr inbounds i32, ptr %in, i32 %tid567 %val = load i32, ptr %val.gep, align 4, !nontemporal !0568 store i32 %val, ptr %out569 ret void570}571 572define amdgpu_kernel void @flat_nontemporal_store_0(573; GFX7-LABEL: flat_nontemporal_store_0:574; GFX7: ; %bb.0: ; %entry575; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13576; GFX7-NEXT: s_add_i32 s12, s12, s17577; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8578; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0579; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x2580; GFX7-NEXT: s_waitcnt lgkmcnt(0)581; GFX7-NEXT: v_mov_b32_e32 v0, s6582; GFX7-NEXT: v_mov_b32_e32 v1, s7583; GFX7-NEXT: flat_load_dword v2, v[0:1]584; GFX7-NEXT: v_mov_b32_e32 v0, s4585; GFX7-NEXT: v_mov_b32_e32 v1, s5586; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)587; GFX7-NEXT: flat_store_dword v[0:1], v2 glc slc588; GFX7-NEXT: s_endpgm589;590; GFX10-WGP-LABEL: flat_nontemporal_store_0:591; GFX10-WGP: ; %bb.0: ; %entry592; GFX10-WGP-NEXT: s_add_u32 s12, s12, s17593; GFX10-WGP-NEXT: s_addc_u32 s13, s13, 0594; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12595; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13596; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0597; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8598; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)599; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s6600; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s7601; GFX10-WGP-NEXT: flat_load_dword v2, v[0:1]602; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s4603; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s5604; GFX10-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)605; GFX10-WGP-NEXT: flat_store_dword v[0:1], v2 glc slc606; GFX10-WGP-NEXT: s_endpgm607;608; GFX10-CU-LABEL: flat_nontemporal_store_0:609; GFX10-CU: ; %bb.0: ; %entry610; GFX10-CU-NEXT: s_add_u32 s12, s12, s17611; GFX10-CU-NEXT: s_addc_u32 s13, s13, 0612; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12613; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13614; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0615; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8616; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)617; GFX10-CU-NEXT: v_mov_b32_e32 v0, s6618; GFX10-CU-NEXT: v_mov_b32_e32 v1, s7619; GFX10-CU-NEXT: flat_load_dword v2, v[0:1]620; GFX10-CU-NEXT: v_mov_b32_e32 v0, s4621; GFX10-CU-NEXT: v_mov_b32_e32 v1, s5622; GFX10-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)623; GFX10-CU-NEXT: flat_store_dword v[0:1], v2 glc slc624; GFX10-CU-NEXT: s_endpgm625;626; SKIP-CACHE-INV-LABEL: flat_nontemporal_store_0:627; SKIP-CACHE-INV: ; %bb.0: ; %entry628; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0629; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2630; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)631; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s2632; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s3633; SKIP-CACHE-INV-NEXT: flat_load_dword v2, v[0:1]634; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s0635; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s1636; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)637; SKIP-CACHE-INV-NEXT: flat_store_dword v[0:1], v2 glc slc638; SKIP-CACHE-INV-NEXT: s_endpgm639;640; GFX90A-NOTTGSPLIT-LABEL: flat_nontemporal_store_0:641; GFX90A-NOTTGSPLIT: ; %bb.0: ; %entry642; GFX90A-NOTTGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s17643; GFX90A-NOTTGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 0644; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0645; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8646; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)647; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[6:7], s[6:7] op_sel:[0,1]648; GFX90A-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1]649; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]650; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)651; GFX90A-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v2 glc slc652; GFX90A-NOTTGSPLIT-NEXT: s_endpgm653;654; GFX90A-TGSPLIT-LABEL: flat_nontemporal_store_0:655; GFX90A-TGSPLIT: ; %bb.0: ; %entry656; GFX90A-TGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s17657; GFX90A-TGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 0658; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x0659; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x8660; GFX90A-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)661; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[6:7], s[6:7] op_sel:[0,1]662; GFX90A-TGSPLIT-NEXT: flat_load_dword v2, v[0:1]663; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]664; GFX90A-TGSPLIT-NEXT: s_waitcnt vmcnt(0)665; GFX90A-TGSPLIT-NEXT: flat_store_dword v[0:1], v2 glc slc666; GFX90A-TGSPLIT-NEXT: s_endpgm667;668; GFX942-NOTTGSPLIT-LABEL: flat_nontemporal_store_0:669; GFX942-NOTTGSPLIT: ; %bb.0: ; %entry670; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0671; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8672; GFX942-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)673; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[2:3]674; GFX942-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1]675; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]676; GFX942-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)677; GFX942-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v2 nt678; GFX942-NOTTGSPLIT-NEXT: s_endpgm679;680; GFX942-TGSPLIT-LABEL: flat_nontemporal_store_0:681; GFX942-TGSPLIT: ; %bb.0: ; %entry682; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0683; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8684; GFX942-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)685; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[2:3]686; GFX942-TGSPLIT-NEXT: flat_load_dword v2, v[0:1]687; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]688; GFX942-TGSPLIT-NEXT: s_waitcnt vmcnt(0)689; GFX942-TGSPLIT-NEXT: flat_store_dword v[0:1], v2 nt690; GFX942-TGSPLIT-NEXT: s_endpgm691;692; GFX11-WGP-LABEL: flat_nontemporal_store_0:693; GFX11-WGP: ; %bb.0: ; %entry694; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0695; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8696; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)697; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s2698; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s3699; GFX11-WGP-NEXT: flat_load_b32 v2, v[0:1]700; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s0701; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s1702; GFX11-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)703; GFX11-WGP-NEXT: flat_store_b32 v[0:1], v2 glc slc dlc704; GFX11-WGP-NEXT: s_endpgm705;706; GFX11-CU-LABEL: flat_nontemporal_store_0:707; GFX11-CU: ; %bb.0: ; %entry708; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0709; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8710; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)711; GFX11-CU-NEXT: v_mov_b32_e32 v0, s2712; GFX11-CU-NEXT: v_mov_b32_e32 v1, s3713; GFX11-CU-NEXT: flat_load_b32 v2, v[0:1]714; GFX11-CU-NEXT: v_mov_b32_e32 v0, s0715; GFX11-CU-NEXT: v_mov_b32_e32 v1, s1716; GFX11-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)717; GFX11-CU-NEXT: flat_store_b32 v[0:1], v2 glc slc dlc718; GFX11-CU-NEXT: s_endpgm719;720; GFX12-WGP-LABEL: flat_nontemporal_store_0:721; GFX12-WGP: ; %bb.0: ; %entry722; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x0723; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x8724; GFX12-WGP-NEXT: s_wait_kmcnt 0x0725; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s2726; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s3727; GFX12-WGP-NEXT: flat_load_b32 v2, v[0:1]728; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s0729; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s1730; GFX12-WGP-NEXT: s_wait_loadcnt_dscnt 0x0731; GFX12-WGP-NEXT: flat_store_b32 v[0:1], v2 th:TH_STORE_NT732; GFX12-WGP-NEXT: s_endpgm733;734; GFX12-CU-LABEL: flat_nontemporal_store_0:735; GFX12-CU: ; %bb.0: ; %entry736; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x0737; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x8738; GFX12-CU-NEXT: s_wait_kmcnt 0x0739; GFX12-CU-NEXT: v_mov_b32_e32 v0, s2740; GFX12-CU-NEXT: v_mov_b32_e32 v1, s3741; GFX12-CU-NEXT: flat_load_b32 v2, v[0:1]742; GFX12-CU-NEXT: v_mov_b32_e32 v0, s0743; GFX12-CU-NEXT: v_mov_b32_e32 v1, s1744; GFX12-CU-NEXT: s_wait_loadcnt_dscnt 0x0745; GFX12-CU-NEXT: flat_store_b32 v[0:1], v2 th:TH_STORE_NT746; GFX12-CU-NEXT: s_endpgm747;748; GFX1250-LABEL: flat_nontemporal_store_0:749; GFX1250: ; %bb.0: ; %entry750; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1751; GFX1250-NEXT: v_mov_b32_e32 v0, 0752; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x0753; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x8754; GFX1250-NEXT: s_wait_kmcnt 0x0755; GFX1250-NEXT: flat_load_b32 v1, v0, s[2:3]756; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0757; GFX1250-NEXT: flat_store_b32 v0, v1, s[0:1] th:TH_STORE_NT758; GFX1250-NEXT: s_endpgm759 ptr %in, ptr %out) {760entry:761 %val = load i32, ptr %in, align 4762 store i32 %val, ptr %out, !nontemporal !0763 ret void764}765 766define amdgpu_kernel void @flat_nontemporal_store_1(767; GFX7-LABEL: flat_nontemporal_store_1:768; GFX7: ; %bb.0: ; %entry769; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s13770; GFX7-NEXT: s_add_i32 s12, s12, s17771; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8772; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0773; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x2774; GFX7-NEXT: s_waitcnt lgkmcnt(0)775; GFX7-NEXT: v_mov_b32_e32 v1, s4776; GFX7-NEXT: v_mov_b32_e32 v2, s5777; GFX7-NEXT: flat_load_dword v2, v[1:2]778; GFX7-NEXT: s_mov_b32 s4, 2779; GFX7-NEXT: v_lshlrev_b32_e64 v3, s4, v0780; GFX7-NEXT: v_mov_b32_e32 v0, 0781; GFX7-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec782; GFX7-NEXT: v_mov_b32_e32 v4, v0783; GFX7-NEXT: s_mov_b32 s4, s6784; GFX7-NEXT: v_mov_b32_e32 v0, v3785; GFX7-NEXT: s_mov_b32 s6, s7786; GFX7-NEXT: v_mov_b32_e32 v3, v4787; GFX7-NEXT: v_add_i32_e64 v0, s[4:5], s4, v0788; GFX7-NEXT: v_mov_b32_e32 v1, s6789; GFX7-NEXT: v_addc_u32_e64 v3, s[4:5], v1, v3, s[4:5]790; GFX7-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec791; GFX7-NEXT: v_mov_b32_e32 v1, v3792; GFX7-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)793; GFX7-NEXT: flat_store_dword v[0:1], v2 glc slc794; GFX7-NEXT: s_endpgm795;796; GFX10-WGP-LABEL: flat_nontemporal_store_1:797; GFX10-WGP: ; %bb.0: ; %entry798; GFX10-WGP-NEXT: s_add_u32 s12, s12, s17799; GFX10-WGP-NEXT: s_addc_u32 s13, s13, 0800; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12801; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13802; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0803; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x8804; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)805; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s4806; GFX10-WGP-NEXT: v_mov_b32_e32 v2, s5807; GFX10-WGP-NEXT: flat_load_dword v2, v[1:2]808; GFX10-WGP-NEXT: s_mov_b32 s4, 2809; GFX10-WGP-NEXT: v_lshlrev_b32_e64 v3, s4, v0810; GFX10-WGP-NEXT: v_mov_b32_e32 v0, 0811; GFX10-WGP-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec812; GFX10-WGP-NEXT: v_mov_b32_e32 v4, v0813; GFX10-WGP-NEXT: s_mov_b32 s5, s6814; GFX10-WGP-NEXT: v_mov_b32_e32 v0, v3815; GFX10-WGP-NEXT: s_mov_b32 s4, s7816; GFX10-WGP-NEXT: v_mov_b32_e32 v1, v4817; GFX10-WGP-NEXT: v_add_co_u32 v0, s5, s5, v0818; GFX10-WGP-NEXT: v_add_co_ci_u32_e64 v3, s4, s4, v1, s5819; GFX10-WGP-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec820; GFX10-WGP-NEXT: v_mov_b32_e32 v1, v3821; GFX10-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)822; GFX10-WGP-NEXT: flat_store_dword v[0:1], v2 glc slc823; GFX10-WGP-NEXT: s_endpgm824;825; GFX10-CU-LABEL: flat_nontemporal_store_1:826; GFX10-CU: ; %bb.0: ; %entry827; GFX10-CU-NEXT: s_add_u32 s12, s12, s17828; GFX10-CU-NEXT: s_addc_u32 s13, s13, 0829; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s12830; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s13831; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0832; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x8833; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)834; GFX10-CU-NEXT: v_mov_b32_e32 v1, s4835; GFX10-CU-NEXT: v_mov_b32_e32 v2, s5836; GFX10-CU-NEXT: flat_load_dword v2, v[1:2]837; GFX10-CU-NEXT: s_mov_b32 s4, 2838; GFX10-CU-NEXT: v_lshlrev_b32_e64 v3, s4, v0839; GFX10-CU-NEXT: v_mov_b32_e32 v0, 0840; GFX10-CU-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec841; GFX10-CU-NEXT: v_mov_b32_e32 v4, v0842; GFX10-CU-NEXT: s_mov_b32 s5, s6843; GFX10-CU-NEXT: v_mov_b32_e32 v0, v3844; GFX10-CU-NEXT: s_mov_b32 s4, s7845; GFX10-CU-NEXT: v_mov_b32_e32 v1, v4846; GFX10-CU-NEXT: v_add_co_u32 v0, s5, s5, v0847; GFX10-CU-NEXT: v_add_co_ci_u32_e64 v3, s4, s4, v1, s5848; GFX10-CU-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec849; GFX10-CU-NEXT: v_mov_b32_e32 v1, v3850; GFX10-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)851; GFX10-CU-NEXT: flat_store_dword v[0:1], v2 glc slc852; GFX10-CU-NEXT: s_endpgm853;854; SKIP-CACHE-INV-LABEL: flat_nontemporal_store_1:855; SKIP-CACHE-INV: ; %bb.0: ; %entry856; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0857; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x2858; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)859; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v2, s1860; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s0861; SKIP-CACHE-INV-NEXT: flat_load_dword v2, v[1:2]862; SKIP-CACHE-INV-NEXT: s_mov_b32 s0, 2863; SKIP-CACHE-INV-NEXT: v_lshlrev_b32_e64 v3, s0, v0864; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, 0865; SKIP-CACHE-INV-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec866; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v4, v0867; SKIP-CACHE-INV-NEXT: s_mov_b32 s0, s2868; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, v3869; SKIP-CACHE-INV-NEXT: s_mov_b32 s2, s3870; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v3, v4871; SKIP-CACHE-INV-NEXT: v_add_i32_e64 v0, s[0:1], s0, v0872; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s2873; SKIP-CACHE-INV-NEXT: v_addc_u32_e64 v3, s[0:1], v1, v3, s[0:1]874; SKIP-CACHE-INV-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec875; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, v3876; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)877; SKIP-CACHE-INV-NEXT: flat_store_dword v[0:1], v2 glc slc878; SKIP-CACHE-INV-NEXT: s_endpgm879;880; GFX90A-NOTTGSPLIT-LABEL: flat_nontemporal_store_1:881; GFX90A-NOTTGSPLIT: ; %bb.0: ; %entry882; GFX90A-NOTTGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s17883; GFX90A-NOTTGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 0884; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0885; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x8886; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)887; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[2:3], s[4:5], s[4:5] op_sel:[0,1]888; GFX90A-NOTTGSPLIT-NEXT: flat_load_dword v2, v[2:3]889; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s4, 0x3ff890; GFX90A-NOTTGSPLIT-NEXT: v_and_b32_e64 v0, v0, s4891; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s4, 2892; GFX90A-NOTTGSPLIT-NEXT: v_lshlrev_b32_e64 v4, s4, v0893; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v0, 0894; GFX90A-NOTTGSPLIT-NEXT: ; kill: def $vgpr4 killed $vgpr4 def $vgpr4_vgpr5 killed $exec895; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v5, v0896; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s4, s6897; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v0, v4898; GFX90A-NOTTGSPLIT-NEXT: s_mov_b32 s6, s7899; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v3, v5900; GFX90A-NOTTGSPLIT-NEXT: v_add_co_u32_e64 v0, s[4:5], s4, v0901; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v1, s6902; GFX90A-NOTTGSPLIT-NEXT: v_addc_co_u32_e64 v3, s[4:5], v1, v3, s[4:5]903; GFX90A-NOTTGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec904; GFX90A-NOTTGSPLIT-NEXT: v_mov_b32_e32 v1, v3905; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)906; GFX90A-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v2 glc slc907; GFX90A-NOTTGSPLIT-NEXT: s_endpgm908;909; GFX90A-TGSPLIT-LABEL: flat_nontemporal_store_1:910; GFX90A-TGSPLIT: ; %bb.0: ; %entry911; GFX90A-TGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s17912; GFX90A-TGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 0913; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0914; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x8915; GFX90A-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)916; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[2:3], s[4:5], s[4:5] op_sel:[0,1]917; GFX90A-TGSPLIT-NEXT: flat_load_dword v2, v[2:3]918; GFX90A-TGSPLIT-NEXT: s_mov_b32 s4, 0x3ff919; GFX90A-TGSPLIT-NEXT: v_and_b32_e64 v0, v0, s4920; GFX90A-TGSPLIT-NEXT: s_mov_b32 s4, 2921; GFX90A-TGSPLIT-NEXT: v_lshlrev_b32_e64 v4, s4, v0922; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v0, 0923; GFX90A-TGSPLIT-NEXT: ; kill: def $vgpr4 killed $vgpr4 def $vgpr4_vgpr5 killed $exec924; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v5, v0925; GFX90A-TGSPLIT-NEXT: s_mov_b32 s4, s6926; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v0, v4927; GFX90A-TGSPLIT-NEXT: s_mov_b32 s6, s7928; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v3, v5929; GFX90A-TGSPLIT-NEXT: v_add_co_u32_e64 v0, s[4:5], s4, v0930; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v1, s6931; GFX90A-TGSPLIT-NEXT: v_addc_co_u32_e64 v3, s[4:5], v1, v3, s[4:5]932; GFX90A-TGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec933; GFX90A-TGSPLIT-NEXT: v_mov_b32_e32 v1, v3934; GFX90A-TGSPLIT-NEXT: s_waitcnt vmcnt(0)935; GFX90A-TGSPLIT-NEXT: flat_store_dword v[0:1], v2 glc slc936; GFX90A-TGSPLIT-NEXT: s_endpgm937;938; GFX942-NOTTGSPLIT-LABEL: flat_nontemporal_store_1:939; GFX942-NOTTGSPLIT: ; %bb.0: ; %entry940; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0941; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8942; GFX942-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)943; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[2:3], s[2:3]944; GFX942-NOTTGSPLIT-NEXT: flat_load_dword v2, v[2:3]945; GFX942-NOTTGSPLIT-NEXT: s_mov_b32 s2, 0x3ff946; GFX942-NOTTGSPLIT-NEXT: v_and_b32_e64 v0, v0, s2947; GFX942-NOTTGSPLIT-NEXT: s_mov_b32 s2, 2948; GFX942-NOTTGSPLIT-NEXT: v_lshlrev_b32_e64 v0, s2, v0949; GFX942-NOTTGSPLIT-NEXT: v_mov_b32_e32 v3, 0950; GFX942-NOTTGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec951; GFX942-NOTTGSPLIT-NEXT: v_mov_b32_e32 v1, v3952; GFX942-NOTTGSPLIT-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1]953; GFX942-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)954; GFX942-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v2 nt955; GFX942-NOTTGSPLIT-NEXT: s_endpgm956;957; GFX942-TGSPLIT-LABEL: flat_nontemporal_store_1:958; GFX942-TGSPLIT: ; %bb.0: ; %entry959; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x0960; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x8961; GFX942-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)962; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[2:3], s[2:3]963; GFX942-TGSPLIT-NEXT: flat_load_dword v2, v[2:3]964; GFX942-TGSPLIT-NEXT: s_mov_b32 s2, 0x3ff965; GFX942-TGSPLIT-NEXT: v_and_b32_e64 v0, v0, s2966; GFX942-TGSPLIT-NEXT: s_mov_b32 s2, 2967; GFX942-TGSPLIT-NEXT: v_lshlrev_b32_e64 v0, s2, v0968; GFX942-TGSPLIT-NEXT: v_mov_b32_e32 v3, 0969; GFX942-TGSPLIT-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec970; GFX942-TGSPLIT-NEXT: v_mov_b32_e32 v1, v3971; GFX942-TGSPLIT-NEXT: v_lshl_add_u64 v[0:1], s[0:1], 0, v[0:1]972; GFX942-TGSPLIT-NEXT: s_waitcnt vmcnt(0)973; GFX942-TGSPLIT-NEXT: flat_store_dword v[0:1], v2 nt974; GFX942-TGSPLIT-NEXT: s_endpgm975;976; GFX11-WGP-LABEL: flat_nontemporal_store_1:977; GFX11-WGP: ; %bb.0: ; %entry978; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x0979; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x8980; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)981; GFX11-WGP-NEXT: v_mov_b32_e32 v2, s1982; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s0983; GFX11-WGP-NEXT: flat_load_b32 v2, v[1:2]984; GFX11-WGP-NEXT: s_mov_b32 s0, 0x3ff985; GFX11-WGP-NEXT: v_and_b32_e64 v0, v0, s0986; GFX11-WGP-NEXT: s_mov_b32 s0, 2987; GFX11-WGP-NEXT: v_lshlrev_b32_e64 v3, s0, v0988; GFX11-WGP-NEXT: v_mov_b32_e32 v0, 0989; GFX11-WGP-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec990; GFX11-WGP-NEXT: v_mov_b32_e32 v4, v0991; GFX11-WGP-NEXT: s_mov_b32 s1, s2992; GFX11-WGP-NEXT: v_mov_b32_e32 v0, v3993; GFX11-WGP-NEXT: s_mov_b32 s0, s3994; GFX11-WGP-NEXT: v_mov_b32_e32 v1, v4995; GFX11-WGP-NEXT: v_add_co_u32 v0, s1, s1, v0996; GFX11-WGP-NEXT: v_add_co_ci_u32_e64 v3, s0, s0, v1, s1997; GFX11-WGP-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec998; GFX11-WGP-NEXT: v_mov_b32_e32 v1, v3999; GFX11-WGP-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1000; GFX11-WGP-NEXT: flat_store_b32 v[0:1], v2 glc slc dlc1001; GFX11-WGP-NEXT: s_endpgm1002;1003; GFX11-CU-LABEL: flat_nontemporal_store_1:1004; GFX11-CU: ; %bb.0: ; %entry1005; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x01006; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x81007; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)1008; GFX11-CU-NEXT: v_mov_b32_e32 v2, s11009; GFX11-CU-NEXT: v_mov_b32_e32 v1, s01010; GFX11-CU-NEXT: flat_load_b32 v2, v[1:2]1011; GFX11-CU-NEXT: s_mov_b32 s0, 0x3ff1012; GFX11-CU-NEXT: v_and_b32_e64 v0, v0, s01013; GFX11-CU-NEXT: s_mov_b32 s0, 21014; GFX11-CU-NEXT: v_lshlrev_b32_e64 v3, s0, v01015; GFX11-CU-NEXT: v_mov_b32_e32 v0, 01016; GFX11-CU-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec1017; GFX11-CU-NEXT: v_mov_b32_e32 v4, v01018; GFX11-CU-NEXT: s_mov_b32 s1, s21019; GFX11-CU-NEXT: v_mov_b32_e32 v0, v31020; GFX11-CU-NEXT: s_mov_b32 s0, s31021; GFX11-CU-NEXT: v_mov_b32_e32 v1, v41022; GFX11-CU-NEXT: v_add_co_u32 v0, s1, s1, v01023; GFX11-CU-NEXT: v_add_co_ci_u32_e64 v3, s0, s0, v1, s11024; GFX11-CU-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec1025; GFX11-CU-NEXT: v_mov_b32_e32 v1, v31026; GFX11-CU-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)1027; GFX11-CU-NEXT: flat_store_b32 v[0:1], v2 glc slc dlc1028; GFX11-CU-NEXT: s_endpgm1029;1030; GFX12-WGP-LABEL: flat_nontemporal_store_1:1031; GFX12-WGP: ; %bb.0: ; %entry1032; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x01033; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x81034; GFX12-WGP-NEXT: s_wait_kmcnt 0x01035; GFX12-WGP-NEXT: v_mov_b32_e32 v2, s11036; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s01037; GFX12-WGP-NEXT: flat_load_b32 v2, v[1:2]1038; GFX12-WGP-NEXT: s_mov_b32 s0, 0x3ff1039; GFX12-WGP-NEXT: s_wait_alu depctr_sa_sdst(0)1040; GFX12-WGP-NEXT: v_and_b32_e64 v0, v0, s01041; GFX12-WGP-NEXT: s_mov_b32 s0, 21042; GFX12-WGP-NEXT: s_wait_alu depctr_sa_sdst(0)1043; GFX12-WGP-NEXT: v_lshlrev_b32_e64 v3, s0, v01044; GFX12-WGP-NEXT: v_mov_b32_e32 v0, 01045; GFX12-WGP-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec1046; GFX12-WGP-NEXT: v_mov_b32_e32 v4, v01047; GFX12-WGP-NEXT: s_mov_b32 s1, s21048; GFX12-WGP-NEXT: v_mov_b32_e32 v0, v31049; GFX12-WGP-NEXT: s_mov_b32 s0, s31050; GFX12-WGP-NEXT: v_mov_b32_e32 v1, v41051; GFX12-WGP-NEXT: s_wait_alu depctr_sa_sdst(0)1052; GFX12-WGP-NEXT: v_add_co_u32 v0, s1, s1, v01053; GFX12-WGP-NEXT: s_wait_alu depctr_va_sdst(0)1054; GFX12-WGP-NEXT: v_add_co_ci_u32_e64 v3, s0, s0, v1, s11055; GFX12-WGP-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec1056; GFX12-WGP-NEXT: v_mov_b32_e32 v1, v31057; GFX12-WGP-NEXT: s_wait_loadcnt_dscnt 0x01058; GFX12-WGP-NEXT: flat_store_b32 v[0:1], v2 th:TH_STORE_NT1059; GFX12-WGP-NEXT: s_endpgm1060;1061; GFX12-CU-LABEL: flat_nontemporal_store_1:1062; GFX12-CU: ; %bb.0: ; %entry1063; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x01064; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x81065; GFX12-CU-NEXT: s_wait_kmcnt 0x01066; GFX12-CU-NEXT: v_mov_b32_e32 v2, s11067; GFX12-CU-NEXT: v_mov_b32_e32 v1, s01068; GFX12-CU-NEXT: flat_load_b32 v2, v[1:2]1069; GFX12-CU-NEXT: s_mov_b32 s0, 0x3ff1070; GFX12-CU-NEXT: s_wait_alu depctr_sa_sdst(0)1071; GFX12-CU-NEXT: v_and_b32_e64 v0, v0, s01072; GFX12-CU-NEXT: s_mov_b32 s0, 21073; GFX12-CU-NEXT: s_wait_alu depctr_sa_sdst(0)1074; GFX12-CU-NEXT: v_lshlrev_b32_e64 v3, s0, v01075; GFX12-CU-NEXT: v_mov_b32_e32 v0, 01076; GFX12-CU-NEXT: ; kill: def $vgpr3 killed $vgpr3 def $vgpr3_vgpr4 killed $exec1077; GFX12-CU-NEXT: v_mov_b32_e32 v4, v01078; GFX12-CU-NEXT: s_mov_b32 s1, s21079; GFX12-CU-NEXT: v_mov_b32_e32 v0, v31080; GFX12-CU-NEXT: s_mov_b32 s0, s31081; GFX12-CU-NEXT: v_mov_b32_e32 v1, v41082; GFX12-CU-NEXT: s_wait_alu depctr_sa_sdst(0)1083; GFX12-CU-NEXT: v_add_co_u32 v0, s1, s1, v01084; GFX12-CU-NEXT: s_wait_alu depctr_va_sdst(0)1085; GFX12-CU-NEXT: v_add_co_ci_u32_e64 v3, s0, s0, v1, s11086; GFX12-CU-NEXT: ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1 killed $exec1087; GFX12-CU-NEXT: v_mov_b32_e32 v1, v31088; GFX12-CU-NEXT: s_wait_loadcnt_dscnt 0x01089; GFX12-CU-NEXT: flat_store_b32 v[0:1], v2 th:TH_STORE_NT1090; GFX12-CU-NEXT: s_endpgm1091;1092; GFX1250-LABEL: flat_nontemporal_store_1:1093; GFX1250: ; %bb.0: ; %entry1094; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11095; GFX1250-NEXT: v_mov_b32_e32 v1, 01096; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x01097; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x81098; GFX1250-NEXT: s_wait_kmcnt 0x01099; GFX1250-NEXT: flat_load_b32 v1, v1, s[2:3]1100; GFX1250-NEXT: s_wait_xcnt 0x01101; GFX1250-NEXT: s_mov_b32 s2, 0x3ff1102; GFX1250-NEXT: v_and_b32_e64 v0, v0, s21103; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01104; GFX1250-NEXT: flat_store_b32 v0, v1, s[0:1] scale_offset th:TH_STORE_NT1105; GFX1250-NEXT: s_endpgm1106 ptr %in, ptr %out) {1107entry:1108 %tid = call i32 @llvm.amdgcn.workitem.id.x()1109 %val = load i32, ptr %in, align 41110 %out.gep = getelementptr inbounds i32, ptr %out, i32 %tid1111 store i32 %val, ptr %out.gep, !nontemporal !01112 ret void1113}1114 1115define amdgpu_kernel void @flat_nontemporal_volatile_load(1116; GFX7-LABEL: flat_nontemporal_volatile_load:1117; GFX7: ; %bb.0: ; %entry1118; GFX7-NEXT: s_mov_b32 flat_scratch_lo, s131119; GFX7-NEXT: s_add_i32 s12, s12, s171120; GFX7-NEXT: s_lshr_b32 flat_scratch_hi, s12, 81121; GFX7-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x01122; GFX7-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x21123; GFX7-NEXT: s_waitcnt lgkmcnt(0)1124; GFX7-NEXT: v_mov_b32_e32 v0, s61125; GFX7-NEXT: v_mov_b32_e32 v1, s71126; GFX7-NEXT: flat_load_dword v2, v[0:1] glc1127; GFX7-NEXT: s_waitcnt vmcnt(0)1128; GFX7-NEXT: v_mov_b32_e32 v0, s41129; GFX7-NEXT: v_mov_b32_e32 v1, s51130; GFX7-NEXT: s_waitcnt lgkmcnt(0)1131; GFX7-NEXT: flat_store_dword v[0:1], v21132; GFX7-NEXT: s_endpgm1133;1134; GFX10-WGP-LABEL: flat_nontemporal_volatile_load:1135; GFX10-WGP: ; %bb.0: ; %entry1136; GFX10-WGP-NEXT: s_add_u32 s12, s12, s171137; GFX10-WGP-NEXT: s_addc_u32 s13, s13, 01138; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s121139; GFX10-WGP-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s131140; GFX10-WGP-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x01141; GFX10-WGP-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x81142; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)1143; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s61144; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s71145; GFX10-WGP-NEXT: flat_load_dword v2, v[0:1] glc dlc1146; GFX10-WGP-NEXT: s_waitcnt vmcnt(0)1147; GFX10-WGP-NEXT: v_mov_b32_e32 v0, s41148; GFX10-WGP-NEXT: v_mov_b32_e32 v1, s51149; GFX10-WGP-NEXT: s_waitcnt lgkmcnt(0)1150; GFX10-WGP-NEXT: flat_store_dword v[0:1], v21151; GFX10-WGP-NEXT: s_endpgm1152;1153; GFX10-CU-LABEL: flat_nontemporal_volatile_load:1154; GFX10-CU: ; %bb.0: ; %entry1155; GFX10-CU-NEXT: s_add_u32 s12, s12, s171156; GFX10-CU-NEXT: s_addc_u32 s13, s13, 01157; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s121158; GFX10-CU-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s131159; GFX10-CU-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x01160; GFX10-CU-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x81161; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)1162; GFX10-CU-NEXT: v_mov_b32_e32 v0, s61163; GFX10-CU-NEXT: v_mov_b32_e32 v1, s71164; GFX10-CU-NEXT: flat_load_dword v2, v[0:1] glc dlc1165; GFX10-CU-NEXT: s_waitcnt vmcnt(0)1166; GFX10-CU-NEXT: v_mov_b32_e32 v0, s41167; GFX10-CU-NEXT: v_mov_b32_e32 v1, s51168; GFX10-CU-NEXT: s_waitcnt lgkmcnt(0)1169; GFX10-CU-NEXT: flat_store_dword v[0:1], v21170; GFX10-CU-NEXT: s_endpgm1171;1172; SKIP-CACHE-INV-LABEL: flat_nontemporal_volatile_load:1173; SKIP-CACHE-INV: ; %bb.0: ; %entry1174; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x01175; SKIP-CACHE-INV-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x21176; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)1177; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s21178; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s31179; SKIP-CACHE-INV-NEXT: flat_load_dword v2, v[0:1] glc1180; SKIP-CACHE-INV-NEXT: s_waitcnt vmcnt(0)1181; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v0, s01182; SKIP-CACHE-INV-NEXT: v_mov_b32_e32 v1, s11183; SKIP-CACHE-INV-NEXT: s_waitcnt lgkmcnt(0)1184; SKIP-CACHE-INV-NEXT: flat_store_dword v[0:1], v21185; SKIP-CACHE-INV-NEXT: s_endpgm1186;1187; GFX90A-NOTTGSPLIT-LABEL: flat_nontemporal_volatile_load:1188; GFX90A-NOTTGSPLIT: ; %bb.0: ; %entry1189; GFX90A-NOTTGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s171190; GFX90A-NOTTGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 01191; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x01192; GFX90A-NOTTGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x81193; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)1194; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[6:7], s[6:7] op_sel:[0,1]1195; GFX90A-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1] glc1196; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0)1197; GFX90A-NOTTGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]1198; GFX90A-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)1199; GFX90A-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v21200; GFX90A-NOTTGSPLIT-NEXT: s_endpgm1201;1202; GFX90A-TGSPLIT-LABEL: flat_nontemporal_volatile_load:1203; GFX90A-TGSPLIT: ; %bb.0: ; %entry1204; GFX90A-TGSPLIT-NEXT: s_add_u32 flat_scratch_lo, s12, s171205; GFX90A-TGSPLIT-NEXT: s_addc_u32 flat_scratch_hi, s13, 01206; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[6:7], s[8:9], 0x01207; GFX90A-TGSPLIT-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x81208; GFX90A-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)1209; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[6:7], s[6:7] op_sel:[0,1]1210; GFX90A-TGSPLIT-NEXT: flat_load_dword v2, v[0:1] glc1211; GFX90A-TGSPLIT-NEXT: s_waitcnt vmcnt(0)1212; GFX90A-TGSPLIT-NEXT: v_pk_mov_b32 v[0:1], s[4:5], s[4:5] op_sel:[0,1]1213; GFX90A-TGSPLIT-NEXT: flat_store_dword v[0:1], v21214; GFX90A-TGSPLIT-NEXT: s_endpgm1215;1216; GFX942-NOTTGSPLIT-LABEL: flat_nontemporal_volatile_load:1217; GFX942-NOTTGSPLIT: ; %bb.0: ; %entry1218; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x01219; GFX942-NOTTGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x81220; GFX942-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)1221; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[2:3]1222; GFX942-NOTTGSPLIT-NEXT: flat_load_dword v2, v[0:1] sc0 sc11223; GFX942-NOTTGSPLIT-NEXT: s_waitcnt vmcnt(0)1224; GFX942-NOTTGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]1225; GFX942-NOTTGSPLIT-NEXT: s_waitcnt lgkmcnt(0)1226; GFX942-NOTTGSPLIT-NEXT: flat_store_dword v[0:1], v21227; GFX942-NOTTGSPLIT-NEXT: s_endpgm1228;1229; GFX942-TGSPLIT-LABEL: flat_nontemporal_volatile_load:1230; GFX942-TGSPLIT: ; %bb.0: ; %entry1231; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x01232; GFX942-TGSPLIT-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x81233; GFX942-TGSPLIT-NEXT: s_waitcnt lgkmcnt(0)1234; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[2:3]1235; GFX942-TGSPLIT-NEXT: flat_load_dword v2, v[0:1] sc0 sc11236; GFX942-TGSPLIT-NEXT: s_waitcnt vmcnt(0)1237; GFX942-TGSPLIT-NEXT: v_mov_b64_e32 v[0:1], s[0:1]1238; GFX942-TGSPLIT-NEXT: flat_store_dword v[0:1], v21239; GFX942-TGSPLIT-NEXT: s_endpgm1240;1241; GFX11-WGP-LABEL: flat_nontemporal_volatile_load:1242; GFX11-WGP: ; %bb.0: ; %entry1243; GFX11-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x01244; GFX11-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x81245; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)1246; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s21247; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s31248; GFX11-WGP-NEXT: flat_load_b32 v2, v[0:1] glc dlc1249; GFX11-WGP-NEXT: s_waitcnt vmcnt(0)1250; GFX11-WGP-NEXT: v_mov_b32_e32 v0, s01251; GFX11-WGP-NEXT: v_mov_b32_e32 v1, s11252; GFX11-WGP-NEXT: s_waitcnt lgkmcnt(0)1253; GFX11-WGP-NEXT: flat_store_b32 v[0:1], v21254; GFX11-WGP-NEXT: s_endpgm1255;1256; GFX11-CU-LABEL: flat_nontemporal_volatile_load:1257; GFX11-CU: ; %bb.0: ; %entry1258; GFX11-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x01259; GFX11-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x81260; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)1261; GFX11-CU-NEXT: v_mov_b32_e32 v0, s21262; GFX11-CU-NEXT: v_mov_b32_e32 v1, s31263; GFX11-CU-NEXT: flat_load_b32 v2, v[0:1] glc dlc1264; GFX11-CU-NEXT: s_waitcnt vmcnt(0)1265; GFX11-CU-NEXT: v_mov_b32_e32 v0, s01266; GFX11-CU-NEXT: v_mov_b32_e32 v1, s11267; GFX11-CU-NEXT: s_waitcnt lgkmcnt(0)1268; GFX11-CU-NEXT: flat_store_b32 v[0:1], v21269; GFX11-CU-NEXT: s_endpgm1270;1271; GFX12-WGP-LABEL: flat_nontemporal_volatile_load:1272; GFX12-WGP: ; %bb.0: ; %entry1273; GFX12-WGP-NEXT: s_load_b64 s[2:3], s[4:5], 0x01274; GFX12-WGP-NEXT: s_load_b64 s[0:1], s[4:5], 0x81275; GFX12-WGP-NEXT: s_wait_kmcnt 0x01276; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s21277; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s31278; GFX12-WGP-NEXT: flat_load_b32 v2, v[0:1] th:TH_LOAD_NT scope:SCOPE_SYS1279; GFX12-WGP-NEXT: s_wait_bvhcnt 0x01280; GFX12-WGP-NEXT: s_wait_samplecnt 0x01281; GFX12-WGP-NEXT: s_wait_loadcnt 0x01282; GFX12-WGP-NEXT: v_mov_b32_e32 v0, s01283; GFX12-WGP-NEXT: v_mov_b32_e32 v1, s11284; GFX12-WGP-NEXT: s_wait_dscnt 0x01285; GFX12-WGP-NEXT: flat_store_b32 v[0:1], v21286; GFX12-WGP-NEXT: s_endpgm1287;1288; GFX12-CU-LABEL: flat_nontemporal_volatile_load:1289; GFX12-CU: ; %bb.0: ; %entry1290; GFX12-CU-NEXT: s_load_b64 s[2:3], s[4:5], 0x01291; GFX12-CU-NEXT: s_load_b64 s[0:1], s[4:5], 0x81292; GFX12-CU-NEXT: s_wait_kmcnt 0x01293; GFX12-CU-NEXT: v_mov_b32_e32 v0, s21294; GFX12-CU-NEXT: v_mov_b32_e32 v1, s31295; GFX12-CU-NEXT: flat_load_b32 v2, v[0:1] th:TH_LOAD_NT scope:SCOPE_SYS1296; GFX12-CU-NEXT: s_wait_bvhcnt 0x01297; GFX12-CU-NEXT: s_wait_samplecnt 0x01298; GFX12-CU-NEXT: s_wait_loadcnt 0x01299; GFX12-CU-NEXT: v_mov_b32_e32 v0, s01300; GFX12-CU-NEXT: v_mov_b32_e32 v1, s11301; GFX12-CU-NEXT: s_wait_dscnt 0x01302; GFX12-CU-NEXT: flat_store_b32 v[0:1], v21303; GFX12-CU-NEXT: s_endpgm1304;1305; GFX1250-LABEL: flat_nontemporal_volatile_load:1306; GFX1250: ; %bb.0: ; %entry1307; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 11308; GFX1250-NEXT: v_mov_b32_e32 v0, 01309; GFX1250-NEXT: s_load_b64 s[2:3], s[4:5], 0x01310; GFX1250-NEXT: s_load_b64 s[0:1], s[4:5], 0x81311; GFX1250-NEXT: s_wait_xcnt 0x01312; GFX1250-NEXT: s_wait_kmcnt 0x01313; GFX1250-NEXT: flat_load_b32 v1, v0, s[2:3] th:TH_LOAD_NT scope:SCOPE_SYS1314; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01315; GFX1250-NEXT: flat_store_b32 v0, v1, s[0:1]1316; GFX1250-NEXT: s_endpgm1317 ptr %in, ptr %out) {1318entry:1319 %val = load volatile i32, ptr %in, align 4, !nontemporal !01320 store i32 %val, ptr %out1321 ret void1322}1323 1324!0 = !{i32 1}1325declare i32 @llvm.amdgcn.workitem.id.x()1326