xref: /llvm-project/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.readfirstlane.ptr.ll (revision 5feb32ba929f9e517c530217cabb09d1d734a763)
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