1773 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=fiji < %s | FileCheck -check-prefix=CHECK-SDAG -enable-var-scope %s3; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=fiji -global-isel -global-isel-abort=2 < %s | FileCheck -check-prefix=CHECK-GISEL -enable-var-scope %s4 5define void @test_readfirstlane_i1(ptr addrspace(1) %out, i1 %src) {6; CHECK-SDAG-LABEL: test_readfirstlane_i1:7; CHECK-SDAG: ; %bb.0:8; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v210; CHECK-SDAG-NEXT: s_and_b32 s4, s4, 111; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s412; CHECK-SDAG-NEXT: flat_store_byte v[0:1], v213; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)14; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]15;16; CHECK-GISEL-LABEL: test_readfirstlane_i1:17; CHECK-GISEL: ; %bb.0:18; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)19; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v220; CHECK-GISEL-NEXT: s_and_b32 s4, s4, 121; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s422; CHECK-GISEL-NEXT: flat_store_byte v[0:1], v223; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)24; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]25 %readfirstlane = call i1 @llvm.amdgcn.readfirstlane.i1(i1 %src)26 store i1 %readfirstlane, ptr addrspace(1) %out, align 427 ret void28}29 30define void @test_readfirstlane_i1_inreg(ptr addrspace(1) %out, i1 inreg %src) {31; CHECK-SDAG-LABEL: test_readfirstlane_i1_inreg:32; CHECK-SDAG: ; %bb.0:33; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; CHECK-SDAG-NEXT: s_and_b32 s4, s16, 135; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s436; CHECK-SDAG-NEXT: flat_store_byte v[0:1], v237; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)38; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]39;40; CHECK-GISEL-LABEL: test_readfirstlane_i1_inreg:41; CHECK-GISEL: ; %bb.0:42; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)43; CHECK-GISEL-NEXT: s_and_b32 s4, s16, 144; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s445; CHECK-GISEL-NEXT: flat_store_byte v[0:1], v246; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)47; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]48 %readfirstlane = call i1 @llvm.amdgcn.readfirstlane.i1(i1 %src)49 store i1 %readfirstlane, ptr addrspace(1) %out, align 450 ret void51}52 53define void @test_readfirstlane_i1_select(ptr addrspace(1) %out, i32 %src, i32 %src1) {54; CHECK-SDAG-LABEL: test_readfirstlane_i1_select:55; CHECK-SDAG: ; %bb.0:56; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)57; CHECK-SDAG-NEXT: v_cmp_lt_u32_e32 vcc, 42, v258; CHECK-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc59; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v460; CHECK-SDAG-NEXT: s_bitcmp1_b32 s4, 061; CHECK-SDAG-NEXT: s_cselect_b64 vcc, -1, 062; CHECK-SDAG-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc63; CHECK-SDAG-NEXT: flat_store_dword v[0:1], v264; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)65; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]66;67; CHECK-GISEL-LABEL: test_readfirstlane_i1_select:68; CHECK-GISEL: ; %bb.0:69; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; CHECK-GISEL-NEXT: v_cmp_lt_u32_e32 vcc, 42, v271; CHECK-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc72; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v473; CHECK-GISEL-NEXT: s_and_b32 s4, 1, s474; CHECK-GISEL-NEXT: v_cmp_ne_u32_e64 vcc, 0, s475; CHECK-GISEL-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc76; CHECK-GISEL-NEXT: flat_store_dword v[0:1], v277; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)78; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]79 %cmp = icmp ugt i32 %src, 4280 %readfirstlane = call i1 @llvm.amdgcn.readfirstlane.i1(i1 %cmp)81 %sel = select i1 %readfirstlane, i32 %src, i32 %src182 store i32 %sel, ptr addrspace(1) %out, align 483 ret void84}85 86define void @test_readfirstlane_i1_load(ptr addrspace(1) %out, ptr addrspace(1) %in) {87; CHECK-SDAG-LABEL: test_readfirstlane_i1_load:88; CHECK-SDAG: ; %bb.0:89; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)90; CHECK-SDAG-NEXT: flat_load_ubyte v2, v[2:3]91; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)92; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v293; CHECK-SDAG-NEXT: s_and_b32 s4, s4, 194; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s495; CHECK-SDAG-NEXT: flat_store_byte v[0:1], v296; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)97; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]98;99; CHECK-GISEL-LABEL: test_readfirstlane_i1_load:100; CHECK-GISEL: ; %bb.0:101; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; CHECK-GISEL-NEXT: flat_load_ubyte v2, v[2:3]103; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)104; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2105; CHECK-GISEL-NEXT: s_and_b32 s4, s4, 1106; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s4107; CHECK-GISEL-NEXT: flat_store_byte v[0:1], v2108; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)109; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]110 %load = load i1, ptr addrspace(1) %in111 %readfirstlane = call i1 @llvm.amdgcn.readfirstlane.i1(i1 %load)112 store i1 %readfirstlane, ptr addrspace(1) %out, align 4113 ret void114}115 116define void @test_readfirstlane_i32(ptr addrspace(1) %out, i32 %src) {117; CHECK-SDAG-LABEL: test_readfirstlane_i32:118; CHECK-SDAG: ; %bb.0:119; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2121; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s4122; CHECK-SDAG-NEXT: flat_store_dword v[0:1], v2123; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)124; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]125;126; CHECK-GISEL-LABEL: test_readfirstlane_i32:127; CHECK-GISEL: ; %bb.0:128; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)129; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2130; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s4131; CHECK-GISEL-NEXT: flat_store_dword v[0:1], v2132; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)133; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]134 %readfirstlane = call i32 @llvm.amdgcn.readfirstlane.i32(i32 %src)135 store i32 %readfirstlane, ptr addrspace(1) %out, align 4136 ret void137}138 139define void @test_readfirstlane_i64(ptr addrspace(1) %out, i64 %src) {140; CHECK-SDAG-LABEL: test_readfirstlane_i64:141; CHECK-SDAG: ; %bb.0:142; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)143; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v3144; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v2145; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s5146; CHECK-SDAG-NEXT: v_mov_b32_e32 v3, s4147; CHECK-SDAG-NEXT: flat_store_dwordx2 v[0:1], v[2:3]148; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)149; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]150;151; CHECK-GISEL-LABEL: test_readfirstlane_i64:152; CHECK-GISEL: ; %bb.0:153; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2155; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3156; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s4157; CHECK-GISEL-NEXT: v_mov_b32_e32 v3, s5158; CHECK-GISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]159; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)160; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]161 %readfirstlane = call i64 @llvm.amdgcn.readfirstlane.i64(i64 %src)162 store i64 %readfirstlane, ptr addrspace(1) %out, align 4163 ret void164}165 166define void @test_readfirstlane_v2i64(ptr addrspace(1) %out, <2 x i64> %src) {167; CHECK-SDAG-LABEL: test_readfirstlane_v2i64:168; CHECK-SDAG: ; %bb.0:169; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)170; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5171; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4172; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3173; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2174; CHECK-SDAG-NEXT: ;;#ASMSTART175; CHECK-SDAG-NEXT: ; use s[4:7]176; CHECK-SDAG-NEXT: ;;#ASMEND177; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]178;179; CHECK-GISEL-LABEL: test_readfirstlane_v2i64:180; CHECK-GISEL: ; %bb.0:181; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)182; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2183; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3184; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4185; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v5186; CHECK-GISEL-NEXT: ;;#ASMSTART187; CHECK-GISEL-NEXT: ; use s[4:7]188; CHECK-GISEL-NEXT: ;;#ASMEND189; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]190 %x = call <2 x i64> @llvm.amdgcn.readfirstlane.v2i64(<2 x i64> %src)191 call void asm sideeffect "; use $0", "s"(<2 x i64> %x)192 ret void193}194 195define void @test_readfirstlane_v3i64(ptr addrspace(1) %out, <3 x i64> %src) {196; CHECK-SDAG-LABEL: test_readfirstlane_v3i64:197; CHECK-SDAG: ; %bb.0:198; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)199; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v7200; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v6201; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5202; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4203; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3204; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2205; CHECK-SDAG-NEXT: ;;#ASMSTART206; CHECK-SDAG-NEXT: ; use s[4:9]207; CHECK-SDAG-NEXT: ;;#ASMEND208; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]209;210; CHECK-GISEL-LABEL: test_readfirstlane_v3i64:211; CHECK-GISEL: ; %bb.0:212; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)213; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2214; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3215; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4216; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v5217; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v6218; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v7219; CHECK-GISEL-NEXT: ;;#ASMSTART220; CHECK-GISEL-NEXT: ; use s[4:9]221; CHECK-GISEL-NEXT: ;;#ASMEND222; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]223 %x = call <3 x i64> @llvm.amdgcn.readfirstlane.v3i64(<3 x i64> %src)224 call void asm sideeffect "; use $0", "s"(<3 x i64> %x)225 ret void226}227 228define void @test_readfirstlane_v4i64(ptr addrspace(1) %out, <4 x i64> %src) {229; CHECK-SDAG-LABEL: test_readfirstlane_v4i64:230; CHECK-SDAG: ; %bb.0:231; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)232; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v9233; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v8234; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v7235; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v6236; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5237; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4238; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3239; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2240; CHECK-SDAG-NEXT: ;;#ASMSTART241; CHECK-SDAG-NEXT: ; use s[4:11]242; CHECK-SDAG-NEXT: ;;#ASMEND243; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]244;245; CHECK-GISEL-LABEL: test_readfirstlane_v4i64:246; CHECK-GISEL: ; %bb.0:247; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)248; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2249; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3250; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4251; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v5252; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v6253; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v7254; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v8255; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v9256; CHECK-GISEL-NEXT: ;;#ASMSTART257; CHECK-GISEL-NEXT: ; use s[4:11]258; CHECK-GISEL-NEXT: ;;#ASMEND259; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]260 %x = call <4 x i64> @llvm.amdgcn.readfirstlane.v4i64(<4 x i64> %src)261 call void asm sideeffect "; use $0", "s"(<4 x i64> %x)262 ret void263}264 265define void @test_readfirstlane_v8i64(ptr addrspace(1) %out, <8 x i64> %src) {266; CHECK-SDAG-LABEL: test_readfirstlane_v8i64:267; CHECK-SDAG: ; %bb.0:268; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)269; CHECK-SDAG-NEXT: v_readfirstlane_b32 s19, v17270; CHECK-SDAG-NEXT: v_readfirstlane_b32 s18, v16271; CHECK-SDAG-NEXT: v_readfirstlane_b32 s17, v15272; CHECK-SDAG-NEXT: v_readfirstlane_b32 s16, v14273; CHECK-SDAG-NEXT: v_readfirstlane_b32 s15, v13274; CHECK-SDAG-NEXT: v_readfirstlane_b32 s14, v12275; CHECK-SDAG-NEXT: v_readfirstlane_b32 s13, v11276; CHECK-SDAG-NEXT: v_readfirstlane_b32 s12, v10277; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v9278; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v8279; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v7280; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v6281; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5282; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4283; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3284; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2285; CHECK-SDAG-NEXT: ;;#ASMSTART286; CHECK-SDAG-NEXT: ; use s[4:19]287; CHECK-SDAG-NEXT: ;;#ASMEND288; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]289;290; CHECK-GISEL-LABEL: test_readfirstlane_v8i64:291; CHECK-GISEL: ; %bb.0:292; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)293; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2294; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3295; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4296; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v5297; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v6298; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v7299; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v8300; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v9301; CHECK-GISEL-NEXT: v_readfirstlane_b32 s12, v10302; CHECK-GISEL-NEXT: v_readfirstlane_b32 s13, v11303; CHECK-GISEL-NEXT: v_readfirstlane_b32 s14, v12304; CHECK-GISEL-NEXT: v_readfirstlane_b32 s15, v13305; CHECK-GISEL-NEXT: v_readfirstlane_b32 s16, v14306; CHECK-GISEL-NEXT: v_readfirstlane_b32 s17, v15307; CHECK-GISEL-NEXT: v_readfirstlane_b32 s18, v16308; CHECK-GISEL-NEXT: v_readfirstlane_b32 s19, v17309; CHECK-GISEL-NEXT: ;;#ASMSTART310; CHECK-GISEL-NEXT: ; use s[4:19]311; CHECK-GISEL-NEXT: ;;#ASMEND312; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]313 %x = call <8 x i64> @llvm.amdgcn.readfirstlane.v8i64(<8 x i64> %src)314 call void asm sideeffect "; use $0", "s"(<8 x i64> %x)315 ret void316}317 318define void @test_readfirstlane_f64(ptr addrspace(1) %out, double %src) {319; CHECK-SDAG-LABEL: test_readfirstlane_f64:320; CHECK-SDAG: ; %bb.0:321; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v3323; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v2324; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s5325; CHECK-SDAG-NEXT: v_mov_b32_e32 v3, s4326; CHECK-SDAG-NEXT: flat_store_dwordx2 v[0:1], v[2:3]327; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)328; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]329;330; CHECK-GISEL-LABEL: test_readfirstlane_f64:331; CHECK-GISEL: ; %bb.0:332; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)333; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2334; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3335; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s4336; CHECK-GISEL-NEXT: v_mov_b32_e32 v3, s5337; CHECK-GISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]338; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)339; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]340 %readfirstlane = call double @llvm.amdgcn.readfirstlane.f64(double %src)341 store double %readfirstlane, ptr addrspace(1) %out, align 4342 ret void343}344 345define amdgpu_kernel void @test_readfirstlane_imm_i32(ptr addrspace(1) %out) {346; CHECK-SDAG-LABEL: test_readfirstlane_imm_i32:347; CHECK-SDAG: ; %bb.0:348; CHECK-SDAG-NEXT: s_mov_b32 s0, 32349; CHECK-SDAG-NEXT: ;;#ASMSTART350; CHECK-SDAG-NEXT: ; use s0351; CHECK-SDAG-NEXT: ;;#ASMEND352; CHECK-SDAG-NEXT: s_endpgm353;354; CHECK-GISEL-LABEL: test_readfirstlane_imm_i32:355; CHECK-GISEL: ; %bb.0:356; CHECK-GISEL-NEXT: s_mov_b32 s0, 32357; CHECK-GISEL-NEXT: ;;#ASMSTART358; CHECK-GISEL-NEXT: ; use s0359; CHECK-GISEL-NEXT: ;;#ASMEND360; CHECK-GISEL-NEXT: s_endpgm361 %readfirstlane = call i32 @llvm.amdgcn.readfirstlane.i32(i32 32)362 call void asm sideeffect "; use $0", "s"(i32 %readfirstlane)363 ret void364}365 366define amdgpu_kernel void @test_readfirstlane_imm_i64(ptr addrspace(1) %out) {367; CHECK-SDAG-LABEL: test_readfirstlane_imm_i64:368; CHECK-SDAG: ; %bb.0:369; CHECK-SDAG-NEXT: s_mov_b64 s[0:1], 32370; CHECK-SDAG-NEXT: ;;#ASMSTART371; CHECK-SDAG-NEXT: ; use s[0:1]372; CHECK-SDAG-NEXT: ;;#ASMEND373; CHECK-SDAG-NEXT: s_endpgm374;375; CHECK-GISEL-LABEL: test_readfirstlane_imm_i64:376; CHECK-GISEL: ; %bb.0:377; CHECK-GISEL-NEXT: s_mov_b64 s[0:1], 32378; CHECK-GISEL-NEXT: ;;#ASMSTART379; CHECK-GISEL-NEXT: ; use s[0:1]380; CHECK-GISEL-NEXT: ;;#ASMEND381; CHECK-GISEL-NEXT: s_endpgm382 %readfirstlane = call i64 @llvm.amdgcn.readfirstlane.i64(i64 32)383 call void asm sideeffect "; use $0", "s"(i64 %readfirstlane)384 ret void385}386 387define amdgpu_kernel void @test_readfirstlane_imm_f64(ptr addrspace(1) %out) {388; CHECK-SDAG-LABEL: test_readfirstlane_imm_f64:389; CHECK-SDAG: ; %bb.0:390; CHECK-SDAG-NEXT: s_mov_b32 s0, 0391; CHECK-SDAG-NEXT: s_mov_b32 s1, 0x40400000392; CHECK-SDAG-NEXT: ;;#ASMSTART393; CHECK-SDAG-NEXT: ; use s[0:1]394; CHECK-SDAG-NEXT: ;;#ASMEND395; CHECK-SDAG-NEXT: s_endpgm396;397; CHECK-GISEL-LABEL: test_readfirstlane_imm_f64:398; CHECK-GISEL: ; %bb.0:399; CHECK-GISEL-NEXT: s_mov_b32 s0, 0400; CHECK-GISEL-NEXT: s_mov_b32 s1, 0x40400000401; CHECK-GISEL-NEXT: ;;#ASMSTART402; CHECK-GISEL-NEXT: ; use s[0:1]403; CHECK-GISEL-NEXT: ;;#ASMEND404; CHECK-GISEL-NEXT: s_endpgm405 %readfirstlane = call double @llvm.amdgcn.readfirstlane.f64(double 32.0)406 call void asm sideeffect "; use $0", "s"(double %readfirstlane)407 ret void408}409 410define amdgpu_kernel void @test_readfirstlane_imm_fold_i32(ptr addrspace(1) %out) {411; CHECK-SDAG-LABEL: test_readfirstlane_imm_fold_i32:412; CHECK-SDAG: ; %bb.0:413; CHECK-SDAG-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0414; CHECK-SDAG-NEXT: s_add_i32 s12, s12, s17415; CHECK-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s13416; CHECK-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8417; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, 32418; CHECK-SDAG-NEXT: s_waitcnt lgkmcnt(0)419; CHECK-SDAG-NEXT: v_mov_b32_e32 v0, s0420; CHECK-SDAG-NEXT: v_mov_b32_e32 v1, s1421; CHECK-SDAG-NEXT: flat_store_dword v[0:1], v2422; CHECK-SDAG-NEXT: s_endpgm423;424; CHECK-GISEL-LABEL: test_readfirstlane_imm_fold_i32:425; CHECK-GISEL: ; %bb.0:426; CHECK-GISEL-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0427; CHECK-GISEL-NEXT: s_add_i32 s12, s12, s17428; CHECK-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s13429; CHECK-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8430; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, 32431; CHECK-GISEL-NEXT: s_waitcnt lgkmcnt(0)432; CHECK-GISEL-NEXT: v_mov_b32_e32 v0, s0433; CHECK-GISEL-NEXT: v_mov_b32_e32 v1, s1434; CHECK-GISEL-NEXT: flat_store_dword v[0:1], v2435; CHECK-GISEL-NEXT: s_endpgm436 %readfirstlane = call i32 @llvm.amdgcn.readfirstlane.i32(i32 32)437 store i32 %readfirstlane, ptr addrspace(1) %out, align 4438 ret void439}440 441define amdgpu_kernel void @test_readfirstlane_imm_fold_i64(ptr addrspace(1) %out) {442; CHECK-SDAG-LABEL: test_readfirstlane_imm_fold_i64:443; CHECK-SDAG: ; %bb.0:444; CHECK-SDAG-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0445; CHECK-SDAG-NEXT: s_add_i32 s12, s12, s17446; CHECK-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s13447; CHECK-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8448; CHECK-SDAG-NEXT: v_mov_b32_e32 v0, 32449; CHECK-SDAG-NEXT: s_waitcnt lgkmcnt(0)450; CHECK-SDAG-NEXT: v_mov_b32_e32 v3, s1451; CHECK-SDAG-NEXT: v_mov_b32_e32 v1, 0452; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s0453; CHECK-SDAG-NEXT: flat_store_dwordx2 v[2:3], v[0:1]454; CHECK-SDAG-NEXT: s_endpgm455;456; CHECK-GISEL-LABEL: test_readfirstlane_imm_fold_i64:457; CHECK-GISEL: ; %bb.0:458; CHECK-GISEL-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0459; CHECK-GISEL-NEXT: s_mov_b64 s[2:3], 32460; CHECK-GISEL-NEXT: s_add_i32 s12, s12, s17461; CHECK-GISEL-NEXT: v_mov_b32_e32 v0, s2462; CHECK-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s13463; CHECK-GISEL-NEXT: s_waitcnt lgkmcnt(0)464; CHECK-GISEL-NEXT: v_mov_b32_e32 v3, s1465; CHECK-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8466; CHECK-GISEL-NEXT: v_mov_b32_e32 v1, s3467; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s0468; CHECK-GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]469; CHECK-GISEL-NEXT: s_endpgm470 %readfirstlane = call i64 @llvm.amdgcn.readfirstlane.i64(i64 32)471 store i64 %readfirstlane, ptr addrspace(1) %out, align 4472 ret void473}474 475define amdgpu_kernel void @test_readfirstlane_imm_fold_f64(ptr addrspace(1) %out) {476; CHECK-SDAG-LABEL: test_readfirstlane_imm_fold_f64:477; CHECK-SDAG: ; %bb.0:478; CHECK-SDAG-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0479; CHECK-SDAG-NEXT: s_add_i32 s12, s12, s17480; CHECK-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s13481; CHECK-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8482; CHECK-SDAG-NEXT: v_mov_b32_e32 v0, 0483; CHECK-SDAG-NEXT: s_waitcnt lgkmcnt(0)484; CHECK-SDAG-NEXT: v_mov_b32_e32 v3, s1485; CHECK-SDAG-NEXT: v_mov_b32_e32 v1, 0x40400000486; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s0487; CHECK-SDAG-NEXT: flat_store_dwordx2 v[2:3], v[0:1]488; CHECK-SDAG-NEXT: s_endpgm489;490; CHECK-GISEL-LABEL: test_readfirstlane_imm_fold_f64:491; CHECK-GISEL: ; %bb.0:492; CHECK-GISEL-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0493; CHECK-GISEL-NEXT: s_mov_b32 s2, 0494; CHECK-GISEL-NEXT: s_add_i32 s12, s12, s17495; CHECK-GISEL-NEXT: s_mov_b32 s3, 0x40400000496; CHECK-GISEL-NEXT: v_mov_b32_e32 v0, s2497; CHECK-GISEL-NEXT: s_waitcnt lgkmcnt(0)498; CHECK-GISEL-NEXT: v_mov_b32_e32 v3, s1499; CHECK-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s13500; CHECK-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8501; CHECK-GISEL-NEXT: v_mov_b32_e32 v1, s3502; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s0503; CHECK-GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]504; CHECK-GISEL-NEXT: s_endpgm505 %readfirstlane = call double @llvm.amdgcn.readfirstlane.f64(double 32.0)506 store double %readfirstlane, ptr addrspace(1) %out, align 4507 ret void508}509 510define amdgpu_kernel void @test_readfirstlane_m0(ptr addrspace(1) %out) {511; CHECK-SDAG-LABEL: test_readfirstlane_m0:512; CHECK-SDAG: ; %bb.0:513; CHECK-SDAG-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0514; CHECK-SDAG-NEXT: s_add_i32 s12, s12, s17515; CHECK-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s13516; CHECK-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8517; CHECK-SDAG-NEXT: ;;#ASMSTART518; CHECK-SDAG-NEXT: s_mov_b32 m0, -1519; CHECK-SDAG-NEXT: ;;#ASMEND520; CHECK-SDAG-NEXT: s_waitcnt lgkmcnt(0)521; CHECK-SDAG-NEXT: v_mov_b32_e32 v0, s0522; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, m0523; CHECK-SDAG-NEXT: v_mov_b32_e32 v1, s1524; CHECK-SDAG-NEXT: flat_store_dword v[0:1], v2525; CHECK-SDAG-NEXT: s_endpgm526;527; CHECK-GISEL-LABEL: test_readfirstlane_m0:528; CHECK-GISEL: ; %bb.0:529; CHECK-GISEL-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0530; CHECK-GISEL-NEXT: s_add_i32 s12, s12, s17531; CHECK-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s13532; CHECK-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8533; CHECK-GISEL-NEXT: ;;#ASMSTART534; CHECK-GISEL-NEXT: s_mov_b32 m0, -1535; CHECK-GISEL-NEXT: ;;#ASMEND536; CHECK-GISEL-NEXT: s_waitcnt lgkmcnt(0)537; CHECK-GISEL-NEXT: v_mov_b32_e32 v0, s0538; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, m0539; CHECK-GISEL-NEXT: v_mov_b32_e32 v1, s1540; CHECK-GISEL-NEXT: flat_store_dword v[0:1], v2541; CHECK-GISEL-NEXT: s_endpgm542 %m0 = call i32 asm "s_mov_b32 m0, -1", "={m0}"()543 %readfirstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %m0)544 store i32 %readfirstlane, ptr addrspace(1) %out, align 4545 ret void546}547 548define amdgpu_kernel void @test_readfirstlane_copy_from_sgpr_i32(ptr addrspace(1) %out) {549; CHECK-SDAG-LABEL: test_readfirstlane_copy_from_sgpr_i32:550; CHECK-SDAG: ; %bb.0:551; CHECK-SDAG-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0552; CHECK-SDAG-NEXT: s_add_i32 s12, s12, s17553; CHECK-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s13554; CHECK-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8555; CHECK-SDAG-NEXT: ;;#ASMSTART556; CHECK-SDAG-NEXT: s_mov_b32 s2, 0557; CHECK-SDAG-NEXT: ;;#ASMEND558; CHECK-SDAG-NEXT: s_waitcnt lgkmcnt(0)559; CHECK-SDAG-NEXT: v_mov_b32_e32 v0, s0560; CHECK-SDAG-NEXT: v_mov_b32_e32 v1, s1561; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s2562; CHECK-SDAG-NEXT: flat_store_dword v[0:1], v2563; CHECK-SDAG-NEXT: s_endpgm564;565; CHECK-GISEL-LABEL: test_readfirstlane_copy_from_sgpr_i32:566; CHECK-GISEL: ; %bb.0:567; CHECK-GISEL-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0568; CHECK-GISEL-NEXT: s_add_i32 s12, s12, s17569; CHECK-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s13570; CHECK-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8571; CHECK-GISEL-NEXT: ;;#ASMSTART572; CHECK-GISEL-NEXT: s_mov_b32 s2, 0573; CHECK-GISEL-NEXT: ;;#ASMEND574; CHECK-GISEL-NEXT: s_waitcnt lgkmcnt(0)575; CHECK-GISEL-NEXT: v_mov_b32_e32 v0, s0576; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s2577; CHECK-GISEL-NEXT: v_mov_b32_e32 v1, s1578; CHECK-GISEL-NEXT: flat_store_dword v[0:1], v2579; CHECK-GISEL-NEXT: s_endpgm580 %sgpr = call i32 asm "s_mov_b32 $0, 0", "=s"()581 %readfirstlane = call i32 @llvm.amdgcn.readfirstlane.i32(i32 %sgpr)582 store i32 %readfirstlane, ptr addrspace(1) %out, align 4583 ret void584}585 586define amdgpu_kernel void @test_readfirstlane_copy_from_sgpr_i64(ptr addrspace(1) %out) {587; CHECK-SDAG-LABEL: test_readfirstlane_copy_from_sgpr_i64:588; CHECK-SDAG: ; %bb.0:589; CHECK-SDAG-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0590; CHECK-SDAG-NEXT: s_add_i32 s12, s12, s17591; CHECK-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s13592; CHECK-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8593; CHECK-SDAG-NEXT: ;;#ASMSTART594; CHECK-SDAG-NEXT: s_mov_b64 s[2:3], 0595; CHECK-SDAG-NEXT: ;;#ASMEND596; CHECK-SDAG-NEXT: s_waitcnt lgkmcnt(0)597; CHECK-SDAG-NEXT: v_mov_b32_e32 v3, s1598; CHECK-SDAG-NEXT: v_mov_b32_e32 v0, s2599; CHECK-SDAG-NEXT: v_mov_b32_e32 v1, s3600; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s0601; CHECK-SDAG-NEXT: flat_store_dwordx2 v[2:3], v[0:1]602; CHECK-SDAG-NEXT: s_endpgm603;604; CHECK-GISEL-LABEL: test_readfirstlane_copy_from_sgpr_i64:605; CHECK-GISEL: ; %bb.0:606; CHECK-GISEL-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0607; CHECK-GISEL-NEXT: s_add_i32 s12, s12, s17608; CHECK-GISEL-NEXT: ;;#ASMSTART609; CHECK-GISEL-NEXT: s_mov_b64 s[2:3], 0610; CHECK-GISEL-NEXT: ;;#ASMEND611; CHECK-GISEL-NEXT: v_mov_b32_e32 v0, s2612; CHECK-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s13613; CHECK-GISEL-NEXT: s_waitcnt lgkmcnt(0)614; CHECK-GISEL-NEXT: v_mov_b32_e32 v3, s1615; CHECK-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8616; CHECK-GISEL-NEXT: v_mov_b32_e32 v1, s3617; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s0618; CHECK-GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]619; CHECK-GISEL-NEXT: s_endpgm620 %sgpr = call i64 asm "s_mov_b64 $0, 0", "=s"()621 %readfirstlane = call i64 @llvm.amdgcn.readfirstlane.i64(i64 %sgpr)622 store i64 %readfirstlane, ptr addrspace(1) %out, align 4623 ret void624}625 626define amdgpu_kernel void @test_readfirstlane_copy_from_sgpr_f64(ptr addrspace(1) %out) {627; CHECK-SDAG-LABEL: test_readfirstlane_copy_from_sgpr_f64:628; CHECK-SDAG: ; %bb.0:629; CHECK-SDAG-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0630; CHECK-SDAG-NEXT: s_add_i32 s12, s12, s17631; CHECK-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s13632; CHECK-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8633; CHECK-SDAG-NEXT: ;;#ASMSTART634; CHECK-SDAG-NEXT: s_mov_b64 s[2:3], 0635; CHECK-SDAG-NEXT: ;;#ASMEND636; CHECK-SDAG-NEXT: s_waitcnt lgkmcnt(0)637; CHECK-SDAG-NEXT: v_mov_b32_e32 v3, s1638; CHECK-SDAG-NEXT: v_mov_b32_e32 v0, s2639; CHECK-SDAG-NEXT: v_mov_b32_e32 v1, s3640; CHECK-SDAG-NEXT: v_mov_b32_e32 v2, s0641; CHECK-SDAG-NEXT: flat_store_dwordx2 v[2:3], v[0:1]642; CHECK-SDAG-NEXT: s_endpgm643;644; CHECK-GISEL-LABEL: test_readfirstlane_copy_from_sgpr_f64:645; CHECK-GISEL: ; %bb.0:646; CHECK-GISEL-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x0647; CHECK-GISEL-NEXT: s_add_i32 s12, s12, s17648; CHECK-GISEL-NEXT: ;;#ASMSTART649; CHECK-GISEL-NEXT: s_mov_b64 s[2:3], 0650; CHECK-GISEL-NEXT: ;;#ASMEND651; CHECK-GISEL-NEXT: v_mov_b32_e32 v0, s2652; CHECK-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s13653; CHECK-GISEL-NEXT: s_waitcnt lgkmcnt(0)654; CHECK-GISEL-NEXT: v_mov_b32_e32 v3, s1655; CHECK-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s12, 8656; CHECK-GISEL-NEXT: v_mov_b32_e32 v1, s3657; CHECK-GISEL-NEXT: v_mov_b32_e32 v2, s0658; CHECK-GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]659; CHECK-GISEL-NEXT: s_endpgm660 %sgpr = call double asm "s_mov_b64 $0, 0", "=s"()661 %readfirstlane = call double @llvm.amdgcn.readfirstlane.f64(double %sgpr)662 store double %readfirstlane, ptr addrspace(1) %out, align 4663 ret void664}665 666define amdgpu_kernel void @test_readfirstlane_fi(ptr addrspace(1) %out) {667; CHECK-SDAG-LABEL: test_readfirstlane_fi:668; CHECK-SDAG: ; %bb.0:669; CHECK-SDAG-NEXT: s_add_u32 s0, s0, s17670; CHECK-SDAG-NEXT: s_addc_u32 s1, s1, 0671; CHECK-SDAG-NEXT: s_mov_b32 s4, 0672; CHECK-SDAG-NEXT: ;;#ASMSTART673; CHECK-SDAG-NEXT: ; use s4674; CHECK-SDAG-NEXT: ;;#ASMEND675; CHECK-SDAG-NEXT: s_endpgm676;677; CHECK-GISEL-LABEL: test_readfirstlane_fi:678; CHECK-GISEL: ; %bb.0:679; CHECK-GISEL-NEXT: s_add_u32 s0, s0, s17680; CHECK-GISEL-NEXT: s_addc_u32 s1, s1, 0681; CHECK-GISEL-NEXT: s_mov_b32 s4, 0682; CHECK-GISEL-NEXT: ;;#ASMSTART683; CHECK-GISEL-NEXT: ; use s4684; CHECK-GISEL-NEXT: ;;#ASMEND685; CHECK-GISEL-NEXT: s_endpgm686 %alloca = alloca i32, addrspace(5)687 %int = ptrtoint ptr addrspace(5) %alloca to i32688 %readfirstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %int)689 call void asm sideeffect "; use $0", "s"(i32 %readfirstlane)690 ret void691}692 693define void @test_readfirstlane_half(ptr addrspace(1) %out, half %src) {694; CHECK-SDAG-LABEL: test_readfirstlane_half:695; CHECK-SDAG: ; %bb.0:696; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2698; CHECK-SDAG-NEXT: ;;#ASMSTART699; CHECK-SDAG-NEXT: ; use s4700; CHECK-SDAG-NEXT: ;;#ASMEND701; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]702;703; CHECK-GISEL-LABEL: test_readfirstlane_half:704; CHECK-GISEL: ; %bb.0:705; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)706; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2707; CHECK-GISEL-NEXT: ;;#ASMSTART708; CHECK-GISEL-NEXT: ; use s4709; CHECK-GISEL-NEXT: ;;#ASMEND710; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]711 %x = call half @llvm.amdgcn.readfirstlane.f16(half %src)712 call void asm sideeffect "; use $0", "s"(half %x)713 ret void714}715 716define void @test_readfirstlane_float(ptr addrspace(1) %out, float %src) {717; CHECK-SDAG-LABEL: test_readfirstlane_float:718; CHECK-SDAG: ; %bb.0:719; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)720; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2721; CHECK-SDAG-NEXT: ;;#ASMSTART722; CHECK-SDAG-NEXT: ; use s4723; CHECK-SDAG-NEXT: ;;#ASMEND724; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]725;726; CHECK-GISEL-LABEL: test_readfirstlane_float:727; CHECK-GISEL: ; %bb.0:728; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)729; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2730; CHECK-GISEL-NEXT: ;;#ASMSTART731; CHECK-GISEL-NEXT: ; use s4732; CHECK-GISEL-NEXT: ;;#ASMEND733; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]734 %x = call float @llvm.amdgcn.readfirstlane.f32(float %src)735 call void asm sideeffect "; use $0", "s"(float %x)736 ret void737}738 739define void @test_readfirstlane_bfloat(ptr addrspace(1) %out, bfloat %src) {740; CHECK-SDAG-LABEL: test_readfirstlane_bfloat:741; CHECK-SDAG: ; %bb.0:742; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)743; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2744; CHECK-SDAG-NEXT: ;;#ASMSTART745; CHECK-SDAG-NEXT: ; use s4746; CHECK-SDAG-NEXT: ;;#ASMEND747; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]748;749; CHECK-GISEL-LABEL: test_readfirstlane_bfloat:750; CHECK-GISEL: ; %bb.0:751; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)752; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2753; CHECK-GISEL-NEXT: ;;#ASMSTART754; CHECK-GISEL-NEXT: ; use s4755; CHECK-GISEL-NEXT: ;;#ASMEND756; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]757 %x = call bfloat @llvm.amdgcn.readfirstlane.bf16(bfloat %src)758 call void asm sideeffect "; use $0", "s"(bfloat %x)759 ret void760}761 762define void @test_readfirstlane_i16(ptr addrspace(1) %out, i16 %src) {763; CHECK-SDAG-LABEL: test_readfirstlane_i16:764; CHECK-SDAG: ; %bb.0:765; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)766; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2767; CHECK-SDAG-NEXT: s_and_b32 s4, s4, 0xffff768; CHECK-SDAG-NEXT: ;;#ASMSTART769; CHECK-SDAG-NEXT: ; use s4770; CHECK-SDAG-NEXT: ;;#ASMEND771; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]772;773; CHECK-GISEL-LABEL: test_readfirstlane_i16:774; CHECK-GISEL: ; %bb.0:775; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)776; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2777; CHECK-GISEL-NEXT: ;;#ASMSTART778; CHECK-GISEL-NEXT: ; use s4779; CHECK-GISEL-NEXT: ;;#ASMEND780; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]781 %x = call i16 @llvm.amdgcn.readfirstlane.i16(i16 %src)782 call void asm sideeffect "; use $0", "s"(i16 %x)783 ret void784}785 786define void @test_readfirstlane_v2f16(ptr addrspace(1) %out, <2 x half> %src) {787; CHECK-SDAG-LABEL: test_readfirstlane_v2f16:788; CHECK-SDAG: ; %bb.0:789; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)790; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2791; CHECK-SDAG-NEXT: ;;#ASMSTART792; CHECK-SDAG-NEXT: ; use s4793; CHECK-SDAG-NEXT: ;;#ASMEND794; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]795;796; CHECK-GISEL-LABEL: test_readfirstlane_v2f16:797; CHECK-GISEL: ; %bb.0:798; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)799; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2800; CHECK-GISEL-NEXT: ;;#ASMSTART801; CHECK-GISEL-NEXT: ; use s4802; CHECK-GISEL-NEXT: ;;#ASMEND803; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]804 %x = call <2 x half> @llvm.amdgcn.readfirstlane.v2f16(<2 x half> %src)805 call void asm sideeffect "; use $0", "s"(<2 x half> %x)806 ret void807}808 809define void @test_readfirstlane_v2f32(ptr addrspace(1) %out, <2 x float> %src) {810; CHECK-SDAG-LABEL: test_readfirstlane_v2f32:811; CHECK-SDAG: ; %bb.0:812; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)813; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3814; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2815; CHECK-SDAG-NEXT: ;;#ASMSTART816; CHECK-SDAG-NEXT: ; use s[4:5]817; CHECK-SDAG-NEXT: ;;#ASMEND818; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]819;820; CHECK-GISEL-LABEL: test_readfirstlane_v2f32:821; CHECK-GISEL: ; %bb.0:822; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)823; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2824; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3825; CHECK-GISEL-NEXT: ;;#ASMSTART826; CHECK-GISEL-NEXT: ; use s[4:5]827; CHECK-GISEL-NEXT: ;;#ASMEND828; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]829 %x = call <2 x float> @llvm.amdgcn.readfirstlane.v2f32(<2 x float> %src)830 call void asm sideeffect "; use $0", "s"(<2 x float> %x)831 ret void832}833 834define void @test_readfirstlane_v3f32(ptr addrspace(1) %out, <3 x float> %src) {835; CHECK-SDAG-LABEL: test_readfirstlane_v3f32:836; CHECK-SDAG: ; %bb.0:837; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)838; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4839; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3840; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2841; CHECK-SDAG-NEXT: ;;#ASMSTART842; CHECK-SDAG-NEXT: ; use s[4:6]843; CHECK-SDAG-NEXT: ;;#ASMEND844; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]845;846; CHECK-GISEL-LABEL: test_readfirstlane_v3f32:847; CHECK-GISEL: ; %bb.0:848; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)849; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2850; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3851; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4852; CHECK-GISEL-NEXT: ;;#ASMSTART853; CHECK-GISEL-NEXT: ; use s[4:6]854; CHECK-GISEL-NEXT: ;;#ASMEND855; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]856 %x = call <3 x float> @llvm.amdgcn.readfirstlane.v3f32(<3 x float> %src)857 call void asm sideeffect "; use $0", "s"(<3 x float> %x)858 ret void859}860 861define void @test_readfirstlane_v4f32(ptr addrspace(1) %out, <4 x float> %src) {862; CHECK-SDAG-LABEL: test_readfirstlane_v4f32:863; CHECK-SDAG: ; %bb.0:864; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)865; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5866; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4867; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3868; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2869; CHECK-SDAG-NEXT: ;;#ASMSTART870; CHECK-SDAG-NEXT: ; use s[4:7]871; CHECK-SDAG-NEXT: ;;#ASMEND872; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]873;874; CHECK-GISEL-LABEL: test_readfirstlane_v4f32:875; CHECK-GISEL: ; %bb.0:876; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)877; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2878; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3879; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4880; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v5881; CHECK-GISEL-NEXT: ;;#ASMSTART882; CHECK-GISEL-NEXT: ; use s[4:7]883; CHECK-GISEL-NEXT: ;;#ASMEND884; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]885 %x = call <4 x float> @llvm.amdgcn.readfirstlane.v4f32(<4 x float> %src)886 call void asm sideeffect "; use $0", "s"(<4 x float> %x)887 ret void888}889 890define void @test_readfirstlane_v8f32(ptr addrspace(1) %out, <8 x float> %src) {891; CHECK-SDAG-LABEL: test_readfirstlane_v8f32:892; CHECK-SDAG: ; %bb.0:893; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)894; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v9895; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v8896; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v7897; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v6898; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5899; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4900; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3901; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2902; CHECK-SDAG-NEXT: ;;#ASMSTART903; CHECK-SDAG-NEXT: ; use s[4:11]904; CHECK-SDAG-NEXT: ;;#ASMEND905; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]906;907; CHECK-GISEL-LABEL: test_readfirstlane_v8f32:908; CHECK-GISEL: ; %bb.0:909; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)910; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2911; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3912; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4913; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v5914; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v6915; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v7916; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v8917; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v9918; CHECK-GISEL-NEXT: ;;#ASMSTART919; CHECK-GISEL-NEXT: ; use s[4:11]920; CHECK-GISEL-NEXT: ;;#ASMEND921; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]922 %x = call <8 x float> @llvm.amdgcn.readfirstlane.v8f32(<8 x float> %src)923 call void asm sideeffect "; use $0", "s"(<8 x float> %x)924 ret void925}926 927define void @test_readfirstlane_v16f32(ptr addrspace(1) %out, <16 x float> %src) {928; CHECK-SDAG-LABEL: test_readfirstlane_v16f32:929; CHECK-SDAG: ; %bb.0:930; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)931; CHECK-SDAG-NEXT: v_readfirstlane_b32 s19, v17932; CHECK-SDAG-NEXT: v_readfirstlane_b32 s18, v16933; CHECK-SDAG-NEXT: v_readfirstlane_b32 s17, v15934; CHECK-SDAG-NEXT: v_readfirstlane_b32 s16, v14935; CHECK-SDAG-NEXT: v_readfirstlane_b32 s15, v13936; CHECK-SDAG-NEXT: v_readfirstlane_b32 s14, v12937; CHECK-SDAG-NEXT: v_readfirstlane_b32 s13, v11938; CHECK-SDAG-NEXT: v_readfirstlane_b32 s12, v10939; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v9940; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v8941; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v7942; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v6943; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5944; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4945; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3946; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2947; CHECK-SDAG-NEXT: ;;#ASMSTART948; CHECK-SDAG-NEXT: ; use s[4:19]949; CHECK-SDAG-NEXT: ;;#ASMEND950; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]951;952; CHECK-GISEL-LABEL: test_readfirstlane_v16f32:953; CHECK-GISEL: ; %bb.0:954; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)955; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v2956; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v3957; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v4958; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v5959; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v6960; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v7961; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v8962; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v9963; CHECK-GISEL-NEXT: v_readfirstlane_b32 s12, v10964; CHECK-GISEL-NEXT: v_readfirstlane_b32 s13, v11965; CHECK-GISEL-NEXT: v_readfirstlane_b32 s14, v12966; CHECK-GISEL-NEXT: v_readfirstlane_b32 s15, v13967; CHECK-GISEL-NEXT: v_readfirstlane_b32 s16, v14968; CHECK-GISEL-NEXT: v_readfirstlane_b32 s17, v15969; CHECK-GISEL-NEXT: v_readfirstlane_b32 s18, v16970; CHECK-GISEL-NEXT: v_readfirstlane_b32 s19, v17971; CHECK-GISEL-NEXT: ;;#ASMSTART972; CHECK-GISEL-NEXT: ; use s[4:19]973; CHECK-GISEL-NEXT: ;;#ASMEND974; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]975 %x = call <16 x float> @llvm.amdgcn.readfirstlane.v16f32(<16 x float> %src)976 call void asm sideeffect "; use $0", "s"(<16 x float> %x)977 ret void978}979 980define void @test_readfirstlane_v32f32(ptr addrspace(1) %out, <32 x float> %src) {981; CHECK-SDAG-LABEL: test_readfirstlane_v32f32:982; CHECK-SDAG: ; %bb.0:983; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)984; CHECK-SDAG-NEXT: s_xor_saveexec_b64 s[4:5], -1985; CHECK-SDAG-NEXT: buffer_store_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill986; CHECK-SDAG-NEXT: s_mov_b64 exec, s[4:5]987; CHECK-SDAG-NEXT: v_readfirstlane_b32 s61, v27988; CHECK-SDAG-NEXT: buffer_load_dword v0, off, s[0:3], s32 offset:8989; CHECK-SDAG-NEXT: buffer_load_dword v1, off, s[0:3], s32 offset:4990; CHECK-SDAG-NEXT: buffer_load_dword v27, off, s[0:3], s32991; CHECK-SDAG-NEXT: v_writelane_b32 v31, s36, 0992; CHECK-SDAG-NEXT: v_writelane_b32 v31, s37, 1993; CHECK-SDAG-NEXT: v_writelane_b32 v31, s38, 2994; CHECK-SDAG-NEXT: v_writelane_b32 v31, s39, 3995; CHECK-SDAG-NEXT: v_writelane_b32 v31, s48, 4996; CHECK-SDAG-NEXT: v_writelane_b32 v31, s49, 5997; CHECK-SDAG-NEXT: v_writelane_b32 v31, s50, 6998; CHECK-SDAG-NEXT: v_writelane_b32 v31, s51, 7999; CHECK-SDAG-NEXT: v_writelane_b32 v31, s52, 81000; CHECK-SDAG-NEXT: v_writelane_b32 v31, s53, 91001; CHECK-SDAG-NEXT: v_writelane_b32 v31, s54, 101002; CHECK-SDAG-NEXT: v_writelane_b32 v31, s55, 111003; CHECK-SDAG-NEXT: v_writelane_b32 v31, s64, 121004; CHECK-SDAG-NEXT: v_writelane_b32 v31, s65, 131005; CHECK-SDAG-NEXT: v_writelane_b32 v31, s66, 141006; CHECK-SDAG-NEXT: v_writelane_b32 v31, s67, 151007; CHECK-SDAG-NEXT: v_readfirstlane_b32 s64, v301008; CHECK-SDAG-NEXT: v_readfirstlane_b32 s55, v211009; CHECK-SDAG-NEXT: v_readfirstlane_b32 s54, v201010; CHECK-SDAG-NEXT: v_readfirstlane_b32 s53, v191011; CHECK-SDAG-NEXT: v_readfirstlane_b32 s52, v181012; CHECK-SDAG-NEXT: v_readfirstlane_b32 s51, v171013; CHECK-SDAG-NEXT: v_readfirstlane_b32 s50, v161014; CHECK-SDAG-NEXT: v_readfirstlane_b32 s49, v151015; CHECK-SDAG-NEXT: v_readfirstlane_b32 s48, v141016; CHECK-SDAG-NEXT: v_readfirstlane_b32 s39, v51017; CHECK-SDAG-NEXT: v_readfirstlane_b32 s38, v41018; CHECK-SDAG-NEXT: v_readfirstlane_b32 s37, v31019; CHECK-SDAG-NEXT: v_readfirstlane_b32 s36, v21020; CHECK-SDAG-NEXT: v_readfirstlane_b32 s63, v291021; CHECK-SDAG-NEXT: v_readfirstlane_b32 s62, v281022; CHECK-SDAG-NEXT: v_readfirstlane_b32 s60, v261023; CHECK-SDAG-NEXT: v_readfirstlane_b32 s59, v251024; CHECK-SDAG-NEXT: v_readfirstlane_b32 s58, v241025; CHECK-SDAG-NEXT: v_readfirstlane_b32 s57, v231026; CHECK-SDAG-NEXT: v_readfirstlane_b32 s56, v221027; CHECK-SDAG-NEXT: v_readfirstlane_b32 s47, v131028; CHECK-SDAG-NEXT: v_readfirstlane_b32 s46, v121029; CHECK-SDAG-NEXT: v_readfirstlane_b32 s45, v111030; CHECK-SDAG-NEXT: v_readfirstlane_b32 s44, v101031; CHECK-SDAG-NEXT: v_readfirstlane_b32 s43, v91032; CHECK-SDAG-NEXT: v_readfirstlane_b32 s42, v81033; CHECK-SDAG-NEXT: v_readfirstlane_b32 s41, v71034; CHECK-SDAG-NEXT: v_readfirstlane_b32 s40, v61035; CHECK-SDAG-NEXT: s_waitcnt vmcnt(2)1036; CHECK-SDAG-NEXT: v_readfirstlane_b32 s67, v01037; CHECK-SDAG-NEXT: s_waitcnt vmcnt(1)1038; CHECK-SDAG-NEXT: v_readfirstlane_b32 s66, v11039; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)1040; CHECK-SDAG-NEXT: v_readfirstlane_b32 s65, v271041; CHECK-SDAG-NEXT: ;;#ASMSTART1042; CHECK-SDAG-NEXT: ; use s[36:67]1043; CHECK-SDAG-NEXT: ;;#ASMEND1044; CHECK-SDAG-NEXT: v_readlane_b32 s67, v31, 151045; CHECK-SDAG-NEXT: v_readlane_b32 s66, v31, 141046; CHECK-SDAG-NEXT: v_readlane_b32 s65, v31, 131047; CHECK-SDAG-NEXT: v_readlane_b32 s64, v31, 121048; CHECK-SDAG-NEXT: v_readlane_b32 s55, v31, 111049; CHECK-SDAG-NEXT: v_readlane_b32 s54, v31, 101050; CHECK-SDAG-NEXT: v_readlane_b32 s53, v31, 91051; CHECK-SDAG-NEXT: v_readlane_b32 s52, v31, 81052; CHECK-SDAG-NEXT: v_readlane_b32 s51, v31, 71053; CHECK-SDAG-NEXT: v_readlane_b32 s50, v31, 61054; CHECK-SDAG-NEXT: v_readlane_b32 s49, v31, 51055; CHECK-SDAG-NEXT: v_readlane_b32 s48, v31, 41056; CHECK-SDAG-NEXT: v_readlane_b32 s39, v31, 31057; CHECK-SDAG-NEXT: v_readlane_b32 s38, v31, 21058; CHECK-SDAG-NEXT: v_readlane_b32 s37, v31, 11059; CHECK-SDAG-NEXT: v_readlane_b32 s36, v31, 01060; CHECK-SDAG-NEXT: s_xor_saveexec_b64 s[4:5], -11061; CHECK-SDAG-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload1062; CHECK-SDAG-NEXT: s_mov_b64 exec, s[4:5]1063; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)1064; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1065;1066; CHECK-GISEL-LABEL: test_readfirstlane_v32f32:1067; CHECK-GISEL: ; %bb.0:1068; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1069; CHECK-GISEL-NEXT: s_xor_saveexec_b64 s[4:5], -11070; CHECK-GISEL-NEXT: buffer_store_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill1071; CHECK-GISEL-NEXT: s_mov_b64 exec, s[4:5]1072; CHECK-GISEL-NEXT: v_writelane_b32 v31, s36, 01073; CHECK-GISEL-NEXT: v_readfirstlane_b32 s36, v21074; CHECK-GISEL-NEXT: buffer_load_dword v0, off, s[0:3], s321075; CHECK-GISEL-NEXT: buffer_load_dword v1, off, s[0:3], s32 offset:41076; CHECK-GISEL-NEXT: buffer_load_dword v2, off, s[0:3], s32 offset:81077; CHECK-GISEL-NEXT: v_writelane_b32 v31, s37, 11078; CHECK-GISEL-NEXT: v_writelane_b32 v31, s38, 21079; CHECK-GISEL-NEXT: v_writelane_b32 v31, s39, 31080; CHECK-GISEL-NEXT: v_writelane_b32 v31, s48, 41081; CHECK-GISEL-NEXT: v_writelane_b32 v31, s49, 51082; CHECK-GISEL-NEXT: v_writelane_b32 v31, s50, 61083; CHECK-GISEL-NEXT: v_writelane_b32 v31, s51, 71084; CHECK-GISEL-NEXT: v_writelane_b32 v31, s52, 81085; CHECK-GISEL-NEXT: v_writelane_b32 v31, s53, 91086; CHECK-GISEL-NEXT: v_writelane_b32 v31, s54, 101087; CHECK-GISEL-NEXT: v_writelane_b32 v31, s55, 111088; CHECK-GISEL-NEXT: v_writelane_b32 v31, s64, 121089; CHECK-GISEL-NEXT: v_writelane_b32 v31, s65, 131090; CHECK-GISEL-NEXT: v_writelane_b32 v31, s66, 141091; CHECK-GISEL-NEXT: v_writelane_b32 v31, s67, 151092; CHECK-GISEL-NEXT: v_readfirstlane_b32 s37, v31093; CHECK-GISEL-NEXT: v_readfirstlane_b32 s38, v41094; CHECK-GISEL-NEXT: v_readfirstlane_b32 s39, v51095; CHECK-GISEL-NEXT: v_readfirstlane_b32 s48, v141096; CHECK-GISEL-NEXT: v_readfirstlane_b32 s49, v151097; CHECK-GISEL-NEXT: v_readfirstlane_b32 s50, v161098; CHECK-GISEL-NEXT: v_readfirstlane_b32 s51, v171099; CHECK-GISEL-NEXT: v_readfirstlane_b32 s52, v181100; CHECK-GISEL-NEXT: v_readfirstlane_b32 s53, v191101; CHECK-GISEL-NEXT: v_readfirstlane_b32 s54, v201102; CHECK-GISEL-NEXT: v_readfirstlane_b32 s55, v211103; CHECK-GISEL-NEXT: v_readfirstlane_b32 s64, v301104; CHECK-GISEL-NEXT: v_readfirstlane_b32 s40, v61105; CHECK-GISEL-NEXT: v_readfirstlane_b32 s41, v71106; CHECK-GISEL-NEXT: v_readfirstlane_b32 s42, v81107; CHECK-GISEL-NEXT: v_readfirstlane_b32 s43, v91108; CHECK-GISEL-NEXT: v_readfirstlane_b32 s44, v101109; CHECK-GISEL-NEXT: v_readfirstlane_b32 s45, v111110; CHECK-GISEL-NEXT: v_readfirstlane_b32 s46, v121111; CHECK-GISEL-NEXT: v_readfirstlane_b32 s47, v131112; CHECK-GISEL-NEXT: v_readfirstlane_b32 s56, v221113; CHECK-GISEL-NEXT: v_readfirstlane_b32 s57, v231114; CHECK-GISEL-NEXT: v_readfirstlane_b32 s58, v241115; CHECK-GISEL-NEXT: v_readfirstlane_b32 s59, v251116; CHECK-GISEL-NEXT: v_readfirstlane_b32 s60, v261117; CHECK-GISEL-NEXT: v_readfirstlane_b32 s61, v271118; CHECK-GISEL-NEXT: v_readfirstlane_b32 s62, v281119; CHECK-GISEL-NEXT: v_readfirstlane_b32 s63, v291120; CHECK-GISEL-NEXT: s_waitcnt vmcnt(2)1121; CHECK-GISEL-NEXT: v_readfirstlane_b32 s65, v01122; CHECK-GISEL-NEXT: s_waitcnt vmcnt(1)1123; CHECK-GISEL-NEXT: v_readfirstlane_b32 s66, v11124; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)1125; CHECK-GISEL-NEXT: v_readfirstlane_b32 s67, v21126; CHECK-GISEL-NEXT: ;;#ASMSTART1127; CHECK-GISEL-NEXT: ; use s[36:67]1128; CHECK-GISEL-NEXT: ;;#ASMEND1129; CHECK-GISEL-NEXT: v_readlane_b32 s67, v31, 151130; CHECK-GISEL-NEXT: v_readlane_b32 s66, v31, 141131; CHECK-GISEL-NEXT: v_readlane_b32 s65, v31, 131132; CHECK-GISEL-NEXT: v_readlane_b32 s64, v31, 121133; CHECK-GISEL-NEXT: v_readlane_b32 s55, v31, 111134; CHECK-GISEL-NEXT: v_readlane_b32 s54, v31, 101135; CHECK-GISEL-NEXT: v_readlane_b32 s53, v31, 91136; CHECK-GISEL-NEXT: v_readlane_b32 s52, v31, 81137; CHECK-GISEL-NEXT: v_readlane_b32 s51, v31, 71138; CHECK-GISEL-NEXT: v_readlane_b32 s50, v31, 61139; CHECK-GISEL-NEXT: v_readlane_b32 s49, v31, 51140; CHECK-GISEL-NEXT: v_readlane_b32 s48, v31, 41141; CHECK-GISEL-NEXT: v_readlane_b32 s39, v31, 31142; CHECK-GISEL-NEXT: v_readlane_b32 s38, v31, 21143; CHECK-GISEL-NEXT: v_readlane_b32 s37, v31, 11144; CHECK-GISEL-NEXT: v_readlane_b32 s36, v31, 01145; CHECK-GISEL-NEXT: s_xor_saveexec_b64 s[4:5], -11146; CHECK-GISEL-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload1147; CHECK-GISEL-NEXT: s_mov_b64 exec, s[4:5]1148; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)1149; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1150 %x = call <32 x float> @llvm.amdgcn.readfirstlane.v32f32(<32 x float> %src)1151 call void asm sideeffect "; use $0", "s"(<32 x float> %x)1152 ret void1153}1154 1155define void @test_readfirstlane_v2i32(ptr addrspace(1) %out, <2 x i32> %src) {1156; CHECK-SDAG-LABEL: test_readfirstlane_v2i32:1157; CHECK-SDAG: ; %bb.0:1158; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1159; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31160; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21161; CHECK-SDAG-NEXT: ;;#ASMSTART1162; CHECK-SDAG-NEXT: ; use s[4:5]1163; CHECK-SDAG-NEXT: ;;#ASMEND1164; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1165;1166; CHECK-GISEL-LABEL: test_readfirstlane_v2i32:1167; CHECK-GISEL: ; %bb.0:1168; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1169; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21170; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31171; CHECK-GISEL-NEXT: ;;#ASMSTART1172; CHECK-GISEL-NEXT: ; use s[4:5]1173; CHECK-GISEL-NEXT: ;;#ASMEND1174; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1175 %x = call <2 x i32> @llvm.amdgcn.readfirstlane.v2i32(<2 x i32> %src)1176 call void asm sideeffect "; use $0", "s"(<2 x i32> %x)1177 ret void1178}1179 1180define void @test_readfirstlane_v3i32(ptr addrspace(1) %out, <3 x i32> %src) {1181; CHECK-SDAG-LABEL: test_readfirstlane_v3i32:1182; CHECK-SDAG: ; %bb.0:1183; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1184; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41185; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31186; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21187; CHECK-SDAG-NEXT: ;;#ASMSTART1188; CHECK-SDAG-NEXT: ; use s[4:6]1189; CHECK-SDAG-NEXT: ;;#ASMEND1190; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1191;1192; CHECK-GISEL-LABEL: test_readfirstlane_v3i32:1193; CHECK-GISEL: ; %bb.0:1194; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1195; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21196; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31197; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41198; CHECK-GISEL-NEXT: ;;#ASMSTART1199; CHECK-GISEL-NEXT: ; use s[4:6]1200; CHECK-GISEL-NEXT: ;;#ASMEND1201; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1202 %x = call <3 x i32> @llvm.amdgcn.readfirstlane.v3i32(<3 x i32> %src)1203 call void asm sideeffect "; use $0", "s"(<3 x i32> %x)1204 ret void1205}1206 1207define void @test_readfirstlane_v4i32(ptr addrspace(1) %out, <4 x i32> %src) {1208; CHECK-SDAG-LABEL: test_readfirstlane_v4i32:1209; CHECK-SDAG: ; %bb.0:1210; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1211; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51212; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41213; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31214; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21215; CHECK-SDAG-NEXT: ;;#ASMSTART1216; CHECK-SDAG-NEXT: ; use s[4:7]1217; CHECK-SDAG-NEXT: ;;#ASMEND1218; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1219;1220; CHECK-GISEL-LABEL: test_readfirstlane_v4i32:1221; CHECK-GISEL: ; %bb.0:1222; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1223; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21224; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31225; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41226; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51227; CHECK-GISEL-NEXT: ;;#ASMSTART1228; CHECK-GISEL-NEXT: ; use s[4:7]1229; CHECK-GISEL-NEXT: ;;#ASMEND1230; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1231 %x = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32(<4 x i32> %src)1232 call void asm sideeffect "; use $0", "s"(<4 x i32> %x)1233 ret void1234}1235 1236define void @test_readfirstlane_v5i32(ptr addrspace(1) %out, <5 x i32> %src) {1237; CHECK-SDAG-LABEL: test_readfirstlane_v5i32:1238; CHECK-SDAG: ; %bb.0:1239; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1240; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61241; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51242; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41243; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31244; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21245; CHECK-SDAG-NEXT: ;;#ASMSTART1246; CHECK-SDAG-NEXT: ; use s[4:8]1247; CHECK-SDAG-NEXT: ;;#ASMEND1248; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1249;1250; CHECK-GISEL-LABEL: test_readfirstlane_v5i32:1251; CHECK-GISEL: ; %bb.0:1252; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1253; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21254; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31255; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41256; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51257; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61258; CHECK-GISEL-NEXT: ;;#ASMSTART1259; CHECK-GISEL-NEXT: ; use s[4:8]1260; CHECK-GISEL-NEXT: ;;#ASMEND1261; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1262 %x = call <5 x i32> @llvm.amdgcn.readfirstlane.v5i32(<5 x i32> %src)1263 call void asm sideeffect "; use $0", "s"(<5 x i32> %x)1264 ret void1265}1266 1267define void @test_readfirstlane_v6i32(ptr addrspace(1) %out, <6 x i32> %src) {1268; CHECK-SDAG-LABEL: test_readfirstlane_v6i32:1269; CHECK-SDAG: ; %bb.0:1270; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1271; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v71272; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61273; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51274; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41275; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31276; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21277; CHECK-SDAG-NEXT: ;;#ASMSTART1278; CHECK-SDAG-NEXT: ; use s[4:9]1279; CHECK-SDAG-NEXT: ;;#ASMEND1280; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1281;1282; CHECK-GISEL-LABEL: test_readfirstlane_v6i32:1283; CHECK-GISEL: ; %bb.0:1284; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1285; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21286; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31287; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41288; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51289; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61290; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v71291; CHECK-GISEL-NEXT: ;;#ASMSTART1292; CHECK-GISEL-NEXT: ; use s[4:9]1293; CHECK-GISEL-NEXT: ;;#ASMEND1294; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1295 %x = call <6 x i32> @llvm.amdgcn.readfirstlane.v6i32(<6 x i32> %src)1296 call void asm sideeffect "; use $0", "s"(<6 x i32> %x)1297 ret void1298}1299 1300define void @test_readfirstlane_v7i32(ptr addrspace(1) %out, <7 x i32> %src) {1301; CHECK-SDAG-LABEL: test_readfirstlane_v7i32:1302; CHECK-SDAG: ; %bb.0:1303; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1304; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v81305; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v71306; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61307; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51308; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41309; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31310; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21311; CHECK-SDAG-NEXT: ;;#ASMSTART1312; CHECK-SDAG-NEXT: ; use s[4:10]1313; CHECK-SDAG-NEXT: ;;#ASMEND1314; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1315;1316; CHECK-GISEL-LABEL: test_readfirstlane_v7i32:1317; CHECK-GISEL: ; %bb.0:1318; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1319; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21320; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31321; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41322; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51323; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61324; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v71325; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v81326; CHECK-GISEL-NEXT: ;;#ASMSTART1327; CHECK-GISEL-NEXT: ; use s[4:10]1328; CHECK-GISEL-NEXT: ;;#ASMEND1329; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1330 %x = call <7 x i32> @llvm.amdgcn.readfirstlane.v7i32(<7 x i32> %src)1331 call void asm sideeffect "; use $0", "s"(<7 x i32> %x)1332 ret void1333}1334 1335define void @test_readfirstlane_v8i32(ptr addrspace(1) %out, <8 x i32> %src) {1336; CHECK-SDAG-LABEL: test_readfirstlane_v8i32:1337; CHECK-SDAG: ; %bb.0:1338; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1339; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v91340; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v81341; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v71342; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61343; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51344; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41345; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31346; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21347; CHECK-SDAG-NEXT: ;;#ASMSTART1348; CHECK-SDAG-NEXT: ; use s[4:11]1349; CHECK-SDAG-NEXT: ;;#ASMEND1350; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1351;1352; CHECK-GISEL-LABEL: test_readfirstlane_v8i32:1353; CHECK-GISEL: ; %bb.0:1354; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1355; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21356; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31357; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41358; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51359; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61360; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v71361; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v81362; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v91363; CHECK-GISEL-NEXT: ;;#ASMSTART1364; CHECK-GISEL-NEXT: ; use s[4:11]1365; CHECK-GISEL-NEXT: ;;#ASMEND1366; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1367 %x = call <8 x i32> @llvm.amdgcn.readfirstlane.v8i32(<8 x i32> %src)1368 call void asm sideeffect "; use $0", "s"(<8 x i32> %x)1369 ret void1370}1371 1372define void @test_readfirstlane_v16i32(ptr addrspace(1) %out, <16 x i32> %src) {1373; CHECK-SDAG-LABEL: test_readfirstlane_v16i32:1374; CHECK-SDAG: ; %bb.0:1375; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1376; CHECK-SDAG-NEXT: v_readfirstlane_b32 s19, v171377; CHECK-SDAG-NEXT: v_readfirstlane_b32 s18, v161378; CHECK-SDAG-NEXT: v_readfirstlane_b32 s17, v151379; CHECK-SDAG-NEXT: v_readfirstlane_b32 s16, v141380; CHECK-SDAG-NEXT: v_readfirstlane_b32 s15, v131381; CHECK-SDAG-NEXT: v_readfirstlane_b32 s14, v121382; CHECK-SDAG-NEXT: v_readfirstlane_b32 s13, v111383; CHECK-SDAG-NEXT: v_readfirstlane_b32 s12, v101384; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v91385; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v81386; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v71387; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61388; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51389; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41390; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31391; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21392; CHECK-SDAG-NEXT: ;;#ASMSTART1393; CHECK-SDAG-NEXT: ; use s[4:19]1394; CHECK-SDAG-NEXT: ;;#ASMEND1395; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1396;1397; CHECK-GISEL-LABEL: test_readfirstlane_v16i32:1398; CHECK-GISEL: ; %bb.0:1399; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1400; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21401; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31402; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41403; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51404; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61405; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v71406; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v81407; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v91408; CHECK-GISEL-NEXT: v_readfirstlane_b32 s12, v101409; CHECK-GISEL-NEXT: v_readfirstlane_b32 s13, v111410; CHECK-GISEL-NEXT: v_readfirstlane_b32 s14, v121411; CHECK-GISEL-NEXT: v_readfirstlane_b32 s15, v131412; CHECK-GISEL-NEXT: v_readfirstlane_b32 s16, v141413; CHECK-GISEL-NEXT: v_readfirstlane_b32 s17, v151414; CHECK-GISEL-NEXT: v_readfirstlane_b32 s18, v161415; CHECK-GISEL-NEXT: v_readfirstlane_b32 s19, v171416; CHECK-GISEL-NEXT: ;;#ASMSTART1417; CHECK-GISEL-NEXT: ; use s[4:19]1418; CHECK-GISEL-NEXT: ;;#ASMEND1419; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1420 %x = call <16 x i32> @llvm.amdgcn.readfirstlane.v16i32(<16 x i32> %src)1421 call void asm sideeffect "; use $0", "s"(<16 x i32> %x)1422 ret void1423}1424 1425define void @test_readfirstlane_v32i32(ptr addrspace(1) %out, <32 x i32> %src) {1426; CHECK-SDAG-LABEL: test_readfirstlane_v32i32:1427; CHECK-SDAG: ; %bb.0:1428; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1429; CHECK-SDAG-NEXT: s_xor_saveexec_b64 s[4:5], -11430; CHECK-SDAG-NEXT: buffer_store_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill1431; CHECK-SDAG-NEXT: s_mov_b64 exec, s[4:5]1432; CHECK-SDAG-NEXT: v_readfirstlane_b32 s61, v271433; CHECK-SDAG-NEXT: buffer_load_dword v0, off, s[0:3], s32 offset:81434; CHECK-SDAG-NEXT: buffer_load_dword v1, off, s[0:3], s32 offset:41435; CHECK-SDAG-NEXT: buffer_load_dword v27, off, s[0:3], s321436; CHECK-SDAG-NEXT: v_writelane_b32 v31, s36, 01437; CHECK-SDAG-NEXT: v_writelane_b32 v31, s37, 11438; CHECK-SDAG-NEXT: v_writelane_b32 v31, s38, 21439; CHECK-SDAG-NEXT: v_writelane_b32 v31, s39, 31440; CHECK-SDAG-NEXT: v_writelane_b32 v31, s48, 41441; CHECK-SDAG-NEXT: v_writelane_b32 v31, s49, 51442; CHECK-SDAG-NEXT: v_writelane_b32 v31, s50, 61443; CHECK-SDAG-NEXT: v_writelane_b32 v31, s51, 71444; CHECK-SDAG-NEXT: v_writelane_b32 v31, s52, 81445; CHECK-SDAG-NEXT: v_writelane_b32 v31, s53, 91446; CHECK-SDAG-NEXT: v_writelane_b32 v31, s54, 101447; CHECK-SDAG-NEXT: v_writelane_b32 v31, s55, 111448; CHECK-SDAG-NEXT: v_writelane_b32 v31, s64, 121449; CHECK-SDAG-NEXT: v_writelane_b32 v31, s65, 131450; CHECK-SDAG-NEXT: v_writelane_b32 v31, s66, 141451; CHECK-SDAG-NEXT: v_writelane_b32 v31, s67, 151452; CHECK-SDAG-NEXT: v_readfirstlane_b32 s64, v301453; CHECK-SDAG-NEXT: v_readfirstlane_b32 s55, v211454; CHECK-SDAG-NEXT: v_readfirstlane_b32 s54, v201455; CHECK-SDAG-NEXT: v_readfirstlane_b32 s53, v191456; CHECK-SDAG-NEXT: v_readfirstlane_b32 s52, v181457; CHECK-SDAG-NEXT: v_readfirstlane_b32 s51, v171458; CHECK-SDAG-NEXT: v_readfirstlane_b32 s50, v161459; CHECK-SDAG-NEXT: v_readfirstlane_b32 s49, v151460; CHECK-SDAG-NEXT: v_readfirstlane_b32 s48, v141461; CHECK-SDAG-NEXT: v_readfirstlane_b32 s39, v51462; CHECK-SDAG-NEXT: v_readfirstlane_b32 s38, v41463; CHECK-SDAG-NEXT: v_readfirstlane_b32 s37, v31464; CHECK-SDAG-NEXT: v_readfirstlane_b32 s36, v21465; CHECK-SDAG-NEXT: v_readfirstlane_b32 s63, v291466; CHECK-SDAG-NEXT: v_readfirstlane_b32 s62, v281467; CHECK-SDAG-NEXT: v_readfirstlane_b32 s60, v261468; CHECK-SDAG-NEXT: v_readfirstlane_b32 s59, v251469; CHECK-SDAG-NEXT: v_readfirstlane_b32 s58, v241470; CHECK-SDAG-NEXT: v_readfirstlane_b32 s57, v231471; CHECK-SDAG-NEXT: v_readfirstlane_b32 s56, v221472; CHECK-SDAG-NEXT: v_readfirstlane_b32 s47, v131473; CHECK-SDAG-NEXT: v_readfirstlane_b32 s46, v121474; CHECK-SDAG-NEXT: v_readfirstlane_b32 s45, v111475; CHECK-SDAG-NEXT: v_readfirstlane_b32 s44, v101476; CHECK-SDAG-NEXT: v_readfirstlane_b32 s43, v91477; CHECK-SDAG-NEXT: v_readfirstlane_b32 s42, v81478; CHECK-SDAG-NEXT: v_readfirstlane_b32 s41, v71479; CHECK-SDAG-NEXT: v_readfirstlane_b32 s40, v61480; CHECK-SDAG-NEXT: s_waitcnt vmcnt(2)1481; CHECK-SDAG-NEXT: v_readfirstlane_b32 s67, v01482; CHECK-SDAG-NEXT: s_waitcnt vmcnt(1)1483; CHECK-SDAG-NEXT: v_readfirstlane_b32 s66, v11484; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)1485; CHECK-SDAG-NEXT: v_readfirstlane_b32 s65, v271486; CHECK-SDAG-NEXT: ;;#ASMSTART1487; CHECK-SDAG-NEXT: ; use s[36:67]1488; CHECK-SDAG-NEXT: ;;#ASMEND1489; CHECK-SDAG-NEXT: v_readlane_b32 s67, v31, 151490; CHECK-SDAG-NEXT: v_readlane_b32 s66, v31, 141491; CHECK-SDAG-NEXT: v_readlane_b32 s65, v31, 131492; CHECK-SDAG-NEXT: v_readlane_b32 s64, v31, 121493; CHECK-SDAG-NEXT: v_readlane_b32 s55, v31, 111494; CHECK-SDAG-NEXT: v_readlane_b32 s54, v31, 101495; CHECK-SDAG-NEXT: v_readlane_b32 s53, v31, 91496; CHECK-SDAG-NEXT: v_readlane_b32 s52, v31, 81497; CHECK-SDAG-NEXT: v_readlane_b32 s51, v31, 71498; CHECK-SDAG-NEXT: v_readlane_b32 s50, v31, 61499; CHECK-SDAG-NEXT: v_readlane_b32 s49, v31, 51500; CHECK-SDAG-NEXT: v_readlane_b32 s48, v31, 41501; CHECK-SDAG-NEXT: v_readlane_b32 s39, v31, 31502; CHECK-SDAG-NEXT: v_readlane_b32 s38, v31, 21503; CHECK-SDAG-NEXT: v_readlane_b32 s37, v31, 11504; CHECK-SDAG-NEXT: v_readlane_b32 s36, v31, 01505; CHECK-SDAG-NEXT: s_xor_saveexec_b64 s[4:5], -11506; CHECK-SDAG-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload1507; CHECK-SDAG-NEXT: s_mov_b64 exec, s[4:5]1508; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0)1509; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1510;1511; CHECK-GISEL-LABEL: test_readfirstlane_v32i32:1512; CHECK-GISEL: ; %bb.0:1513; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1514; CHECK-GISEL-NEXT: s_xor_saveexec_b64 s[4:5], -11515; CHECK-GISEL-NEXT: buffer_store_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill1516; CHECK-GISEL-NEXT: s_mov_b64 exec, s[4:5]1517; CHECK-GISEL-NEXT: v_writelane_b32 v31, s36, 01518; CHECK-GISEL-NEXT: v_readfirstlane_b32 s36, v21519; CHECK-GISEL-NEXT: buffer_load_dword v0, off, s[0:3], s321520; CHECK-GISEL-NEXT: buffer_load_dword v1, off, s[0:3], s32 offset:41521; CHECK-GISEL-NEXT: buffer_load_dword v2, off, s[0:3], s32 offset:81522; CHECK-GISEL-NEXT: v_writelane_b32 v31, s37, 11523; CHECK-GISEL-NEXT: v_writelane_b32 v31, s38, 21524; CHECK-GISEL-NEXT: v_writelane_b32 v31, s39, 31525; CHECK-GISEL-NEXT: v_writelane_b32 v31, s48, 41526; CHECK-GISEL-NEXT: v_writelane_b32 v31, s49, 51527; CHECK-GISEL-NEXT: v_writelane_b32 v31, s50, 61528; CHECK-GISEL-NEXT: v_writelane_b32 v31, s51, 71529; CHECK-GISEL-NEXT: v_writelane_b32 v31, s52, 81530; CHECK-GISEL-NEXT: v_writelane_b32 v31, s53, 91531; CHECK-GISEL-NEXT: v_writelane_b32 v31, s54, 101532; CHECK-GISEL-NEXT: v_writelane_b32 v31, s55, 111533; CHECK-GISEL-NEXT: v_writelane_b32 v31, s64, 121534; CHECK-GISEL-NEXT: v_writelane_b32 v31, s65, 131535; CHECK-GISEL-NEXT: v_writelane_b32 v31, s66, 141536; CHECK-GISEL-NEXT: v_writelane_b32 v31, s67, 151537; CHECK-GISEL-NEXT: v_readfirstlane_b32 s37, v31538; CHECK-GISEL-NEXT: v_readfirstlane_b32 s38, v41539; CHECK-GISEL-NEXT: v_readfirstlane_b32 s39, v51540; CHECK-GISEL-NEXT: v_readfirstlane_b32 s48, v141541; CHECK-GISEL-NEXT: v_readfirstlane_b32 s49, v151542; CHECK-GISEL-NEXT: v_readfirstlane_b32 s50, v161543; CHECK-GISEL-NEXT: v_readfirstlane_b32 s51, v171544; CHECK-GISEL-NEXT: v_readfirstlane_b32 s52, v181545; CHECK-GISEL-NEXT: v_readfirstlane_b32 s53, v191546; CHECK-GISEL-NEXT: v_readfirstlane_b32 s54, v201547; CHECK-GISEL-NEXT: v_readfirstlane_b32 s55, v211548; CHECK-GISEL-NEXT: v_readfirstlane_b32 s64, v301549; CHECK-GISEL-NEXT: v_readfirstlane_b32 s40, v61550; CHECK-GISEL-NEXT: v_readfirstlane_b32 s41, v71551; CHECK-GISEL-NEXT: v_readfirstlane_b32 s42, v81552; CHECK-GISEL-NEXT: v_readfirstlane_b32 s43, v91553; CHECK-GISEL-NEXT: v_readfirstlane_b32 s44, v101554; CHECK-GISEL-NEXT: v_readfirstlane_b32 s45, v111555; CHECK-GISEL-NEXT: v_readfirstlane_b32 s46, v121556; CHECK-GISEL-NEXT: v_readfirstlane_b32 s47, v131557; CHECK-GISEL-NEXT: v_readfirstlane_b32 s56, v221558; CHECK-GISEL-NEXT: v_readfirstlane_b32 s57, v231559; CHECK-GISEL-NEXT: v_readfirstlane_b32 s58, v241560; CHECK-GISEL-NEXT: v_readfirstlane_b32 s59, v251561; CHECK-GISEL-NEXT: v_readfirstlane_b32 s60, v261562; CHECK-GISEL-NEXT: v_readfirstlane_b32 s61, v271563; CHECK-GISEL-NEXT: v_readfirstlane_b32 s62, v281564; CHECK-GISEL-NEXT: v_readfirstlane_b32 s63, v291565; CHECK-GISEL-NEXT: s_waitcnt vmcnt(2)1566; CHECK-GISEL-NEXT: v_readfirstlane_b32 s65, v01567; CHECK-GISEL-NEXT: s_waitcnt vmcnt(1)1568; CHECK-GISEL-NEXT: v_readfirstlane_b32 s66, v11569; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)1570; CHECK-GISEL-NEXT: v_readfirstlane_b32 s67, v21571; CHECK-GISEL-NEXT: ;;#ASMSTART1572; CHECK-GISEL-NEXT: ; use s[36:67]1573; CHECK-GISEL-NEXT: ;;#ASMEND1574; CHECK-GISEL-NEXT: v_readlane_b32 s67, v31, 151575; CHECK-GISEL-NEXT: v_readlane_b32 s66, v31, 141576; CHECK-GISEL-NEXT: v_readlane_b32 s65, v31, 131577; CHECK-GISEL-NEXT: v_readlane_b32 s64, v31, 121578; CHECK-GISEL-NEXT: v_readlane_b32 s55, v31, 111579; CHECK-GISEL-NEXT: v_readlane_b32 s54, v31, 101580; CHECK-GISEL-NEXT: v_readlane_b32 s53, v31, 91581; CHECK-GISEL-NEXT: v_readlane_b32 s52, v31, 81582; CHECK-GISEL-NEXT: v_readlane_b32 s51, v31, 71583; CHECK-GISEL-NEXT: v_readlane_b32 s50, v31, 61584; CHECK-GISEL-NEXT: v_readlane_b32 s49, v31, 51585; CHECK-GISEL-NEXT: v_readlane_b32 s48, v31, 41586; CHECK-GISEL-NEXT: v_readlane_b32 s39, v31, 31587; CHECK-GISEL-NEXT: v_readlane_b32 s38, v31, 21588; CHECK-GISEL-NEXT: v_readlane_b32 s37, v31, 11589; CHECK-GISEL-NEXT: v_readlane_b32 s36, v31, 01590; CHECK-GISEL-NEXT: s_xor_saveexec_b64 s[4:5], -11591; CHECK-GISEL-NEXT: buffer_load_dword v31, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload1592; CHECK-GISEL-NEXT: s_mov_b64 exec, s[4:5]1593; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0)1594; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1595 %x = call <32 x i32> @llvm.amdgcn.readfirstlane.v32i32(<32 x i32> %src)1596 call void asm sideeffect "; use $0", "s"(<32 x i32> %x)1597 ret void1598}1599 1600define void @test_readfirstlane_v8i16(ptr addrspace(1) %out, <8 x i16> %src) {1601; CHECK-SDAG-LABEL: test_readfirstlane_v8i16:1602; CHECK-SDAG: ; %bb.0:1603; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1604; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51605; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41606; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31607; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21608; CHECK-SDAG-NEXT: ;;#ASMSTART1609; CHECK-SDAG-NEXT: ; use s[4:7]1610; CHECK-SDAG-NEXT: ;;#ASMEND1611; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1612;1613; CHECK-GISEL-LABEL: test_readfirstlane_v8i16:1614; CHECK-GISEL: ; %bb.0:1615; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1616; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21617; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31618; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41619; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51620; CHECK-GISEL-NEXT: ;;#ASMSTART1621; CHECK-GISEL-NEXT: ; use s[4:7]1622; CHECK-GISEL-NEXT: ;;#ASMEND1623; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1624 %x = call <8 x i16> @llvm.amdgcn.readfirstlane.v8i16(<8 x i16> %src)1625 call void asm sideeffect "; use $0", "s"(<8 x i16> %x)1626 ret void1627}1628 1629define void @test_readfirstlane_v16i16(ptr addrspace(1) %out, <16 x i16> %src) {1630; CHECK-SDAG-LABEL: test_readfirstlane_v16i16:1631; CHECK-SDAG: ; %bb.0:1632; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1633; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v91634; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v81635; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v71636; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61637; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51638; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41639; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31640; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21641; CHECK-SDAG-NEXT: ;;#ASMSTART1642; CHECK-SDAG-NEXT: ; use s[4:11]1643; CHECK-SDAG-NEXT: ;;#ASMEND1644; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1645;1646; CHECK-GISEL-LABEL: test_readfirstlane_v16i16:1647; CHECK-GISEL: ; %bb.0:1648; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1649; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21650; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31651; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41652; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51653; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61654; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v71655; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v81656; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v91657; CHECK-GISEL-NEXT: ;;#ASMSTART1658; CHECK-GISEL-NEXT: ; use s[4:11]1659; CHECK-GISEL-NEXT: ;;#ASMEND1660; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1661 %x = call <16 x i16> @llvm.amdgcn.readfirstlane.v16i16(<16 x i16> %src)1662 call void asm sideeffect "; use $0", "s"(<16 x i16> %x)1663 ret void1664}1665 1666define void @test_readfirstlane_v32i16(ptr addrspace(1) %out, <32 x i16> %src) {1667; CHECK-SDAG-LABEL: test_readfirstlane_v32i16:1668; CHECK-SDAG: ; %bb.0:1669; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1670; CHECK-SDAG-NEXT: v_readfirstlane_b32 s19, v171671; CHECK-SDAG-NEXT: v_readfirstlane_b32 s18, v161672; CHECK-SDAG-NEXT: v_readfirstlane_b32 s17, v151673; CHECK-SDAG-NEXT: v_readfirstlane_b32 s16, v141674; CHECK-SDAG-NEXT: v_readfirstlane_b32 s15, v131675; CHECK-SDAG-NEXT: v_readfirstlane_b32 s14, v121676; CHECK-SDAG-NEXT: v_readfirstlane_b32 s13, v111677; CHECK-SDAG-NEXT: v_readfirstlane_b32 s12, v101678; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v91679; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v81680; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v71681; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61682; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51683; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41684; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31685; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21686; CHECK-SDAG-NEXT: ;;#ASMSTART1687; CHECK-SDAG-NEXT: ; use s[4:19]1688; CHECK-SDAG-NEXT: ;;#ASMEND1689; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1690;1691; CHECK-GISEL-LABEL: test_readfirstlane_v32i16:1692; CHECK-GISEL: ; %bb.0:1693; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1694; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21695; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31696; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41697; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51698; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61699; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v71700; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v81701; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v91702; CHECK-GISEL-NEXT: v_readfirstlane_b32 s12, v101703; CHECK-GISEL-NEXT: v_readfirstlane_b32 s13, v111704; CHECK-GISEL-NEXT: v_readfirstlane_b32 s14, v121705; CHECK-GISEL-NEXT: v_readfirstlane_b32 s15, v131706; CHECK-GISEL-NEXT: v_readfirstlane_b32 s16, v141707; CHECK-GISEL-NEXT: v_readfirstlane_b32 s17, v151708; CHECK-GISEL-NEXT: v_readfirstlane_b32 s18, v161709; CHECK-GISEL-NEXT: v_readfirstlane_b32 s19, v171710; CHECK-GISEL-NEXT: ;;#ASMSTART1711; CHECK-GISEL-NEXT: ; use s[4:19]1712; CHECK-GISEL-NEXT: ;;#ASMEND1713; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1714 %x = call <32 x i16> @llvm.amdgcn.readfirstlane.v32i16(<32 x i16> %src)1715 call void asm sideeffect "; use $0", "s"(<32 x i16> %x)1716 ret void1717}1718 1719 1720define void @test_readfirstlane_v32f16(ptr addrspace(1) %out, <32 x half> %src) {1721; CHECK-SDAG-LABEL: test_readfirstlane_v32f16:1722; CHECK-SDAG: ; %bb.0:1723; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1724; CHECK-SDAG-NEXT: v_readfirstlane_b32 s19, v171725; CHECK-SDAG-NEXT: v_readfirstlane_b32 s18, v161726; CHECK-SDAG-NEXT: v_readfirstlane_b32 s17, v151727; CHECK-SDAG-NEXT: v_readfirstlane_b32 s16, v141728; CHECK-SDAG-NEXT: v_readfirstlane_b32 s15, v131729; CHECK-SDAG-NEXT: v_readfirstlane_b32 s14, v121730; CHECK-SDAG-NEXT: v_readfirstlane_b32 s13, v111731; CHECK-SDAG-NEXT: v_readfirstlane_b32 s12, v101732; CHECK-SDAG-NEXT: v_readfirstlane_b32 s11, v91733; CHECK-SDAG-NEXT: v_readfirstlane_b32 s10, v81734; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v71735; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v61736; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v51737; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v41738; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v31739; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v21740; CHECK-SDAG-NEXT: ;;#ASMSTART1741; CHECK-SDAG-NEXT: ; use s[4:19]1742; CHECK-SDAG-NEXT: ;;#ASMEND1743; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31]1744;1745; CHECK-GISEL-LABEL: test_readfirstlane_v32f16:1746; CHECK-GISEL: ; %bb.0:1747; CHECK-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1748; CHECK-GISEL-NEXT: v_readfirstlane_b32 s4, v21749; CHECK-GISEL-NEXT: v_readfirstlane_b32 s5, v31750; CHECK-GISEL-NEXT: v_readfirstlane_b32 s6, v41751; CHECK-GISEL-NEXT: v_readfirstlane_b32 s7, v51752; CHECK-GISEL-NEXT: v_readfirstlane_b32 s8, v61753; CHECK-GISEL-NEXT: v_readfirstlane_b32 s9, v71754; CHECK-GISEL-NEXT: v_readfirstlane_b32 s10, v81755; CHECK-GISEL-NEXT: v_readfirstlane_b32 s11, v91756; CHECK-GISEL-NEXT: v_readfirstlane_b32 s12, v101757; CHECK-GISEL-NEXT: v_readfirstlane_b32 s13, v111758; CHECK-GISEL-NEXT: v_readfirstlane_b32 s14, v121759; CHECK-GISEL-NEXT: v_readfirstlane_b32 s15, v131760; CHECK-GISEL-NEXT: v_readfirstlane_b32 s16, v141761; CHECK-GISEL-NEXT: v_readfirstlane_b32 s17, v151762; CHECK-GISEL-NEXT: v_readfirstlane_b32 s18, v161763; CHECK-GISEL-NEXT: v_readfirstlane_b32 s19, v171764; CHECK-GISEL-NEXT: ;;#ASMSTART1765; CHECK-GISEL-NEXT: ; use s[4:19]1766; CHECK-GISEL-NEXT: ;;#ASMEND1767; CHECK-GISEL-NEXT: s_setpc_b64 s[30:31]1768 %x = call <32 x half> @llvm.amdgcn.readfirstlane.v32f16(<32 x half> %src)1769 call void asm sideeffect "; use $0", "s"(<32 x half> %x)1770 ret void1771}1772 1773