1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=CHECK-SDAG -enable-var-scope %s 3 4define void @test_readfirstlane_p0(ptr addrspace(1) %out, ptr %src) { 5; CHECK-SDAG-LABEL: test_readfirstlane_p0: 6; CHECK-SDAG: ; %bb.0: 7; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 8; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3 9; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 10; CHECK-SDAG-NEXT: ;;#ASMSTART 11; CHECK-SDAG-NEXT: ; use s[4:5] 12; CHECK-SDAG-NEXT: ;;#ASMEND 13; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 14 %x = call ptr @llvm.amdgcn.readfirstlane.p0(ptr %src) 15 call void asm sideeffect "; use $0", "s"(ptr %x) 16 ret void 17} 18 19define void @test_readfirstlane_v3p0(ptr addrspace(1) %out, <3 x ptr> %src) { 20; CHECK-SDAG-LABEL: test_readfirstlane_v3p0: 21; CHECK-SDAG: ; %bb.0: 22; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23; CHECK-SDAG-NEXT: v_readfirstlane_b32 s9, v7 24; CHECK-SDAG-NEXT: v_readfirstlane_b32 s8, v6 25; CHECK-SDAG-NEXT: v_readfirstlane_b32 s7, v5 26; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4 27; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3 28; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 29; CHECK-SDAG-NEXT: ;;#ASMSTART 30; CHECK-SDAG-NEXT: ; use s[4:9] 31; CHECK-SDAG-NEXT: ;;#ASMEND 32; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 33 %x = call <3 x ptr> @llvm.amdgcn.readfirstlane.v3p0(<3 x ptr> %src) 34 call void asm sideeffect "; use $0", "s"(<3 x ptr> %x) 35 ret void 36} 37 38define void @test_readfirstlane_p3(ptr addrspace(1) %out, ptr addrspace(3) %src) { 39; CHECK-SDAG-LABEL: test_readfirstlane_p3: 40; CHECK-SDAG: ; %bb.0: 41; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 42; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 43; CHECK-SDAG-NEXT: ;;#ASMSTART 44; CHECK-SDAG-NEXT: ; use s4 45; CHECK-SDAG-NEXT: ;;#ASMEND 46; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 47 %x = call ptr addrspace(3) @llvm.amdgcn.readfirstlane.p3(ptr addrspace(3) %src) 48 call void asm sideeffect "; use $0", "s"(ptr addrspace(3) %x) 49 ret void 50} 51 52define void @test_readfirstlane_v3p3(ptr addrspace(1) %out, <3 x ptr addrspace(3)> %src) { 53; CHECK-SDAG-LABEL: test_readfirstlane_v3p3: 54; CHECK-SDAG: ; %bb.0: 55; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 56; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4 57; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3 58; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 59; CHECK-SDAG-NEXT: ;;#ASMSTART 60; CHECK-SDAG-NEXT: ; use s[4:6] 61; CHECK-SDAG-NEXT: ;;#ASMEND 62; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 63 %x = call <3 x ptr addrspace(3)> @llvm.amdgcn.readfirstlane.v3p3(<3 x ptr addrspace(3)> %src) 64 call void asm sideeffect "; use $0", "s"(<3 x ptr addrspace(3)> %x) 65 ret void 66} 67 68define void @test_readfirstlane_p5(ptr addrspace(1) %out, ptr addrspace(5) %src) { 69; CHECK-SDAG-LABEL: test_readfirstlane_p5: 70; CHECK-SDAG: ; %bb.0: 71; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 72; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 73; CHECK-SDAG-NEXT: ;;#ASMSTART 74; CHECK-SDAG-NEXT: ; use s4 75; CHECK-SDAG-NEXT: ;;#ASMEND 76; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 77 %x = call ptr addrspace(5) @llvm.amdgcn.readfirstlane.p5(ptr addrspace(5) %src) 78 call void asm sideeffect "; use $0", "s"(ptr addrspace(5) %x) 79 ret void 80} 81 82define void @test_readfirstlane_v3p5(ptr addrspace(1) %out, <3 x ptr addrspace(5)> %src) { 83; CHECK-SDAG-LABEL: test_readfirstlane_v3p5: 84; CHECK-SDAG: ; %bb.0: 85; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 86; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4 87; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3 88; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 89; CHECK-SDAG-NEXT: ;;#ASMSTART 90; CHECK-SDAG-NEXT: ; use s[4:6] 91; CHECK-SDAG-NEXT: ;;#ASMEND 92; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 93 %x = call <3 x ptr addrspace(5)> @llvm.amdgcn.readfirstlane.v3p5(<3 x ptr addrspace(5)> %src) 94 call void asm sideeffect "; use $0", "s"(<3 x ptr addrspace(5)> %x) 95 ret void 96} 97 98define void @test_readfirstlane_p6(ptr addrspace(1) %out, ptr addrspace(6) %src) { 99; CHECK-SDAG-LABEL: test_readfirstlane_p6: 100; CHECK-SDAG: ; %bb.0: 101; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 102; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 103; CHECK-SDAG-NEXT: ;;#ASMSTART 104; CHECK-SDAG-NEXT: ; use s4 105; CHECK-SDAG-NEXT: ;;#ASMEND 106; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 107 %x = call ptr addrspace(6) @llvm.amdgcn.readfirstlane.p6(ptr addrspace(6) %src) 108 call void asm sideeffect "; use $0", "s"(ptr addrspace(6) %x) 109 ret void 110} 111 112define void @test_readfirstlane_v3p6(ptr addrspace(1) %out, <3 x ptr addrspace(6)> %src) { 113; CHECK-SDAG-LABEL: test_readfirstlane_v3p6: 114; CHECK-SDAG: ; %bb.0: 115; CHECK-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 116; CHECK-SDAG-NEXT: v_readfirstlane_b32 s6, v4 117; CHECK-SDAG-NEXT: v_readfirstlane_b32 s5, v3 118; CHECK-SDAG-NEXT: v_readfirstlane_b32 s4, v2 119; CHECK-SDAG-NEXT: ;;#ASMSTART 120; CHECK-SDAG-NEXT: ; use s[4:6] 121; CHECK-SDAG-NEXT: ;;#ASMEND 122; CHECK-SDAG-NEXT: s_setpc_b64 s[30:31] 123 %x = call <3 x ptr addrspace(6)> @llvm.amdgcn.readfirstlane.v3p6(<3 x ptr addrspace(6)> %src) 124 call void asm sideeffect "; use $0", "s"(<3 x ptr addrspace(6)> %x) 125 ret void 126} 127