annotate llvm/test/CodeGen/AMDGPU/dagcombine-select.ll @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefix=GCN %s
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 ; GCN-LABEL: {{^}}select_and1:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
4 ; GCN: s_cselect_b32 [[SEL:s[0-9]+]], s{{[0-9]+}},
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
5 ; GCN: v_mov_b32_e32 [[VSEL:v[0-9]+]], [[SEL]]
150
anatofuz
parents:
diff changeset
6 ; GCN-NOT: v_and_b32
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
7 ; GCN: store_dword v{{[0-9]+}}, [[VSEL]], s{{\[[0-9]+:[0-9]+\]}}
150
anatofuz
parents:
diff changeset
8 define amdgpu_kernel void @select_and1(i32 addrspace(1)* %p, i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
9 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
10 %s = select i1 %c, i32 0, i32 -1
anatofuz
parents:
diff changeset
11 %a = and i32 %y, %s
anatofuz
parents:
diff changeset
12 store i32 %a, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
13 ret void
anatofuz
parents:
diff changeset
14 }
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 ; GCN-LABEL: {{^}}select_and2:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
17 ; GCN: s_cselect_b32 [[SEL:s[0-9]+]], s{{[0-9]+}},
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
18 ; GCN: v_mov_b32_e32 [[VSEL:v[0-9]+]], [[SEL]]
150
anatofuz
parents:
diff changeset
19 ; GCN-NOT: v_and_b32
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
20 ; GCN: store_dword v{{[0-9]+}}, [[VSEL]], s{{\[[0-9]+:[0-9]+\]}}
150
anatofuz
parents:
diff changeset
21 define amdgpu_kernel void @select_and2(i32 addrspace(1)* %p, i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
22 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
23 %s = select i1 %c, i32 0, i32 -1
anatofuz
parents:
diff changeset
24 %a = and i32 %s, %y
anatofuz
parents:
diff changeset
25 store i32 %a, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
26 ret void
anatofuz
parents:
diff changeset
27 }
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 ; GCN-LABEL: {{^}}select_and3:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
30 ; GCN: s_cselect_b32 [[SEL:s[0-9]+]], s{{[0-9]+}},
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
31 ; GCN: v_mov_b32_e32 [[VSEL:v[0-9]+]], [[SEL]]
150
anatofuz
parents:
diff changeset
32 ; GCN-NOT: v_and_b32
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
33 ; GCN: store_dword v{{[0-9]+}}, [[VSEL]], s{{\[[0-9]+:[0-9]+\]}}
150
anatofuz
parents:
diff changeset
34 define amdgpu_kernel void @select_and3(i32 addrspace(1)* %p, i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
35 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
36 %s = select i1 %c, i32 -1, i32 0
anatofuz
parents:
diff changeset
37 %a = and i32 %y, %s
anatofuz
parents:
diff changeset
38 store i32 %a, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
39 ret void
anatofuz
parents:
diff changeset
40 }
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 ; GCN-LABEL: {{^}}select_and_v4:
anatofuz
parents:
diff changeset
43 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], 0, v{{[0-9]+}},
anatofuz
parents:
diff changeset
44 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], 0, v{{[0-9]+}},
anatofuz
parents:
diff changeset
45 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], 0, v{{[0-9]+}},
anatofuz
parents:
diff changeset
46 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], 0, v{{[0-9]+}},
anatofuz
parents:
diff changeset
47 ; GCN-NOT: v_and_b32
anatofuz
parents:
diff changeset
48 ; GCN: store_dword
anatofuz
parents:
diff changeset
49 define amdgpu_kernel void @select_and_v4(<4 x i32> addrspace(1)* %p, i32 %x, <4 x i32> %y) {
anatofuz
parents:
diff changeset
50 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
51 %s = select i1 %c, <4 x i32> zeroinitializer, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
anatofuz
parents:
diff changeset
52 %a = and <4 x i32> %s, %y
anatofuz
parents:
diff changeset
53 store <4 x i32> %a, <4 x i32> addrspace(1)* %p, align 32
anatofuz
parents:
diff changeset
54 ret void
anatofuz
parents:
diff changeset
55 }
anatofuz
parents:
diff changeset
56
anatofuz
parents:
diff changeset
57 ; GCN-LABEL: {{^}}select_or1:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
58 ; GCN: s_cselect_b32 [[SEL:s[0-9]+]], s{{[0-9]+}},
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
59 ; GCN: v_mov_b32_e32 [[VSEL:v[0-9]+]], [[SEL]]
150
anatofuz
parents:
diff changeset
60 ; GCN-NOT: v_or_b32
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
61 ; GCN: store_dword v{{[0-9]+}}, [[VSEL]], s{{\[[0-9]+:[0-9]+\]}}
150
anatofuz
parents:
diff changeset
62 define amdgpu_kernel void @select_or1(i32 addrspace(1)* %p, i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
63 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
64 %s = select i1 %c, i32 0, i32 -1
anatofuz
parents:
diff changeset
65 %a = or i32 %y, %s
anatofuz
parents:
diff changeset
66 store i32 %a, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
67 ret void
anatofuz
parents:
diff changeset
68 }
anatofuz
parents:
diff changeset
69
anatofuz
parents:
diff changeset
70 ; GCN-LABEL: {{^}}select_or2:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
71 ; GCN: s_cselect_b32 [[SEL:s[0-9]+]], s{{[0-9]+}},
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
72 ; GCN: v_mov_b32_e32 [[VSEL:v[0-9]+]], [[SEL]]
150
anatofuz
parents:
diff changeset
73 ; GCN-NOT: v_or_b32
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
74 ; GCN: store_dword v{{[0-9]+}}, [[VSEL]], s{{\[[0-9]+:[0-9]+\]}}
150
anatofuz
parents:
diff changeset
75 define amdgpu_kernel void @select_or2(i32 addrspace(1)* %p, i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
76 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
77 %s = select i1 %c, i32 0, i32 -1
anatofuz
parents:
diff changeset
78 %a = or i32 %s, %y
anatofuz
parents:
diff changeset
79 store i32 %a, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
80 ret void
anatofuz
parents:
diff changeset
81 }
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 ; GCN-LABEL: {{^}}select_or3:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
84 ; GCN: s_cselect_b32 [[SEL:s[0-9]+]], s{{[0-9]+}},
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
85 ; GCN: v_mov_b32_e32 [[VSEL:v[0-9]+]], [[SEL]]
150
anatofuz
parents:
diff changeset
86 ; GCN-NOT: v_or_b32
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
87 ; GCN: store_dword v{{[0-9]+}}, [[VSEL]], s{{\[[0-9]+:[0-9]+\]}}
150
anatofuz
parents:
diff changeset
88 define amdgpu_kernel void @select_or3(i32 addrspace(1)* %p, i32 %x, i32 %y) {
anatofuz
parents:
diff changeset
89 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
90 %s = select i1 %c, i32 -1, i32 0
anatofuz
parents:
diff changeset
91 %a = or i32 %y, %s
anatofuz
parents:
diff changeset
92 store i32 %a, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
93 ret void
anatofuz
parents:
diff changeset
94 }
anatofuz
parents:
diff changeset
95
anatofuz
parents:
diff changeset
96 ; GCN-LABEL: {{^}}select_or_v4:
anatofuz
parents:
diff changeset
97 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], -1, v{{[0-9]+}},
anatofuz
parents:
diff changeset
98 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], -1, v{{[0-9]+}},
anatofuz
parents:
diff changeset
99 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], -1, v{{[0-9]+}},
anatofuz
parents:
diff changeset
100 ; GCN: v_cndmask_b32_e32 [[SEL:v[0-9]+]], -1, v{{[0-9]+}},
anatofuz
parents:
diff changeset
101 ; GCN-NOT: v_or_b32
anatofuz
parents:
diff changeset
102 ; GCN: store_dword
anatofuz
parents:
diff changeset
103 define amdgpu_kernel void @select_or_v4(<4 x i32> addrspace(1)* %p, i32 %x, <4 x i32> %y) {
anatofuz
parents:
diff changeset
104 %c = icmp slt i32 %x, 11
anatofuz
parents:
diff changeset
105 %s = select i1 %c, <4 x i32> zeroinitializer, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
anatofuz
parents:
diff changeset
106 %a = or <4 x i32> %s, %y
anatofuz
parents:
diff changeset
107 store <4 x i32> %a, <4 x i32> addrspace(1)* %p, align 32
anatofuz
parents:
diff changeset
108 ret void
anatofuz
parents:
diff changeset
109 }
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 ; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
112 ; GCN: s_cselect_b32 s{{[0-9]+}}, 9, 2
150
anatofuz
parents:
diff changeset
113 define amdgpu_kernel void @sel_constants_sub_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
114 %sel = select i1 %cond, i32 -4, i32 3
anatofuz
parents:
diff changeset
115 %bo = sub i32 5, %sel
anatofuz
parents:
diff changeset
116 store i32 %bo, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
117 ret void
anatofuz
parents:
diff changeset
118 }
anatofuz
parents:
diff changeset
119
anatofuz
parents:
diff changeset
120 ; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_i16:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
121 ; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 2, 9,
150
anatofuz
parents:
diff changeset
122 define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_i16(i16 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
123 %sel = select i1 %cond, i16 -4, i16 3
anatofuz
parents:
diff changeset
124 %bo = sub i16 5, %sel
anatofuz
parents:
diff changeset
125 store i16 %bo, i16 addrspace(1)* %p, align 2
anatofuz
parents:
diff changeset
126 ret void
anatofuz
parents:
diff changeset
127 }
anatofuz
parents:
diff changeset
128
anatofuz
parents:
diff changeset
129 ; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_i16_neg:
anatofuz
parents:
diff changeset
130 ; GCN: v_mov_b32_e32 [[F:v[0-9]+]], 0xfffff449
anatofuz
parents:
diff changeset
131 ; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, [[F]], -3,
anatofuz
parents:
diff changeset
132 define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_i16_neg(i16 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
133 %sel = select i1 %cond, i16 4, i16 3000
anatofuz
parents:
diff changeset
134 %bo = sub i16 1, %sel
anatofuz
parents:
diff changeset
135 store i16 %bo, i16 addrspace(1)* %p, align 2
anatofuz
parents:
diff changeset
136 ret void
anatofuz
parents:
diff changeset
137 }
anatofuz
parents:
diff changeset
138
anatofuz
parents:
diff changeset
139 ; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_v2i16:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
140 ; GCN-DAG: s_mov_b32 [[T:s[0-9]+]], 0x50009
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
141 ; GCN: s_cselect_b32 s{{[0-9]+}}, [[T]], 0x60002
150
anatofuz
parents:
diff changeset
142 define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_v2i16(<2 x i16> addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
143 %sel = select i1 %cond, <2 x i16> <i16 -4, i16 2>, <2 x i16> <i16 3, i16 1>
anatofuz
parents:
diff changeset
144 %bo = sub <2 x i16> <i16 5, i16 7>, %sel
anatofuz
parents:
diff changeset
145 store <2 x i16> %bo, <2 x i16> addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
146 ret void
anatofuz
parents:
diff changeset
147 }
anatofuz
parents:
diff changeset
148
anatofuz
parents:
diff changeset
149 ; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_v4i32:
anatofuz
parents:
diff changeset
150 ; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 2, 9,
anatofuz
parents:
diff changeset
151 ; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 6, 5,
anatofuz
parents:
diff changeset
152 ; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 10, 6,
anatofuz
parents:
diff changeset
153 ; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 14, 7,
anatofuz
parents:
diff changeset
154 define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_v4i32(<4 x i32> addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
155 %sel = select i1 %cond, <4 x i32> <i32 -4, i32 2, i32 3, i32 4>, <4 x i32> <i32 3, i32 1, i32 -1, i32 -3>
anatofuz
parents:
diff changeset
156 %bo = sub <4 x i32> <i32 5, i32 7, i32 9, i32 11>, %sel
anatofuz
parents:
diff changeset
157 store <4 x i32> %bo, <4 x i32> addrspace(1)* %p, align 32
anatofuz
parents:
diff changeset
158 ret void
anatofuz
parents:
diff changeset
159 }
anatofuz
parents:
diff changeset
160
anatofuz
parents:
diff changeset
161 ; GCN-LABEL: {{^}}sdiv_constant_sel_constants_i64:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
162 ; GCN: s_cselect_b32 s{{[0-9]+}}, 0, 5
150
anatofuz
parents:
diff changeset
163 define amdgpu_kernel void @sdiv_constant_sel_constants_i64(i64 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
164 %sel = select i1 %cond, i64 121, i64 23
anatofuz
parents:
diff changeset
165 %bo = sdiv i64 120, %sel
anatofuz
parents:
diff changeset
166 store i64 %bo, i64 addrspace(1)* %p, align 8
anatofuz
parents:
diff changeset
167 ret void
anatofuz
parents:
diff changeset
168 }
anatofuz
parents:
diff changeset
169
anatofuz
parents:
diff changeset
170 ; GCN-LABEL: {{^}}sdiv_constant_sel_constants_i32:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
171 ; GCN: s_cselect_b32 s{{[0-9]+}}, 26, 8
150
anatofuz
parents:
diff changeset
172 define amdgpu_kernel void @sdiv_constant_sel_constants_i32(i32 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
173 %sel = select i1 %cond, i32 7, i32 23
anatofuz
parents:
diff changeset
174 %bo = sdiv i32 184, %sel
anatofuz
parents:
diff changeset
175 store i32 %bo, i32 addrspace(1)* %p, align 8
anatofuz
parents:
diff changeset
176 ret void
anatofuz
parents:
diff changeset
177 }
anatofuz
parents:
diff changeset
178
anatofuz
parents:
diff changeset
179 ; GCN-LABEL: {{^}}udiv_constant_sel_constants_i64:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
180 ; GCN: s_cselect_b32 s{{[0-9]+}}, 0, 5
150
anatofuz
parents:
diff changeset
181 define amdgpu_kernel void @udiv_constant_sel_constants_i64(i64 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
182 %sel = select i1 %cond, i64 -4, i64 23
anatofuz
parents:
diff changeset
183 %bo = udiv i64 120, %sel
anatofuz
parents:
diff changeset
184 store i64 %bo, i64 addrspace(1)* %p, align 8
anatofuz
parents:
diff changeset
185 ret void
anatofuz
parents:
diff changeset
186 }
anatofuz
parents:
diff changeset
187
anatofuz
parents:
diff changeset
188 ; GCN-LABEL: {{^}}srem_constant_sel_constants:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
189 ; GCN: s_cselect_b32 s{{[0-9]+}}, 33, 3
150
anatofuz
parents:
diff changeset
190 define amdgpu_kernel void @srem_constant_sel_constants(i64 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
191 %sel = select i1 %cond, i64 34, i64 15
anatofuz
parents:
diff changeset
192 %bo = srem i64 33, %sel
anatofuz
parents:
diff changeset
193 store i64 %bo, i64 addrspace(1)* %p, align 8
anatofuz
parents:
diff changeset
194 ret void
anatofuz
parents:
diff changeset
195 }
anatofuz
parents:
diff changeset
196
anatofuz
parents:
diff changeset
197 ; GCN-LABEL: {{^}}urem_constant_sel_constants:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
198 ; GCN: s_cselect_b32 s{{[0-9]+}}, 33, 3
150
anatofuz
parents:
diff changeset
199 define amdgpu_kernel void @urem_constant_sel_constants(i64 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
200 %sel = select i1 %cond, i64 34, i64 15
anatofuz
parents:
diff changeset
201 %bo = urem i64 33, %sel
anatofuz
parents:
diff changeset
202 store i64 %bo, i64 addrspace(1)* %p, align 8
anatofuz
parents:
diff changeset
203 ret void
anatofuz
parents:
diff changeset
204 }
anatofuz
parents:
diff changeset
205
anatofuz
parents:
diff changeset
206 ; GCN-LABEL: {{^}}shl_constant_sel_constants:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
207 ; GCN: s_cselect_b32 s{{[0-9]+}}, 4, 8
150
anatofuz
parents:
diff changeset
208 define amdgpu_kernel void @shl_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
209 %sel = select i1 %cond, i32 2, i32 3
anatofuz
parents:
diff changeset
210 %bo = shl i32 1, %sel
anatofuz
parents:
diff changeset
211 store i32 %bo, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
212 ret void
anatofuz
parents:
diff changeset
213 }
anatofuz
parents:
diff changeset
214
anatofuz
parents:
diff changeset
215 ; GCN-LABEL: {{^}}lshr_constant_sel_constants:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
216 ; GCN: s_cselect_b32 s{{[0-9]+}}, 16, 8
150
anatofuz
parents:
diff changeset
217 define amdgpu_kernel void @lshr_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
218 %sel = select i1 %cond, i32 2, i32 3
anatofuz
parents:
diff changeset
219 %bo = lshr i32 64, %sel
anatofuz
parents:
diff changeset
220 store i32 %bo, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
221 ret void
anatofuz
parents:
diff changeset
222 }
anatofuz
parents:
diff changeset
223
anatofuz
parents:
diff changeset
224 ; GCN-LABEL: {{^}}ashr_constant_sel_constants:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
225 ; GCN: s_cselect_b32 s{{[0-9]+}}, 32, 16
150
anatofuz
parents:
diff changeset
226 define amdgpu_kernel void @ashr_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
227 %sel = select i1 %cond, i32 2, i32 3
anatofuz
parents:
diff changeset
228 %bo = ashr i32 128, %sel
anatofuz
parents:
diff changeset
229 store i32 %bo, i32 addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
230 ret void
anatofuz
parents:
diff changeset
231 }
anatofuz
parents:
diff changeset
232
anatofuz
parents:
diff changeset
233 ; GCN-LABEL: {{^}}fsub_constant_sel_constants:
anatofuz
parents:
diff changeset
234 ; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, -4.0, 1.0,
anatofuz
parents:
diff changeset
235 define amdgpu_kernel void @fsub_constant_sel_constants(float addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
236 %sel = select i1 %cond, float -2.0, float 3.0
anatofuz
parents:
diff changeset
237 %bo = fsub float -1.0, %sel
anatofuz
parents:
diff changeset
238 store float %bo, float addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
239 ret void
anatofuz
parents:
diff changeset
240 }
anatofuz
parents:
diff changeset
241
anatofuz
parents:
diff changeset
242 ; GCN-LABEL: {{^}}fsub_constant_sel_constants_f16:
anatofuz
parents:
diff changeset
243 ; TODO: it shall be possible to fold constants with OpSel
anatofuz
parents:
diff changeset
244 ; GCN-DAG: v_mov_b32_e32 [[T:v[0-9]+]], 0x3c00
anatofuz
parents:
diff changeset
245 ; GCN-DAG: v_mov_b32_e32 [[F:v[0-9]+]], 0xc400
anatofuz
parents:
diff changeset
246 ; GCN: v_cndmask_b32_e32 v{{[0-9]+}}, [[F]], [[T]],
anatofuz
parents:
diff changeset
247 define amdgpu_kernel void @fsub_constant_sel_constants_f16(half addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
248 %sel = select i1 %cond, half -2.0, half 3.0
anatofuz
parents:
diff changeset
249 %bo = fsub half -1.0, %sel
anatofuz
parents:
diff changeset
250 store half %bo, half addrspace(1)* %p, align 2
anatofuz
parents:
diff changeset
251 ret void
anatofuz
parents:
diff changeset
252 }
anatofuz
parents:
diff changeset
253
anatofuz
parents:
diff changeset
254 ; GCN-LABEL: {{^}}fsub_constant_sel_constants_v2f16:
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
255 ; GCN: s_cselect_b32 s{{[0-9]+}}, 0x45003c00, -2.0
150
anatofuz
parents:
diff changeset
256 define amdgpu_kernel void @fsub_constant_sel_constants_v2f16(<2 x half> addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
257 %sel = select i1 %cond, <2 x half> <half -2.0, half -3.0>, <2 x half> <half -1.0, half 4.0>
anatofuz
parents:
diff changeset
258 %bo = fsub <2 x half> <half -1.0, half 2.0>, %sel
anatofuz
parents:
diff changeset
259 store <2 x half> %bo, <2 x half> addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
260 ret void
anatofuz
parents:
diff changeset
261 }
anatofuz
parents:
diff changeset
262
anatofuz
parents:
diff changeset
263 ; GCN-LABEL: {{^}}fsub_constant_sel_constants_v4f32:
anatofuz
parents:
diff changeset
264 ; GCN-DAG: v_mov_b32_e32 [[T2:v[0-9]+]], 0x40a00000
anatofuz
parents:
diff changeset
265 ; GCN-DAG: v_mov_b32_e32 [[T3:v[0-9]+]], 0x41100000
anatofuz
parents:
diff changeset
266 ; GCN-DAG: v_mov_b32_e32 [[T4:v[0-9]+]], 0x41500000
anatofuz
parents:
diff changeset
267 ; GCN-DAG: v_mov_b32_e32 [[F4:v[0-9]+]], 0x40c00000
anatofuz
parents:
diff changeset
268 ; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 0, 1.0,
anatofuz
parents:
diff changeset
269 ; GCN-DAG: v_cndmask_b32_e32 v{{[0-9]+}}, 2.0, [[T2]],
anatofuz
parents:
diff changeset
270 ; GCN-DAG: v_cndmask_b32_e32 v{{[0-9]+}}, 4.0, [[T3]],
anatofuz
parents:
diff changeset
271 ; GCN-DAG: v_cndmask_b32_e32 v{{[0-9]+}}, [[F4]], [[T4]],
anatofuz
parents:
diff changeset
272 define amdgpu_kernel void @fsub_constant_sel_constants_v4f32(<4 x float> addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
273 %sel = select i1 %cond, <4 x float> <float -2.0, float -3.0, float -4.0, float -5.0>, <4 x float> <float -1.0, float 0.0, float 1.0, float 2.0>
anatofuz
parents:
diff changeset
274 %bo = fsub <4 x float> <float -1.0, float 2.0, float 5.0, float 8.0>, %sel
anatofuz
parents:
diff changeset
275 store <4 x float> %bo, <4 x float> addrspace(1)* %p, align 32
anatofuz
parents:
diff changeset
276 ret void
anatofuz
parents:
diff changeset
277 }
anatofuz
parents:
diff changeset
278
anatofuz
parents:
diff changeset
279 ; GCN-LABEL: {{^}}fdiv_constant_sel_constants:
anatofuz
parents:
diff changeset
280 ; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 4.0, -2.0,
anatofuz
parents:
diff changeset
281 define amdgpu_kernel void @fdiv_constant_sel_constants(float addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
282 %sel = select i1 %cond, float -4.0, float 2.0
anatofuz
parents:
diff changeset
283 %bo = fdiv float 8.0, %sel
anatofuz
parents:
diff changeset
284 store float %bo, float addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
285 ret void
anatofuz
parents:
diff changeset
286 }
anatofuz
parents:
diff changeset
287
anatofuz
parents:
diff changeset
288 ; GCN-LABEL: {{^}}frem_constant_sel_constants:
anatofuz
parents:
diff changeset
289 ; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 2.0, 1.0,
anatofuz
parents:
diff changeset
290 define amdgpu_kernel void @frem_constant_sel_constants(float addrspace(1)* %p, i1 %cond) {
anatofuz
parents:
diff changeset
291 %sel = select i1 %cond, float -4.0, float 3.0
anatofuz
parents:
diff changeset
292 %bo = frem float 5.0, %sel
anatofuz
parents:
diff changeset
293 store float %bo, float addrspace(1)* %p, align 4
anatofuz
parents:
diff changeset
294 ret void
anatofuz
parents:
diff changeset
295 }