498 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GFX1250,GFX1250-SDAG %s3; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 < %s | FileCheck -check-prefixes=GFX1250,GFX1250-GISEL %s4 5define i32 @test_flat_amdgcn_cooperative_atomic_load_32x4B_relaxed(ptr noundef readonly %addr) {6; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_32x4B_relaxed:7; GFX1250: ; %bb.0: ; %entry8; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x09; GFX1250-NEXT: s_wait_kmcnt 0x010; GFX1250-NEXT: flat_load_b32 v0, v[0:1] scope:SCOPE_DEV11; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x012; GFX1250-NEXT: s_set_pc_i64 s[30:31]13entry:14 %0 = tail call i32 @llvm.amdgcn.cooperative.atomic.load.32x4B.p0(ptr %addr, i32 0, metadata !0)15 ret i32 %016}17 18define <2 x i32> @test_flat_amdgcn_cooperative_atomic_load_16x8B_relaxed(ptr noundef readonly %addr) {19; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_16x8B_relaxed:20; GFX1250: ; %bb.0: ; %entry21; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x022; GFX1250-NEXT: s_wait_kmcnt 0x023; GFX1250-NEXT: flat_load_b64 v[0:1], v[0:1] scope:SCOPE_DEV24; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x025; GFX1250-NEXT: s_set_pc_i64 s[30:31]26entry:27 %0 = tail call <2 x i32> @llvm.amdgcn.cooperative.atomic.load.16x8B.p0(ptr %addr, i32 0, metadata !0)28 ret <2 x i32> %029}30 31define <4 x i32> @test_flat_amdgcn_cooperative_atomic_load_8x16B_relaxed(ptr noundef readonly %addr) {32; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_8x16B_relaxed:33; GFX1250: ; %bb.0: ; %entry34; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x035; GFX1250-NEXT: s_wait_kmcnt 0x036; GFX1250-NEXT: flat_load_b128 v[0:3], v[0:1] scope:SCOPE_DEV37; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x038; GFX1250-NEXT: s_set_pc_i64 s[30:31]39entry:40 %0 = tail call <4 x i32> @llvm.amdgcn.cooperative.atomic.load.8x16B.p0(ptr %addr, i32 0, metadata !0)41 ret <4 x i32> %042}43 44define void @test_flat_amdgcn_cooperative_atomic_store_32x4B_relaxed(ptr noundef %addr, i32 noundef %val) {45; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_32x4B_relaxed:46; GFX1250: ; %bb.0: ; %entry47; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x048; GFX1250-NEXT: s_wait_kmcnt 0x049; GFX1250-NEXT: flat_store_b32 v[0:1], v2 scope:SCOPE_DEV50; GFX1250-NEXT: s_wait_dscnt 0x051; GFX1250-NEXT: s_set_pc_i64 s[30:31]52entry:53 tail call void @llvm.amdgcn.cooperative.atomic.store.32x4B.p0(ptr %addr, i32 %val, i32 0, metadata !0)54 ret void55}56 57define void @test_flat_amdgcn_cooperative_atomic_store_16x8B_relaxed(ptr noundef %addr, <2 x i32> noundef %val) {58; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_16x8B_relaxed:59; GFX1250: ; %bb.0: ; %entry60; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x061; GFX1250-NEXT: s_wait_kmcnt 0x062; GFX1250-NEXT: flat_store_b64 v[0:1], v[2:3] scope:SCOPE_DEV63; GFX1250-NEXT: s_wait_dscnt 0x064; GFX1250-NEXT: s_set_pc_i64 s[30:31]65entry:66 tail call void @llvm.amdgcn.cooperative.atomic.store.16x8B.p0(ptr %addr, <2 x i32> %val, i32 0, metadata !0)67 ret void68}69 70define void @test_flat_amdgcn_cooperative_atomic_store_8x16B_relaxed(ptr noundef %addr, <4 x i32> noundef %val) {71; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_8x16B_relaxed:72; GFX1250: ; %bb.0: ; %entry73; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x074; GFX1250-NEXT: s_wait_kmcnt 0x075; GFX1250-NEXT: flat_store_b128 v[0:1], v[2:5] scope:SCOPE_DEV76; GFX1250-NEXT: s_wait_dscnt 0x077; GFX1250-NEXT: s_set_pc_i64 s[30:31]78entry:79 tail call void @llvm.amdgcn.cooperative.atomic.store.8x16B.p0(ptr %addr, <4 x i32> %val, i32 0, metadata !0)80 ret void81}82 83define i32 @test_flat_amdgcn_cooperative_atomic_load_32x4B_acquire(ptr noundef readonly %addr) {84; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_32x4B_acquire:85; GFX1250: ; %bb.0: ; %entry86; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x087; GFX1250-NEXT: s_wait_kmcnt 0x088; GFX1250-NEXT: flat_load_b32 v0, v[0:1] scope:SCOPE_DEV89; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x090; GFX1250-NEXT: s_set_pc_i64 s[30:31]91entry:92 %0 = tail call i32 @llvm.amdgcn.cooperative.atomic.load.32x4B.p0(ptr %addr, i32 2, metadata !0)93 ret i32 %094}95 96define <2 x i32> @test_flat_amdgcn_cooperative_atomic_load_16x8B_acquire(ptr noundef readonly %addr) {97; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_16x8B_acquire:98; GFX1250: ; %bb.0: ; %entry99; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0100; GFX1250-NEXT: s_wait_kmcnt 0x0101; GFX1250-NEXT: flat_load_b64 v[0:1], v[0:1] scope:SCOPE_DEV102; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0103; GFX1250-NEXT: s_set_pc_i64 s[30:31]104entry:105 %0 = tail call <2 x i32> @llvm.amdgcn.cooperative.atomic.load.16x8B.p0(ptr %addr, i32 2, metadata !0)106 ret <2 x i32> %0107}108 109define <4 x i32> @test_flat_amdgcn_cooperative_atomic_load_8x16B_acquire(ptr noundef readonly %addr) {110; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_8x16B_acquire:111; GFX1250: ; %bb.0: ; %entry112; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0113; GFX1250-NEXT: s_wait_kmcnt 0x0114; GFX1250-NEXT: flat_load_b128 v[0:3], v[0:1] scope:SCOPE_DEV115; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0116; GFX1250-NEXT: s_set_pc_i64 s[30:31]117entry:118 %0 = tail call <4 x i32> @llvm.amdgcn.cooperative.atomic.load.8x16B.p0(ptr %addr, i32 2, metadata !0)119 ret <4 x i32> %0120}121 122define void @test_flat_amdgcn_cooperative_atomic_store_32x4B_release(ptr noundef %addr, i32 noundef %val) {123; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_32x4B_release:124; GFX1250: ; %bb.0: ; %entry125; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0126; GFX1250-NEXT: s_wait_kmcnt 0x0127; GFX1250-NEXT: s_wait_storecnt 0x0128; GFX1250-NEXT: flat_store_b32 v[0:1], v2 scope:SCOPE_DEV129; GFX1250-NEXT: s_wait_dscnt 0x0130; GFX1250-NEXT: s_set_pc_i64 s[30:31]131entry:132 tail call void @llvm.amdgcn.cooperative.atomic.store.32x4B.p0(ptr %addr, i32 %val, i32 3, metadata !0)133 ret void134}135 136define void @test_flat_amdgcn_cooperative_atomic_store_16x8B_release(ptr noundef %addr, <2 x i32> noundef %val) {137; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_16x8B_release:138; GFX1250: ; %bb.0: ; %entry139; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0140; GFX1250-NEXT: s_wait_kmcnt 0x0141; GFX1250-NEXT: s_wait_storecnt 0x0142; GFX1250-NEXT: flat_store_b64 v[0:1], v[2:3] scope:SCOPE_DEV143; GFX1250-NEXT: s_wait_dscnt 0x0144; GFX1250-NEXT: s_set_pc_i64 s[30:31]145entry:146 tail call void @llvm.amdgcn.cooperative.atomic.store.16x8B.p0(ptr %addr, <2 x i32> %val, i32 3, metadata !0)147 ret void148}149 150define void @test_flat_amdgcn_cooperative_atomic_store_8x16B_release(ptr noundef %addr, <4 x i32> noundef %val) {151; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_8x16B_release:152; GFX1250: ; %bb.0: ; %entry153; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0154; GFX1250-NEXT: s_wait_kmcnt 0x0155; GFX1250-NEXT: s_wait_storecnt 0x0156; GFX1250-NEXT: flat_store_b128 v[0:1], v[2:5] scope:SCOPE_DEV157; GFX1250-NEXT: s_wait_dscnt 0x0158; GFX1250-NEXT: s_set_pc_i64 s[30:31]159entry:160 tail call void @llvm.amdgcn.cooperative.atomic.store.8x16B.p0(ptr %addr, <4 x i32> %val, i32 3, metadata !0)161 ret void162}163 164define i32 @test_flat_amdgcn_cooperative_atomic_load_32x4B_seq_cst(ptr noundef readonly %addr) {165; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_32x4B_seq_cst:166; GFX1250: ; %bb.0: ; %entry167; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0168; GFX1250-NEXT: s_wait_kmcnt 0x0169; GFX1250-NEXT: s_wait_storecnt 0x0170; GFX1250-NEXT: flat_load_b32 v0, v[0:1] scope:SCOPE_DEV171; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0172; GFX1250-NEXT: s_set_pc_i64 s[30:31]173entry:174 %0 = tail call i32 @llvm.amdgcn.cooperative.atomic.load.32x4B.p0(ptr %addr, i32 5, metadata !0)175 ret i32 %0176}177 178define <2 x i32> @test_flat_amdgcn_cooperative_atomic_load_16x8B_seq_cst(ptr noundef readonly %addr) {179; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_16x8B_seq_cst:180; GFX1250: ; %bb.0: ; %entry181; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0182; GFX1250-NEXT: s_wait_kmcnt 0x0183; GFX1250-NEXT: s_wait_storecnt 0x0184; GFX1250-NEXT: flat_load_b64 v[0:1], v[0:1] scope:SCOPE_DEV185; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0186; GFX1250-NEXT: s_set_pc_i64 s[30:31]187entry:188 %0 = tail call <2 x i32> @llvm.amdgcn.cooperative.atomic.load.16x8B.p0(ptr %addr, i32 5, metadata !0)189 ret <2 x i32> %0190}191 192define <4 x i32> @test_flat_amdgcn_cooperative_atomic_load_8x16B_seq_cst(ptr noundef readonly %addr) {193; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_load_8x16B_seq_cst:194; GFX1250: ; %bb.0: ; %entry195; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0196; GFX1250-NEXT: s_wait_kmcnt 0x0197; GFX1250-NEXT: s_wait_storecnt 0x0198; GFX1250-NEXT: flat_load_b128 v[0:3], v[0:1] scope:SCOPE_DEV199; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0200; GFX1250-NEXT: s_set_pc_i64 s[30:31]201entry:202 %0 = tail call <4 x i32> @llvm.amdgcn.cooperative.atomic.load.8x16B.p0(ptr %addr, i32 5, metadata !0)203 ret <4 x i32> %0204}205 206define void @test_flat_amdgcn_cooperative_atomic_store_32x4B_seq_cst(ptr noundef %addr, i32 noundef %val) {207; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_32x4B_seq_cst:208; GFX1250: ; %bb.0: ; %entry209; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0210; GFX1250-NEXT: s_wait_kmcnt 0x0211; GFX1250-NEXT: s_wait_storecnt 0x0212; GFX1250-NEXT: flat_store_b32 v[0:1], v2 scope:SCOPE_DEV213; GFX1250-NEXT: s_wait_dscnt 0x0214; GFX1250-NEXT: s_set_pc_i64 s[30:31]215entry:216 tail call void @llvm.amdgcn.cooperative.atomic.store.32x4B.p0(ptr %addr, i32 %val, i32 5, metadata !0)217 ret void218}219 220define void @test_flat_amdgcn_cooperative_atomic_store_16x8B_seq_cst(ptr noundef %addr, <2 x i32> noundef %val) {221; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_16x8B_seq_cst:222; GFX1250: ; %bb.0: ; %entry223; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0224; GFX1250-NEXT: s_wait_kmcnt 0x0225; GFX1250-NEXT: s_wait_storecnt 0x0226; GFX1250-NEXT: flat_store_b64 v[0:1], v[2:3] scope:SCOPE_DEV227; GFX1250-NEXT: s_wait_dscnt 0x0228; GFX1250-NEXT: s_set_pc_i64 s[30:31]229entry:230 tail call void @llvm.amdgcn.cooperative.atomic.store.16x8B.p0(ptr %addr, <2 x i32> %val, i32 5, metadata !0)231 ret void232}233 234define void @test_flat_amdgcn_cooperative_atomic_store_8x16B_seq_cst(ptr noundef %addr, <4 x i32> noundef %val) {235; GFX1250-LABEL: test_flat_amdgcn_cooperative_atomic_store_8x16B_seq_cst:236; GFX1250: ; %bb.0: ; %entry237; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0238; GFX1250-NEXT: s_wait_kmcnt 0x0239; GFX1250-NEXT: s_wait_storecnt 0x0240; GFX1250-NEXT: flat_store_b128 v[0:1], v[2:5] scope:SCOPE_DEV241; GFX1250-NEXT: s_wait_dscnt 0x0242; GFX1250-NEXT: s_set_pc_i64 s[30:31]243entry:244 tail call void @llvm.amdgcn.cooperative.atomic.store.8x16B.p0(ptr %addr, <4 x i32> %val, i32 5, metadata !0)245 ret void246}247 248define i32 @test_one_as_flat_amdgcn_cooperative_atomic_load_32x4B_relaxed(ptr noundef readonly %addr) {249; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_32x4B_relaxed:250; GFX1250: ; %bb.0: ; %entry251; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0252; GFX1250-NEXT: s_wait_kmcnt 0x0253; GFX1250-NEXT: flat_load_b32 v0, v[0:1] scope:SCOPE_DEV254; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0255; GFX1250-NEXT: s_set_pc_i64 s[30:31]256entry:257 %0 = tail call i32 @llvm.amdgcn.cooperative.atomic.load.32x4B.p0(ptr %addr, i32 0, metadata !1)258 ret i32 %0259}260 261define <2 x i32> @test_one_as_flat_amdgcn_cooperative_atomic_load_16x8B_relaxed(ptr noundef readonly %addr) {262; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_16x8B_relaxed:263; GFX1250: ; %bb.0: ; %entry264; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0265; GFX1250-NEXT: s_wait_kmcnt 0x0266; GFX1250-NEXT: flat_load_b64 v[0:1], v[0:1] scope:SCOPE_DEV267; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0268; GFX1250-NEXT: s_set_pc_i64 s[30:31]269entry:270 %0 = tail call <2 x i32> @llvm.amdgcn.cooperative.atomic.load.16x8B.p0(ptr %addr, i32 0, metadata !1)271 ret <2 x i32> %0272}273 274define <4 x i32> @test_one_as_flat_amdgcn_cooperative_atomic_load_8x16B_relaxed(ptr noundef readonly %addr) {275; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_8x16B_relaxed:276; GFX1250: ; %bb.0: ; %entry277; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0278; GFX1250-NEXT: s_wait_kmcnt 0x0279; GFX1250-NEXT: flat_load_b128 v[0:3], v[0:1] scope:SCOPE_DEV280; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0281; GFX1250-NEXT: s_set_pc_i64 s[30:31]282entry:283 %0 = tail call <4 x i32> @llvm.amdgcn.cooperative.atomic.load.8x16B.p0(ptr %addr, i32 0, metadata !1)284 ret <4 x i32> %0285}286 287define void @test_one_as_flat_amdgcn_cooperative_atomic_store_32x4B_relaxed(ptr noundef %addr, i32 noundef %val) {288; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_32x4B_relaxed:289; GFX1250: ; %bb.0: ; %entry290; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0291; GFX1250-NEXT: s_wait_kmcnt 0x0292; GFX1250-NEXT: flat_store_b32 v[0:1], v2 scope:SCOPE_DEV293; GFX1250-NEXT: s_wait_dscnt 0x0294; GFX1250-NEXT: s_set_pc_i64 s[30:31]295entry:296 tail call void @llvm.amdgcn.cooperative.atomic.store.32x4B.p0(ptr %addr, i32 %val, i32 0, metadata !1)297 ret void298}299 300define void @test_one_as_flat_amdgcn_cooperative_atomic_store_16x8B_relaxed(ptr noundef %addr, <2 x i32> noundef %val) {301; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_16x8B_relaxed:302; GFX1250: ; %bb.0: ; %entry303; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0304; GFX1250-NEXT: s_wait_kmcnt 0x0305; GFX1250-NEXT: flat_store_b64 v[0:1], v[2:3] scope:SCOPE_DEV306; GFX1250-NEXT: s_wait_dscnt 0x0307; GFX1250-NEXT: s_set_pc_i64 s[30:31]308entry:309 tail call void @llvm.amdgcn.cooperative.atomic.store.16x8B.p0(ptr %addr, <2 x i32> %val, i32 0, metadata !1)310 ret void311}312 313define void @test_one_as_flat_amdgcn_cooperative_atomic_store_8x16B_relaxed(ptr noundef %addr, <4 x i32> noundef %val) {314; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_8x16B_relaxed:315; GFX1250: ; %bb.0: ; %entry316; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0317; GFX1250-NEXT: s_wait_kmcnt 0x0318; GFX1250-NEXT: flat_store_b128 v[0:1], v[2:5] scope:SCOPE_DEV319; GFX1250-NEXT: s_wait_dscnt 0x0320; GFX1250-NEXT: s_set_pc_i64 s[30:31]321entry:322 tail call void @llvm.amdgcn.cooperative.atomic.store.8x16B.p0(ptr %addr, <4 x i32> %val, i32 0, metadata !1)323 ret void324}325 326define i32 @test_one_as_flat_amdgcn_cooperative_atomic_load_32x4B_acquire(ptr noundef readonly %addr) {327; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_32x4B_acquire:328; GFX1250: ; %bb.0: ; %entry329; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0330; GFX1250-NEXT: s_wait_kmcnt 0x0331; GFX1250-NEXT: flat_load_b32 v0, v[0:1] scope:SCOPE_DEV332; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0333; GFX1250-NEXT: s_set_pc_i64 s[30:31]334entry:335 %0 = tail call i32 @llvm.amdgcn.cooperative.atomic.load.32x4B.p0(ptr %addr, i32 2, metadata !1)336 ret i32 %0337}338 339define <2 x i32> @test_one_as_flat_amdgcn_cooperative_atomic_load_16x8B_acquire(ptr noundef readonly %addr) {340; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_16x8B_acquire:341; GFX1250: ; %bb.0: ; %entry342; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0343; GFX1250-NEXT: s_wait_kmcnt 0x0344; GFX1250-NEXT: flat_load_b64 v[0:1], v[0:1] scope:SCOPE_DEV345; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0346; GFX1250-NEXT: s_set_pc_i64 s[30:31]347entry:348 %0 = tail call <2 x i32> @llvm.amdgcn.cooperative.atomic.load.16x8B.p0(ptr %addr, i32 2, metadata !1)349 ret <2 x i32> %0350}351 352define <4 x i32> @test_one_as_flat_amdgcn_cooperative_atomic_load_8x16B_acquire(ptr noundef readonly %addr) {353; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_8x16B_acquire:354; GFX1250: ; %bb.0: ; %entry355; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0356; GFX1250-NEXT: s_wait_kmcnt 0x0357; GFX1250-NEXT: flat_load_b128 v[0:3], v[0:1] scope:SCOPE_DEV358; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0359; GFX1250-NEXT: s_set_pc_i64 s[30:31]360entry:361 %0 = tail call <4 x i32> @llvm.amdgcn.cooperative.atomic.load.8x16B.p0(ptr %addr, i32 2, metadata !1)362 ret <4 x i32> %0363}364 365define void @test_one_as_flat_amdgcn_cooperative_atomic_store_32x4B_release(ptr noundef %addr, i32 noundef %val) {366; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_32x4B_release:367; GFX1250: ; %bb.0: ; %entry368; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0369; GFX1250-NEXT: s_wait_kmcnt 0x0370; GFX1250-NEXT: s_wait_storecnt 0x0371; GFX1250-NEXT: flat_store_b32 v[0:1], v2 scope:SCOPE_DEV372; GFX1250-NEXT: s_wait_dscnt 0x0373; GFX1250-NEXT: s_set_pc_i64 s[30:31]374entry:375 tail call void @llvm.amdgcn.cooperative.atomic.store.32x4B.p0(ptr %addr, i32 %val, i32 3, metadata !1)376 ret void377}378 379define void @test_one_as_flat_amdgcn_cooperative_atomic_store_16x8B_release(ptr noundef %addr, <2 x i32> noundef %val) {380; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_16x8B_release:381; GFX1250: ; %bb.0: ; %entry382; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0383; GFX1250-NEXT: s_wait_kmcnt 0x0384; GFX1250-NEXT: s_wait_storecnt 0x0385; GFX1250-NEXT: flat_store_b64 v[0:1], v[2:3] scope:SCOPE_DEV386; GFX1250-NEXT: s_wait_dscnt 0x0387; GFX1250-NEXT: s_set_pc_i64 s[30:31]388entry:389 tail call void @llvm.amdgcn.cooperative.atomic.store.16x8B.p0(ptr %addr, <2 x i32> %val, i32 3, metadata !1)390 ret void391}392 393define void @test_one_as_flat_amdgcn_cooperative_atomic_store_8x16B_release(ptr noundef %addr, <4 x i32> noundef %val) {394; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_8x16B_release:395; GFX1250: ; %bb.0: ; %entry396; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0397; GFX1250-NEXT: s_wait_kmcnt 0x0398; GFX1250-NEXT: s_wait_storecnt 0x0399; GFX1250-NEXT: flat_store_b128 v[0:1], v[2:5] scope:SCOPE_DEV400; GFX1250-NEXT: s_wait_dscnt 0x0401; GFX1250-NEXT: s_set_pc_i64 s[30:31]402entry:403 tail call void @llvm.amdgcn.cooperative.atomic.store.8x16B.p0(ptr %addr, <4 x i32> %val, i32 3, metadata !1)404 ret void405}406 407define i32 @test_one_as_flat_amdgcn_cooperative_atomic_load_32x4B_seq_cst(ptr noundef readonly %addr) {408; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_32x4B_seq_cst:409; GFX1250: ; %bb.0: ; %entry410; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0411; GFX1250-NEXT: s_wait_kmcnt 0x0412; GFX1250-NEXT: s_wait_storecnt 0x0413; GFX1250-NEXT: flat_load_b32 v0, v[0:1] scope:SCOPE_DEV414; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0415; GFX1250-NEXT: s_set_pc_i64 s[30:31]416entry:417 %0 = tail call i32 @llvm.amdgcn.cooperative.atomic.load.32x4B.p0(ptr %addr, i32 5, metadata !1)418 ret i32 %0419}420 421define <2 x i32> @test_one_as_flat_amdgcn_cooperative_atomic_load_16x8B_seq_cst(ptr noundef readonly %addr) {422; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_16x8B_seq_cst:423; GFX1250: ; %bb.0: ; %entry424; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0425; GFX1250-NEXT: s_wait_kmcnt 0x0426; GFX1250-NEXT: s_wait_storecnt 0x0427; GFX1250-NEXT: flat_load_b64 v[0:1], v[0:1] scope:SCOPE_DEV428; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0429; GFX1250-NEXT: s_set_pc_i64 s[30:31]430entry:431 %0 = tail call <2 x i32> @llvm.amdgcn.cooperative.atomic.load.16x8B.p0(ptr %addr, i32 5, metadata !1)432 ret <2 x i32> %0433}434 435define <4 x i32> @test_one_as_flat_amdgcn_cooperative_atomic_load_8x16B_seq_cst(ptr noundef readonly %addr) {436; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_load_8x16B_seq_cst:437; GFX1250: ; %bb.0: ; %entry438; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0439; GFX1250-NEXT: s_wait_kmcnt 0x0440; GFX1250-NEXT: s_wait_storecnt 0x0441; GFX1250-NEXT: flat_load_b128 v[0:3], v[0:1] scope:SCOPE_DEV442; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0443; GFX1250-NEXT: s_set_pc_i64 s[30:31]444entry:445 %0 = tail call <4 x i32> @llvm.amdgcn.cooperative.atomic.load.8x16B.p0(ptr %addr, i32 5, metadata !1)446 ret <4 x i32> %0447}448 449define void @test_one_as_flat_amdgcn_cooperative_atomic_store_32x4B_seq_cst(ptr noundef %addr, i32 noundef %val) {450; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_32x4B_seq_cst:451; GFX1250: ; %bb.0: ; %entry452; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0453; GFX1250-NEXT: s_wait_kmcnt 0x0454; GFX1250-NEXT: s_wait_storecnt 0x0455; GFX1250-NEXT: flat_store_b32 v[0:1], v2 scope:SCOPE_DEV456; GFX1250-NEXT: s_wait_dscnt 0x0457; GFX1250-NEXT: s_set_pc_i64 s[30:31]458entry:459 tail call void @llvm.amdgcn.cooperative.atomic.store.32x4B.p0(ptr %addr, i32 %val, i32 5, metadata !1)460 ret void461}462 463define void @test_one_as_flat_amdgcn_cooperative_atomic_store_16x8B_seq_cst(ptr noundef %addr, <2 x i32> noundef %val) {464; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_16x8B_seq_cst:465; GFX1250: ; %bb.0: ; %entry466; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0467; GFX1250-NEXT: s_wait_kmcnt 0x0468; GFX1250-NEXT: s_wait_storecnt 0x0469; GFX1250-NEXT: flat_store_b64 v[0:1], v[2:3] scope:SCOPE_DEV470; GFX1250-NEXT: s_wait_dscnt 0x0471; GFX1250-NEXT: s_set_pc_i64 s[30:31]472entry:473 tail call void @llvm.amdgcn.cooperative.atomic.store.16x8B.p0(ptr %addr, <2 x i32> %val, i32 5, metadata !1)474 ret void475}476 477define void @test_one_as_flat_amdgcn_cooperative_atomic_store_8x16B_seq_cst(ptr noundef %addr, <4 x i32> noundef %val) {478; GFX1250-LABEL: test_one_as_flat_amdgcn_cooperative_atomic_store_8x16B_seq_cst:479; GFX1250: ; %bb.0: ; %entry480; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0481; GFX1250-NEXT: s_wait_kmcnt 0x0482; GFX1250-NEXT: s_wait_storecnt 0x0483; GFX1250-NEXT: flat_store_b128 v[0:1], v[2:5] scope:SCOPE_DEV484; GFX1250-NEXT: s_wait_dscnt 0x0485; GFX1250-NEXT: s_set_pc_i64 s[30:31]486entry:487 tail call void @llvm.amdgcn.cooperative.atomic.store.8x16B.p0(ptr %addr, <4 x i32> %val, i32 5, metadata !1)488 ret void489}490 491!0 = !{ !"workgroup" }492!1 = !{ !"workgroup-one-as" }493 494;; GFX1250: {{.*}}495;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:496; GFX1250-GISEL: {{.*}}497; GFX1250-SDAG: {{.*}}498