@@ -161,6 +161,49 @@ define void @test_readfirstlane2_f16(ptr addrspace(1) %out, half %src) {
161161 ret void
162162}
163163
164+ define void @test_readfirstlane2_v2f16 (ptr addrspace (1 ) %out , <2 x half > %src ) {
165+ ; CHECK-LABEL: test_readfirstlane2_v2f16:
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 <2 x half > @llvm.amdgcn.readfirstlane2.v2f16 (<2 x half > %src )
174+ call void asm sideeffect "; use $0" , "s" (<2 x half > %x )
175+ ret void
176+ }
177+
178+ define void @test_readfirstlane2_bf16 (ptr addrspace (1 ) %out , bfloat %src ) {
179+ ; CHECK-LABEL: test_readfirstlane2_bf16:
180+ ; CHECK: ; %bb.0:
181+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
182+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
183+ ; CHECK-NEXT: ;;#ASMSTART
184+ ; CHECK-NEXT: ; use s4
185+ ; CHECK-NEXT: ;;#ASMEND
186+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
187+ %x = call bfloat @llvm.amdgcn.readfirstlane2.bf16 (bfloat %src )
188+ call void asm sideeffect "; use $0" , "s" (bfloat %x )
189+ ret void
190+ }
191+
192+ define void @test_readfirstlane2_v4bf16 (ptr addrspace (1 ) %out , <4 x bfloat> %src ) {
193+ ; CHECK-LABEL: test_readfirstlane2_v4bf16:
194+ ; CHECK: ; %bb.0:
195+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
196+ ; CHECK-NEXT: v_readfirstlane_b32 s5, v3
197+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
198+ ; CHECK-NEXT: ;;#ASMSTART
199+ ; CHECK-NEXT: ; use s[4:5]
200+ ; CHECK-NEXT: ;;#ASMEND
201+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
202+ %x = call <4 x bfloat> @llvm.amdgcn.readfirstlane2.v4bf16 (<4 x bfloat> %src )
203+ call void asm sideeffect "; use $0" , "s" (<4 x bfloat> %x )
204+ ret void
205+ }
206+
164207define void @test_readfirstlane2_float (ptr addrspace (1 ) %out , float %src ) {
165208; CHECK-LABEL: test_readfirstlane2_float:
166209; CHECK: ; %bb.0:
@@ -174,3 +217,37 @@ define void @test_readfirstlane2_float(ptr addrspace(1) %out, float %src) {
174217 call void asm sideeffect "; use $0" , "s" (float %x )
175218 ret void
176219}
220+
221+ define void @test_readfirstlane2_p0 (ptr addrspace (1 ) %out , ptr %src ) {
222+ ; CHECK-LABEL: test_readfirstlane2_p0:
223+ ; CHECK: ; %bb.0:
224+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
225+ ; CHECK-NEXT: v_readfirstlane_b32 s5, v3
226+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
227+ ; CHECK-NEXT: ;;#ASMSTART
228+ ; CHECK-NEXT: ; use s[4:5]
229+ ; CHECK-NEXT: ;;#ASMEND
230+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
231+ %x = call ptr @llvm.amdgcn.readfirstlane2.p0 (ptr %src )
232+ call void asm sideeffect "; use $0" , "s" (ptr %x )
233+ ret void
234+ }
235+
236+ define void @test_readfirstlane2_v3p0 (ptr addrspace (1 ) %out , <3 x ptr > %src ) {
237+ ; CHECK-LABEL: test_readfirstlane2_v3p0:
238+ ; CHECK: ; %bb.0:
239+ ; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
240+ ; CHECK-NEXT: v_readfirstlane_b32 s9, v7
241+ ; CHECK-NEXT: v_readfirstlane_b32 s8, v6
242+ ; CHECK-NEXT: v_readfirstlane_b32 s7, v5
243+ ; CHECK-NEXT: v_readfirstlane_b32 s6, v4
244+ ; CHECK-NEXT: v_readfirstlane_b32 s5, v3
245+ ; CHECK-NEXT: v_readfirstlane_b32 s4, v2
246+ ; CHECK-NEXT: ;;#ASMSTART
247+ ; CHECK-NEXT: ; use s[4:9]
248+ ; CHECK-NEXT: ;;#ASMEND
249+ ; CHECK-NEXT: s_setpc_b64 s[30:31]
250+ %x = call <3 x ptr > @llvm.amdgcn.readfirstlane2.v3p0 (<3 x ptr > %src )
251+ call void asm sideeffect "; use $0" , "s" (<3 x ptr > %x )
252+ ret void
253+ }
0 commit comments