430 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx802 < %s | FileCheck -check-prefixes=GFX802-SDAG %s3; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX1010-SDAG %s4; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1100 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GFX1100-SDAG %s5 6define void @test_writelane_p0(ptr addrspace(1) %out, ptr %src, i32 %src1) {7; GFX802-SDAG-LABEL: test_writelane_p0:8; GFX802-SDAG: ; %bb.0:9; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10; GFX802-SDAG-NEXT: flat_load_dwordx2 v[5:6], v[0:1]11; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v412; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v313; GFX802-SDAG-NEXT: v_readfirstlane_b32 s6, v214; GFX802-SDAG-NEXT: s_mov_b32 m0, s415; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)16; GFX802-SDAG-NEXT: v_writelane_b32 v6, s5, m017; GFX802-SDAG-NEXT: v_writelane_b32 v5, s6, m018; GFX802-SDAG-NEXT: flat_store_dwordx2 v[0:1], v[5:6]19; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)20; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]21;22; GFX1010-SDAG-LABEL: test_writelane_p0:23; GFX1010-SDAG: ; %bb.0:24; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)25; GFX1010-SDAG-NEXT: global_load_dwordx2 v[5:6], v[0:1], off26; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v327; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v428; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s6, v229; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)30; GFX1010-SDAG-NEXT: v_writelane_b32 v6, s4, s531; GFX1010-SDAG-NEXT: v_writelane_b32 v5, s6, s532; GFX1010-SDAG-NEXT: global_store_dwordx2 v[0:1], v[5:6], off33; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]34;35; GFX1100-SDAG-LABEL: test_writelane_p0:36; GFX1100-SDAG: ; %bb.0:37; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)38; GFX1100-SDAG-NEXT: global_load_b64 v[5:6], v[0:1], off39; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v340; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v441; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s2, v242; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)43; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)44; GFX1100-SDAG-NEXT: v_writelane_b32 v6, s0, s145; GFX1100-SDAG-NEXT: v_writelane_b32 v5, s2, s146; GFX1100-SDAG-NEXT: global_store_b64 v[0:1], v[5:6], off47; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]48 %oldval = load ptr, ptr addrspace(1) %out49 %writelane = call ptr @llvm.amdgcn.writelane.p0(ptr %src, i32 %src1, ptr %oldval)50 store ptr %writelane, ptr addrspace(1) %out, align 451 ret void52}53 54define void @test_writelane_v3p0(ptr addrspace(1) %out, <3 x ptr> %src, i32 %src1) {55; GFX802-SDAG-LABEL: test_writelane_v3p0:56; GFX802-SDAG: ; %bb.0:57; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)58; GFX802-SDAG-NEXT: v_add_u32_e32 v13, vcc, 16, v059; GFX802-SDAG-NEXT: flat_load_dwordx4 v[9:12], v[0:1]60; GFX802-SDAG-NEXT: v_addc_u32_e32 v14, vcc, 0, v1, vcc61; GFX802-SDAG-NEXT: flat_load_dwordx2 v[15:16], v[13:14]62; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v863; GFX802-SDAG-NEXT: v_readfirstlane_b32 s7, v564; GFX802-SDAG-NEXT: v_readfirstlane_b32 s8, v465; GFX802-SDAG-NEXT: v_readfirstlane_b32 s9, v366; GFX802-SDAG-NEXT: v_readfirstlane_b32 s10, v267; GFX802-SDAG-NEXT: s_mov_b32 m0, s468; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v769; GFX802-SDAG-NEXT: v_readfirstlane_b32 s6, v670; GFX802-SDAG-NEXT: s_waitcnt vmcnt(1)71; GFX802-SDAG-NEXT: v_writelane_b32 v12, s7, m072; GFX802-SDAG-NEXT: v_writelane_b32 v11, s8, m073; GFX802-SDAG-NEXT: v_writelane_b32 v10, s9, m074; GFX802-SDAG-NEXT: v_writelane_b32 v9, s10, m075; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)76; GFX802-SDAG-NEXT: v_writelane_b32 v16, s5, m077; GFX802-SDAG-NEXT: v_writelane_b32 v15, s6, m078; GFX802-SDAG-NEXT: flat_store_dwordx4 v[0:1], v[9:12]79; GFX802-SDAG-NEXT: flat_store_dwordx2 v[13:14], v[15:16]80; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)81; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]82;83; GFX1010-SDAG-LABEL: test_writelane_v3p0:84; GFX1010-SDAG: ; %bb.0:85; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)86; GFX1010-SDAG-NEXT: s_clause 0x187; GFX1010-SDAG-NEXT: global_load_dwordx2 v[13:14], v[0:1], off offset:1688; GFX1010-SDAG-NEXT: global_load_dwordx4 v[9:12], v[0:1], off89; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v890; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s7, v591; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s8, v492; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s9, v393; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s10, v294; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v795; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s6, v696; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(1)97; GFX1010-SDAG-NEXT: v_writelane_b32 v14, s4, s598; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)99; GFX1010-SDAG-NEXT: v_writelane_b32 v12, s7, s5100; GFX1010-SDAG-NEXT: v_writelane_b32 v11, s8, s5101; GFX1010-SDAG-NEXT: v_writelane_b32 v10, s9, s5102; GFX1010-SDAG-NEXT: v_writelane_b32 v9, s10, s5103; GFX1010-SDAG-NEXT: v_writelane_b32 v13, s6, s5104; GFX1010-SDAG-NEXT: global_store_dwordx4 v[0:1], v[9:12], off105; GFX1010-SDAG-NEXT: global_store_dwordx2 v[0:1], v[13:14], off offset:16106; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]107;108; GFX1100-SDAG-LABEL: test_writelane_v3p0:109; GFX1100-SDAG: ; %bb.0:110; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)111; GFX1100-SDAG-NEXT: s_clause 0x1112; GFX1100-SDAG-NEXT: global_load_b64 v[13:14], v[0:1], off offset:16113; GFX1100-SDAG-NEXT: global_load_b128 v[9:12], v[0:1], off114; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v8115; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s3, v5116; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s4, v4117; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s5, v3118; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s6, v2119; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v7120; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s2, v6121; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(1)122; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)123; GFX1100-SDAG-NEXT: v_writelane_b32 v14, s0, s1124; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)125; GFX1100-SDAG-NEXT: v_writelane_b32 v12, s3, s1126; GFX1100-SDAG-NEXT: v_writelane_b32 v11, s4, s1127; GFX1100-SDAG-NEXT: v_writelane_b32 v10, s5, s1128; GFX1100-SDAG-NEXT: v_writelane_b32 v9, s6, s1129; GFX1100-SDAG-NEXT: v_writelane_b32 v13, s2, s1130; GFX1100-SDAG-NEXT: s_clause 0x1131; GFX1100-SDAG-NEXT: global_store_b128 v[0:1], v[9:12], off132; GFX1100-SDAG-NEXT: global_store_b64 v[0:1], v[13:14], off offset:16133; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]134 %oldval = load <3 x ptr>, ptr addrspace(1) %out135 %writelane = call <3 x ptr> @llvm.amdgcn.writelane.v3p0(<3 x ptr> %src, i32 %src1, <3 x ptr> %oldval)136 store <3 x ptr> %writelane, ptr addrspace(1) %out, align 4137 ret void138}139 140define void @test_writelane_p3(ptr addrspace(1) %out, ptr addrspace(3) %src, i32 %src1) {141; GFX802-SDAG-LABEL: test_writelane_p3:142; GFX802-SDAG: ; %bb.0:143; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)144; GFX802-SDAG-NEXT: flat_load_dword v4, v[0:1]145; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v3146; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v2147; GFX802-SDAG-NEXT: s_mov_b32 m0, s4148; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)149; GFX802-SDAG-NEXT: v_writelane_b32 v4, s5, m0150; GFX802-SDAG-NEXT: flat_store_dword v[0:1], v4151; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)152; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]153;154; GFX1010-SDAG-LABEL: test_writelane_p3:155; GFX1010-SDAG: ; %bb.0:156; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)157; GFX1010-SDAG-NEXT: global_load_dword v4, v[0:1], off158; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v2159; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v3160; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)161; GFX1010-SDAG-NEXT: v_writelane_b32 v4, s4, s5162; GFX1010-SDAG-NEXT: global_store_dword v[0:1], v4, off163; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]164;165; GFX1100-SDAG-LABEL: test_writelane_p3:166; GFX1100-SDAG: ; %bb.0:167; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)168; GFX1100-SDAG-NEXT: global_load_b32 v4, v[0:1], off169; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v2170; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v3171; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)172; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)173; GFX1100-SDAG-NEXT: v_writelane_b32 v4, s0, s1174; GFX1100-SDAG-NEXT: global_store_b32 v[0:1], v4, off175; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]176 %oldval = load ptr addrspace(3), ptr addrspace(1) %out177 %writelane = call ptr addrspace(3) @llvm.amdgcn.writelane.p3(ptr addrspace(3) %src, i32 %src1, ptr addrspace(3) %oldval)178 store ptr addrspace(3) %writelane, ptr addrspace(1) %out, align 4179 ret void180}181 182define void @test_writelane_v3p3(ptr addrspace(1) %out, <3 x ptr addrspace(3)> %src, i32 %src1) {183; GFX802-SDAG-LABEL: test_writelane_v3p3:184; GFX802-SDAG: ; %bb.0:185; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)186; GFX802-SDAG-NEXT: flat_load_dwordx3 v[6:8], v[0:1]187; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v5188; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v4189; GFX802-SDAG-NEXT: v_readfirstlane_b32 s6, v3190; GFX802-SDAG-NEXT: v_readfirstlane_b32 s7, v2191; GFX802-SDAG-NEXT: s_mov_b32 m0, s4192; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)193; GFX802-SDAG-NEXT: v_writelane_b32 v8, s5, m0194; GFX802-SDAG-NEXT: v_writelane_b32 v7, s6, m0195; GFX802-SDAG-NEXT: v_writelane_b32 v6, s7, m0196; GFX802-SDAG-NEXT: flat_store_dwordx3 v[0:1], v[6:8]197; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)198; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]199;200; GFX1010-SDAG-LABEL: test_writelane_v3p3:201; GFX1010-SDAG: ; %bb.0:202; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)203; GFX1010-SDAG-NEXT: global_load_dwordx3 v[6:8], v[0:1], off204; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v4205; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v5206; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s6, v3207; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s7, v2208; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)209; GFX1010-SDAG-NEXT: v_writelane_b32 v8, s4, s5210; GFX1010-SDAG-NEXT: v_writelane_b32 v7, s6, s5211; GFX1010-SDAG-NEXT: v_writelane_b32 v6, s7, s5212; GFX1010-SDAG-NEXT: global_store_dwordx3 v[0:1], v[6:8], off213; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]214;215; GFX1100-SDAG-LABEL: test_writelane_v3p3:216; GFX1100-SDAG: ; %bb.0:217; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)218; GFX1100-SDAG-NEXT: global_load_b96 v[6:8], v[0:1], off219; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v4220; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v5221; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s2, v3222; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s3, v2223; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)224; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)225; GFX1100-SDAG-NEXT: v_writelane_b32 v8, s0, s1226; GFX1100-SDAG-NEXT: v_writelane_b32 v7, s2, s1227; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)228; GFX1100-SDAG-NEXT: v_writelane_b32 v6, s3, s1229; GFX1100-SDAG-NEXT: global_store_b96 v[0:1], v[6:8], off230; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]231 %oldval = load <3 x ptr addrspace(3)>, ptr addrspace(1) %out232 %writelane = call <3 x ptr addrspace(3)> @llvm.amdgcn.writelane.v3p3(<3 x ptr addrspace(3)> %src, i32 %src1, <3 x ptr addrspace(3)> %oldval)233 store <3 x ptr addrspace(3)> %writelane, ptr addrspace(1) %out, align 4234 ret void235}236 237define void @test_writelane_p5(ptr addrspace(1) %out, ptr addrspace(5) %src, i32 %src1) {238; GFX802-SDAG-LABEL: test_writelane_p5:239; GFX802-SDAG: ; %bb.0:240; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)241; GFX802-SDAG-NEXT: flat_load_dword v4, v[0:1]242; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v3243; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v2244; GFX802-SDAG-NEXT: s_mov_b32 m0, s4245; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)246; GFX802-SDAG-NEXT: v_writelane_b32 v4, s5, m0247; GFX802-SDAG-NEXT: flat_store_dword v[0:1], v4248; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)249; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]250;251; GFX1010-SDAG-LABEL: test_writelane_p5:252; GFX1010-SDAG: ; %bb.0:253; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX1010-SDAG-NEXT: global_load_dword v4, v[0:1], off255; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v2256; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v3257; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)258; GFX1010-SDAG-NEXT: v_writelane_b32 v4, s4, s5259; GFX1010-SDAG-NEXT: global_store_dword v[0:1], v4, off260; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]261;262; GFX1100-SDAG-LABEL: test_writelane_p5:263; GFX1100-SDAG: ; %bb.0:264; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)265; GFX1100-SDAG-NEXT: global_load_b32 v4, v[0:1], off266; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v2267; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v3268; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)269; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)270; GFX1100-SDAG-NEXT: v_writelane_b32 v4, s0, s1271; GFX1100-SDAG-NEXT: global_store_b32 v[0:1], v4, off272; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]273 %oldval = load ptr addrspace(5), ptr addrspace(1) %out274 %writelane = call ptr addrspace(5) @llvm.amdgcn.writelane.p5(ptr addrspace(5) %src, i32 %src1, ptr addrspace(5) %oldval)275 store ptr addrspace(5) %writelane, ptr addrspace(1) %out, align 4276 ret void277}278 279define void @test_writelane_v3p5(ptr addrspace(1) %out, <3 x ptr addrspace(5)> %src, i32 %src1) {280; GFX802-SDAG-LABEL: test_writelane_v3p5:281; GFX802-SDAG: ; %bb.0:282; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)283; GFX802-SDAG-NEXT: flat_load_dwordx3 v[6:8], v[0:1]284; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v5285; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v4286; GFX802-SDAG-NEXT: v_readfirstlane_b32 s6, v3287; GFX802-SDAG-NEXT: v_readfirstlane_b32 s7, v2288; GFX802-SDAG-NEXT: s_mov_b32 m0, s4289; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)290; GFX802-SDAG-NEXT: v_writelane_b32 v8, s5, m0291; GFX802-SDAG-NEXT: v_writelane_b32 v7, s6, m0292; GFX802-SDAG-NEXT: v_writelane_b32 v6, s7, m0293; GFX802-SDAG-NEXT: flat_store_dwordx3 v[0:1], v[6:8]294; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)295; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]296;297; GFX1010-SDAG-LABEL: test_writelane_v3p5:298; GFX1010-SDAG: ; %bb.0:299; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)300; GFX1010-SDAG-NEXT: global_load_dwordx3 v[6:8], v[0:1], off301; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v4302; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v5303; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s6, v3304; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s7, v2305; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)306; GFX1010-SDAG-NEXT: v_writelane_b32 v8, s4, s5307; GFX1010-SDAG-NEXT: v_writelane_b32 v7, s6, s5308; GFX1010-SDAG-NEXT: v_writelane_b32 v6, s7, s5309; GFX1010-SDAG-NEXT: global_store_dwordx3 v[0:1], v[6:8], off310; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]311;312; GFX1100-SDAG-LABEL: test_writelane_v3p5:313; GFX1100-SDAG: ; %bb.0:314; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)315; GFX1100-SDAG-NEXT: global_load_b96 v[6:8], v[0:1], off316; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v4317; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v5318; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s2, v3319; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s3, v2320; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)321; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)322; GFX1100-SDAG-NEXT: v_writelane_b32 v8, s0, s1323; GFX1100-SDAG-NEXT: v_writelane_b32 v7, s2, s1324; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)325; GFX1100-SDAG-NEXT: v_writelane_b32 v6, s3, s1326; GFX1100-SDAG-NEXT: global_store_b96 v[0:1], v[6:8], off327; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]328 %oldval = load <3 x ptr addrspace(5)>, ptr addrspace(1) %out329 %writelane = call <3 x ptr addrspace(5)> @llvm.amdgcn.writelane.v3p5(<3 x ptr addrspace(5)> %src, i32 %src1, <3 x ptr addrspace(5)> %oldval)330 store <3 x ptr addrspace(5)> %writelane, ptr addrspace(1) %out, align 4331 ret void332}333 334define void @test_writelane_p6(ptr addrspace(1) %out, ptr addrspace(6) %src, i32 %src1) {335; GFX802-SDAG-LABEL: test_writelane_p6:336; GFX802-SDAG: ; %bb.0:337; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)338; GFX802-SDAG-NEXT: flat_load_dword v4, v[0:1]339; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v3340; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v2341; GFX802-SDAG-NEXT: s_mov_b32 m0, s4342; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)343; GFX802-SDAG-NEXT: v_writelane_b32 v4, s5, m0344; GFX802-SDAG-NEXT: flat_store_dword v[0:1], v4345; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)346; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]347;348; GFX1010-SDAG-LABEL: test_writelane_p6:349; GFX1010-SDAG: ; %bb.0:350; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)351; GFX1010-SDAG-NEXT: global_load_dword v4, v[0:1], off352; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v2353; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v3354; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)355; GFX1010-SDAG-NEXT: v_writelane_b32 v4, s4, s5356; GFX1010-SDAG-NEXT: global_store_dword v[0:1], v4, off357; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]358;359; GFX1100-SDAG-LABEL: test_writelane_p6:360; GFX1100-SDAG: ; %bb.0:361; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)362; GFX1100-SDAG-NEXT: global_load_b32 v4, v[0:1], off363; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v2364; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v3365; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)366; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)367; GFX1100-SDAG-NEXT: v_writelane_b32 v4, s0, s1368; GFX1100-SDAG-NEXT: global_store_b32 v[0:1], v4, off369; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]370 %oldval = load ptr addrspace(6), ptr addrspace(1) %out371 %writelane = call ptr addrspace(6) @llvm.amdgcn.writelane.p6(ptr addrspace(6) %src, i32 %src1, ptr addrspace(6) %oldval)372 store ptr addrspace(6) %writelane, ptr addrspace(1) %out, align 4373 ret void374}375 376define void @test_writelane_v3p6(ptr addrspace(1) %out, <3 x ptr addrspace(6)> %src, i32 %src1) {377; GFX802-SDAG-LABEL: test_writelane_v3p6:378; GFX802-SDAG: ; %bb.0:379; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)380; GFX802-SDAG-NEXT: flat_load_dwordx3 v[6:8], v[0:1]381; GFX802-SDAG-NEXT: v_readfirstlane_b32 s4, v5382; GFX802-SDAG-NEXT: v_readfirstlane_b32 s5, v4383; GFX802-SDAG-NEXT: v_readfirstlane_b32 s6, v3384; GFX802-SDAG-NEXT: v_readfirstlane_b32 s7, v2385; GFX802-SDAG-NEXT: s_mov_b32 m0, s4386; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)387; GFX802-SDAG-NEXT: v_writelane_b32 v8, s5, m0388; GFX802-SDAG-NEXT: v_writelane_b32 v7, s6, m0389; GFX802-SDAG-NEXT: v_writelane_b32 v6, s7, m0390; GFX802-SDAG-NEXT: flat_store_dwordx3 v[0:1], v[6:8]391; GFX802-SDAG-NEXT: s_waitcnt vmcnt(0)392; GFX802-SDAG-NEXT: s_setpc_b64 s[30:31]393;394; GFX1010-SDAG-LABEL: test_writelane_v3p6:395; GFX1010-SDAG: ; %bb.0:396; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)397; GFX1010-SDAG-NEXT: global_load_dwordx3 v[6:8], v[0:1], off398; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s4, v4399; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s5, v5400; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s6, v3401; GFX1010-SDAG-NEXT: v_readfirstlane_b32 s7, v2402; GFX1010-SDAG-NEXT: s_waitcnt vmcnt(0)403; GFX1010-SDAG-NEXT: v_writelane_b32 v8, s4, s5404; GFX1010-SDAG-NEXT: v_writelane_b32 v7, s6, s5405; GFX1010-SDAG-NEXT: v_writelane_b32 v6, s7, s5406; GFX1010-SDAG-NEXT: global_store_dwordx3 v[0:1], v[6:8], off407; GFX1010-SDAG-NEXT: s_setpc_b64 s[30:31]408;409; GFX1100-SDAG-LABEL: test_writelane_v3p6:410; GFX1100-SDAG: ; %bb.0:411; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)412; GFX1100-SDAG-NEXT: global_load_b96 v[6:8], v[0:1], off413; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s0, v4414; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s1, v5415; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s2, v3416; GFX1100-SDAG-NEXT: v_readfirstlane_b32 s3, v2417; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0)418; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)419; GFX1100-SDAG-NEXT: v_writelane_b32 v8, s0, s1420; GFX1100-SDAG-NEXT: v_writelane_b32 v7, s2, s1421; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)422; GFX1100-SDAG-NEXT: v_writelane_b32 v6, s3, s1423; GFX1100-SDAG-NEXT: global_store_b96 v[0:1], v[6:8], off424; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]425 %oldval = load <3 x ptr addrspace(6)>, ptr addrspace(1) %out426 %writelane = call <3 x ptr addrspace(6)> @llvm.amdgcn.writelane.v3p6(<3 x ptr addrspace(6)> %src, i32 %src1, <3 x ptr addrspace(6)> %oldval)427 store <3 x ptr addrspace(6)> %writelane, ptr addrspace(1) %out, align 4428 ret void429}430