@@ -97,3 +97,80 @@ define amdgpu_kernel void @test_readfirstlane_fi(ptr addrspace(1) %out) {
9797 call void asm sideeffect "; use $0" , "s" (i32 %readfirstlane )
9898 ret void
9999}
100+
101+ define void @test_readfirstlane2_i32 (ptr addrspace (1 ) %out , i32 %src ) {
102+ ; CHECK-LABEL: test_readfirstlane2_i32:
103+ ; CHECK: ; %bb.0:
104+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
105+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
106+ ; CHECK-NEXT: ;;#ASMSTART
107+ ; CHECK-NEXT: ; use s4
108+ ; CHECK-NEXT: ;;#ASMEND
109+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
110+ %x = call i32 @llvm.amdgcn.readfirstlane2.i32 (i32 %src )
111+ call void asm sideeffect "; use $0" , "s" (i32 %x )
112+ ret void
113+ }
114+
115+ define void @test_readfirstlane2_i64 (ptr addrspace (1 ) %out , i64 %src ) {
116+ ; CHECK-LABEL: test_readfirstlane2_i64:
117+ ; CHECK: ; %bb.0:
118+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
119+ ; CHECK-NEXT: v_readfirstlane_b32 s5, v3
120+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
121+ ; CHECK-NEXT: ;;#ASMSTART
122+ ; CHECK-NEXT: ; use s[4:5]
123+ ; CHECK-NEXT: ;;#ASMEND
124+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
125+ %x = call i64 @llvm.amdgcn.readfirstlane2.i64 (i64 %src )
126+ call void asm sideeffect "; use $0" , "s" (i64 %x )
127+ ret void
128+ }
129+
130+ define void @test_readfirstlane2_v7i32 (ptr addrspace (1 ) %out , <7 x i32 > %src ) {
131+ ; CHECK-LABEL: test_readfirstlane2_v7i32:
132+ ; CHECK: ; %bb.0:
133+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
134+ ; CHECK-NEXT: v_readfirstlane_b32 s10, v8
135+ ; CHECK-NEXT: v_readfirstlane_b32 s9, v7
136+ ; CHECK-NEXT: v_readfirstlane_b32 s8, v6
137+ ; CHECK-NEXT: v_readfirstlane_b32 s7, v5
138+ ; CHECK-NEXT: v_readfirstlane_b32 s6, v4
139+ ; CHECK-NEXT: v_readfirstlane_b32 s5, v3
140+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
141+ ; CHECK-NEXT: ;;#ASMSTART
142+ ; CHECK-NEXT: ; use s[4:10]
143+ ; CHECK-NEXT: ;;#ASMEND
144+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
145+ %x = call <7 x i32 > @llvm.amdgcn.readfirstlane2.v7i32 (<7 x i32 > %src )
146+ call void asm sideeffect "; use $0" , "s" (<7 x i32 > %x )
147+ ret void
148+ }
149+
150+ define void @test_readfirstlane2_f16 (ptr addrspace (1 ) %out , half %src ) {
151+ ; CHECK-LABEL: test_readfirstlane2_f16:
152+ ; CHECK: ; %bb.0:
153+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
154+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
155+ ; CHECK-NEXT: ;;#ASMSTART
156+ ; CHECK-NEXT: ; use s4
157+ ; CHECK-NEXT: ;;#ASMEND
158+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
159+ %x = call half @llvm.amdgcn.readfirstlane2.f16 (half %src )
160+ call void asm sideeffect "; use $0" , "s" (half %x )
161+ ret void
162+ }
163+
164+ define void @test_readfirstlane2_float (ptr addrspace (1 ) %out , float %src ) {
165+ ; CHECK-LABEL: test_readfirstlane2_float:
166+ ; CHECK: ; %bb.0:
167+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
168+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
169+ ; CHECK-NEXT: ;;#ASMSTART
170+ ; CHECK-NEXT: ; use s4
171+ ; CHECK-NEXT: ;;#ASMEND
172+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
173+ %x = call float @llvm.amdgcn.readfirstlane2.f32 (float %src )
174+ call void asm sideeffect "; use $0" , "s" (float %x )
175+ ret void
176+ }
0 commit comments