• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer %s -o - | FileCheck -check-prefix=SI %s
3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer %s -o - | FileCheck -check-prefix=VI %s
4# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX9 %s
5
6---
7name: test_copysign_s16_s16
8body: |
9  bb.0:
10    liveins: $vgpr0, $vgpr1
11
12    ; SI-LABEL: name: test_copysign_s16_s16
13    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
14    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
15    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
16    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
17    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
18    ; SI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
19    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
20    ; SI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
21    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
22    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
23    ; SI: $vgpr0 = COPY [[ANYEXT]](s32)
24    ; VI-LABEL: name: test_copysign_s16_s16
25    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
26    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
27    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
28    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
29    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
30    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
31    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
32    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
33    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
34    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
35    ; VI: $vgpr0 = COPY [[ANYEXT]](s32)
36    ; GFX9-LABEL: name: test_copysign_s16_s16
37    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
38    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
39    ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
40    ; GFX9: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
41    ; GFX9: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
42    ; GFX9: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
43    ; GFX9: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
44    ; GFX9: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
45    ; GFX9: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
46    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
47    ; GFX9: $vgpr0 = COPY [[ANYEXT]](s32)
48    %0:_(s32) = COPY $vgpr0
49    %1:_(s32) = COPY $vgpr1
50    %2:_(s16) = G_TRUNC %0
51    %3:_(s16) = G_TRUNC %1
52    %4:_(s16) = G_FCOPYSIGN %2, %3
53    %5:_(s32) = G_ANYEXT %4
54    $vgpr0 = COPY %5
55...
56
57---
58name: test_copysign_s32_s32
59body: |
60  bb.0:
61    liveins: $vgpr0, $vgpr1
62
63    ; SI-LABEL: name: test_copysign_s32_s32
64    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
65    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
66    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
67    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
68    ; SI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
69    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
70    ; SI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND1]]
71    ; SI: $vgpr0 = COPY [[OR]](s32)
72    ; VI-LABEL: name: test_copysign_s32_s32
73    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
74    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
75    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
76    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
77    ; VI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
78    ; VI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
79    ; VI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND1]]
80    ; VI: $vgpr0 = COPY [[OR]](s32)
81    ; GFX9-LABEL: name: test_copysign_s32_s32
82    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
83    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
84    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
85    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
86    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
87    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
88    ; GFX9: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND1]]
89    ; GFX9: $vgpr0 = COPY [[OR]](s32)
90    %0:_(s32) = COPY $vgpr0
91    %1:_(s32) = COPY $vgpr1
92    %2:_(s32) = G_FCOPYSIGN %0, %1
93    $vgpr0 = COPY %2
94...
95
96---
97name: test_copysign_s64_s64
98body: |
99  bb.0:
100    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
101
102    ; SI-LABEL: name: test_copysign_s64_s64
103    ; SI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
104    ; SI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
105    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
106    ; SI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
107    ; SI: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
108    ; SI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]
109    ; SI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND1]]
110    ; SI: $vgpr0_vgpr1 = COPY [[OR]](s64)
111    ; VI-LABEL: name: test_copysign_s64_s64
112    ; VI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
113    ; VI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
114    ; VI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
115    ; VI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
116    ; VI: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
117    ; VI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]
118    ; VI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND1]]
119    ; VI: $vgpr0_vgpr1 = COPY [[OR]](s64)
120    ; GFX9-LABEL: name: test_copysign_s64_s64
121    ; GFX9: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
122    ; GFX9: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
123    ; GFX9: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
124    ; GFX9: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
125    ; GFX9: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
126    ; GFX9: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]
127    ; GFX9: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND1]]
128    ; GFX9: $vgpr0_vgpr1 = COPY [[OR]](s64)
129    %0:_(s64) = COPY $vgpr0_vgpr1
130    %1:_(s64) = COPY $vgpr2_vgpr3
131    %2:_(s64) = G_FCOPYSIGN %0, %1
132    $vgpr0_vgpr1 = COPY %2
133...
134
135---
136name: test_copysign_s64_s32
137body: |
138  bb.0:
139    liveins: $vgpr0_vgpr1, $vgpr2
140
141    ; SI-LABEL: name: test_copysign_s64_s32
142    ; SI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
143    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
144    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
145    ; SI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
146    ; SI: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
147    ; SI: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
148    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
149    ; SI: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[C2]](s32)
150    ; SI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
151    ; SI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND1]]
152    ; SI: $vgpr0_vgpr1 = COPY [[OR]](s64)
153    ; VI-LABEL: name: test_copysign_s64_s32
154    ; VI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
155    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
156    ; VI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
157    ; VI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
158    ; VI: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
159    ; VI: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
160    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
161    ; VI: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[C2]](s32)
162    ; VI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
163    ; VI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND1]]
164    ; VI: $vgpr0_vgpr1 = COPY [[OR]](s64)
165    ; GFX9-LABEL: name: test_copysign_s64_s32
166    ; GFX9: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
167    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
168    ; GFX9: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
169    ; GFX9: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
170    ; GFX9: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
171    ; GFX9: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
172    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
173    ; GFX9: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[C2]](s32)
174    ; GFX9: [[AND1:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
175    ; GFX9: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND1]]
176    ; GFX9: $vgpr0_vgpr1 = COPY [[OR]](s64)
177    %0:_(s64) = COPY $vgpr0_vgpr1
178    %1:_(s32) = COPY $vgpr2
179    %2:_(s64) = G_FCOPYSIGN %0, %1
180    $vgpr0_vgpr1 = COPY %2
181...
182
183---
184name: test_copysign_s32_s64
185body: |
186  bb.0:
187    liveins: $vgpr0, $vgpr1_vgpr2
188
189    ; SI-LABEL: name: test_copysign_s32_s64
190    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
191    ; SI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr1_vgpr2
192    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
193    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
194    ; SI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
195    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
196    ; SI: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[C2]](s32)
197    ; SI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
198    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]
199    ; SI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND1]]
200    ; SI: $vgpr0 = COPY [[OR]](s32)
201    ; VI-LABEL: name: test_copysign_s32_s64
202    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
203    ; VI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr1_vgpr2
204    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
205    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
206    ; VI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
207    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
208    ; VI: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[C2]](s32)
209    ; VI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
210    ; VI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]
211    ; VI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND1]]
212    ; VI: $vgpr0 = COPY [[OR]](s32)
213    ; GFX9-LABEL: name: test_copysign_s32_s64
214    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
215    ; GFX9: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr1_vgpr2
216    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
217    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
218    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
219    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
220    ; GFX9: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[C2]](s32)
221    ; GFX9: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
222    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]
223    ; GFX9: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND1]]
224    ; GFX9: $vgpr0 = COPY [[OR]](s32)
225    %0:_(s32) = COPY $vgpr0
226    %1:_(s64) = COPY $vgpr1_vgpr2
227    %2:_(s32) = G_FCOPYSIGN %0, %1
228    $vgpr0 = COPY %2
229...
230
231---
232name: test_copysign_s16_s32
233body: |
234  bb.0:
235    liveins: $vgpr0, $vgpr1
236
237    ; SI-LABEL: name: test_copysign_s16_s32
238    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
239    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
240    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
241    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
242    ; SI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
243    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
244    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
245    ; SI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C2]](s32)
246    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
247    ; SI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
248    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
249    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
250    ; SI: $vgpr0 = COPY [[ANYEXT]](s32)
251    ; VI-LABEL: name: test_copysign_s16_s32
252    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
253    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
254    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
255    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
256    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
257    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
258    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
259    ; VI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C2]](s32)
260    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
261    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
262    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
263    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
264    ; VI: $vgpr0 = COPY [[ANYEXT]](s32)
265    ; GFX9-LABEL: name: test_copysign_s16_s32
266    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
267    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
268    ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
269    ; GFX9: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
270    ; GFX9: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
271    ; GFX9: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
272    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
273    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C2]](s32)
274    ; GFX9: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
275    ; GFX9: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
276    ; GFX9: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
277    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
278    ; GFX9: $vgpr0 = COPY [[ANYEXT]](s32)
279    %0:_(s32) = COPY $vgpr0
280    %1:_(s32) = COPY $vgpr1
281    %2:_(s16) = G_TRUNC %0
282    %3:_(s16) = G_FCOPYSIGN %2, %1
283    %4:_(s32) = G_ANYEXT %3
284    $vgpr0 = COPY %4
285...
286
287---
288name: test_copysign_s32_s16
289body: |
290  bb.0:
291    liveins: $vgpr0, $vgpr1
292
293    ; SI-LABEL: name: test_copysign_s32_s16
294    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
295    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
296    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
297    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
298    ; SI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
299    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
300    ; SI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
301    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
302    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]
303    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
304    ; SI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C]]
305    ; SI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND2]]
306    ; SI: $vgpr0 = COPY [[OR]](s32)
307    ; VI-LABEL: name: test_copysign_s32_s16
308    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
309    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
310    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
311    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
312    ; VI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
313    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
314    ; VI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
315    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
316    ; VI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]
317    ; VI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
318    ; VI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C]]
319    ; VI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND2]]
320    ; VI: $vgpr0 = COPY [[OR]](s32)
321    ; GFX9-LABEL: name: test_copysign_s32_s16
322    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
323    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
324    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
325    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
326    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
327    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
328    ; GFX9: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
329    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
330    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]
331    ; GFX9: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
332    ; GFX9: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C]]
333    ; GFX9: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[AND2]]
334    ; GFX9: $vgpr0 = COPY [[OR]](s32)
335    %0:_(s32) = COPY $vgpr0
336    %1:_(s32) = COPY $vgpr1
337    %2:_(s16) = G_TRUNC %1
338    %3:_(s32) = G_FCOPYSIGN %0, %2
339    $vgpr0 = COPY %3
340...
341
342---
343name: test_copysign_s64_s16
344body: |
345  bb.0:
346    liveins: $vgpr0_vgpr1, $vgpr2
347
348    ; SI-LABEL: name: test_copysign_s64_s16
349    ; SI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
350    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
351    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
352    ; SI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
353    ; SI: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
354    ; SI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535
355    ; SI: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY1]](s32)
356    ; SI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C2]]
357    ; SI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 48
358    ; SI: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[AND1]], [[C3]](s32)
359    ; SI: [[AND2:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
360    ; SI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
361    ; SI: $vgpr0_vgpr1 = COPY [[OR]](s64)
362    ; VI-LABEL: name: test_copysign_s64_s16
363    ; VI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
364    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
365    ; VI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
366    ; VI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
367    ; VI: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
368    ; VI: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535
369    ; VI: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY1]](s32)
370    ; VI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C2]]
371    ; VI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 48
372    ; VI: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[AND1]], [[C3]](s32)
373    ; VI: [[AND2:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
374    ; VI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
375    ; VI: $vgpr0_vgpr1 = COPY [[OR]](s64)
376    ; GFX9-LABEL: name: test_copysign_s64_s16
377    ; GFX9: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
378    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
379    ; GFX9: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
380    ; GFX9: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
381    ; GFX9: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C1]]
382    ; GFX9: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535
383    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY1]](s32)
384    ; GFX9: [[AND1:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C2]]
385    ; GFX9: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 48
386    ; GFX9: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[AND1]], [[C3]](s32)
387    ; GFX9: [[AND2:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
388    ; GFX9: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
389    ; GFX9: $vgpr0_vgpr1 = COPY [[OR]](s64)
390    %0:_(s64) = COPY $vgpr0_vgpr1
391    %1:_(s32) = COPY $vgpr2
392    %2:_(s16) = G_TRUNC %1
393    %3:_(s64) = G_FCOPYSIGN %0, %2
394    $vgpr0_vgpr1 = COPY %3
395...
396
397---
398name: test_copysign_s16_s64
399body: |
400  bb.0:
401    liveins: $vgpr0, $vgpr1_vgpr2
402
403    ; SI-LABEL: name: test_copysign_s16_s64
404    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
405    ; SI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr1_vgpr2
406    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
407    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
408    ; SI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
409    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
410    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 48
411    ; SI: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[C2]](s32)
412    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s64)
413    ; SI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
414    ; SI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
415    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
416    ; SI: $vgpr0 = COPY [[ANYEXT]](s32)
417    ; VI-LABEL: name: test_copysign_s16_s64
418    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
419    ; VI: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr1_vgpr2
420    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
421    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
422    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
423    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
424    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 48
425    ; VI: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[C2]](s32)
426    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s64)
427    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
428    ; VI: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
429    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
430    ; VI: $vgpr0 = COPY [[ANYEXT]](s32)
431    ; GFX9-LABEL: name: test_copysign_s16_s64
432    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
433    ; GFX9: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr1_vgpr2
434    ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
435    ; GFX9: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
436    ; GFX9: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
437    ; GFX9: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
438    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 48
439    ; GFX9: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[C2]](s32)
440    ; GFX9: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s64)
441    ; GFX9: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
442    ; GFX9: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[AND1]]
443    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
444    ; GFX9: $vgpr0 = COPY [[ANYEXT]](s32)
445    %0:_(s32) = COPY $vgpr0
446    %1:_(s64) = COPY $vgpr1_vgpr2
447    %2:_(s16) = G_TRUNC %0
448    %3:_(s16) = G_FCOPYSIGN %2, %1
449    %4:_(s32) = G_ANYEXT %3
450    $vgpr0 = COPY %4
451...
452
453---
454name: test_copysign_v2s16_v2s16
455body: |
456  bb.0:
457    liveins: $vgpr0, $vgpr1
458
459    ; SI-LABEL: name: test_copysign_v2s16_v2s16
460    ; SI: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
461    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
462    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32768
463    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
464    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C]], [[C1]](s32)
465    ; SI: [[OR:%[0-9]+]]:_(s32) = G_OR [[C]], [[SHL]]
466    ; SI: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
467    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32767
468    ; SI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C1]](s32)
469    ; SI: [[OR1:%[0-9]+]]:_(s32) = G_OR [[C2]], [[SHL1]]
470    ; SI: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
471    ; SI: [[AND:%[0-9]+]]:_(<2 x s16>) = G_AND [[COPY]], [[BITCAST1]]
472    ; SI: [[AND1:%[0-9]+]]:_(<2 x s16>) = G_AND [[COPY1]], [[BITCAST]]
473    ; SI: [[OR2:%[0-9]+]]:_(<2 x s16>) = G_OR [[AND]], [[AND1]]
474    ; SI: $vgpr0 = COPY [[OR2]](<2 x s16>)
475    ; VI-LABEL: name: test_copysign_v2s16_v2s16
476    ; VI: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
477    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
478    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32768
479    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
480    ; VI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C]], [[C1]](s32)
481    ; VI: [[OR:%[0-9]+]]:_(s32) = G_OR [[C]], [[SHL]]
482    ; VI: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
483    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32767
484    ; VI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C1]](s32)
485    ; VI: [[OR1:%[0-9]+]]:_(s32) = G_OR [[C2]], [[SHL1]]
486    ; VI: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
487    ; VI: [[AND:%[0-9]+]]:_(<2 x s16>) = G_AND [[COPY]], [[BITCAST1]]
488    ; VI: [[AND1:%[0-9]+]]:_(<2 x s16>) = G_AND [[COPY1]], [[BITCAST]]
489    ; VI: [[OR2:%[0-9]+]]:_(<2 x s16>) = G_OR [[AND]], [[AND1]]
490    ; VI: $vgpr0 = COPY [[OR2]](<2 x s16>)
491    ; GFX9-LABEL: name: test_copysign_v2s16_v2s16
492    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
493    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
494    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -32768
495    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[C]](s32), [[C]](s32)
496    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 32767
497    ; GFX9: [[BUILD_VECTOR_TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[C1]](s32), [[C1]](s32)
498    ; GFX9: [[AND:%[0-9]+]]:_(<2 x s16>) = G_AND [[COPY]], [[BUILD_VECTOR_TRUNC1]]
499    ; GFX9: [[AND1:%[0-9]+]]:_(<2 x s16>) = G_AND [[COPY1]], [[BUILD_VECTOR_TRUNC]]
500    ; GFX9: [[OR:%[0-9]+]]:_(<2 x s16>) = G_OR [[AND]], [[AND1]]
501    ; GFX9: $vgpr0 = COPY [[OR]](<2 x s16>)
502    %0:_(<2 x s16>) = COPY $vgpr0
503    %1:_(<2 x s16>) = COPY $vgpr1
504    %2:_(<2 x s16>) = G_FCOPYSIGN %0, %1
505    $vgpr0 = COPY %2
506...
507
508---
509name: test_copysign_v2s32_v2s32
510body: |
511  bb.0:
512    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
513
514    ; SI-LABEL: name: test_copysign_v2s32_v2s32
515    ; SI: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
516    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
517    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
518    ; SI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)
519    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
520    ; SI: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32)
521    ; SI: [[AND:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY]], [[BUILD_VECTOR1]]
522    ; SI: [[AND1:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY1]], [[BUILD_VECTOR]]
523    ; SI: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[AND]], [[AND1]]
524    ; SI: $vgpr0_vgpr1 = COPY [[OR]](<2 x s32>)
525    ; VI-LABEL: name: test_copysign_v2s32_v2s32
526    ; VI: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
527    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
528    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
529    ; VI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)
530    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
531    ; VI: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32)
532    ; VI: [[AND:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY]], [[BUILD_VECTOR1]]
533    ; VI: [[AND1:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY1]], [[BUILD_VECTOR]]
534    ; VI: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[AND]], [[AND1]]
535    ; VI: $vgpr0_vgpr1 = COPY [[OR]](<2 x s32>)
536    ; GFX9-LABEL: name: test_copysign_v2s32_v2s32
537    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
538    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
539    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
540    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)
541    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
542    ; GFX9: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32)
543    ; GFX9: [[AND:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY]], [[BUILD_VECTOR1]]
544    ; GFX9: [[AND1:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY1]], [[BUILD_VECTOR]]
545    ; GFX9: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[AND]], [[AND1]]
546    ; GFX9: $vgpr0_vgpr1 = COPY [[OR]](<2 x s32>)
547    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
548    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
549    %2:_(<2 x s32>) = G_FCOPYSIGN %0, %1
550    $vgpr0_vgpr1 = COPY %2
551...
552
553---
554name: test_copysign_v2s64_v2s64
555body: |
556  bb.0:
557    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
558
559    ; SI-LABEL: name: test_copysign_v2s64_v2s64
560    ; SI: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
561    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
562    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
563    ; SI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
564    ; SI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
565    ; SI: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C1]]
566    ; SI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
567    ; SI: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
568    ; SI: [[AND2:%[0-9]+]]:_(s64) = G_AND [[UV2]], [[C]]
569    ; SI: [[AND3:%[0-9]+]]:_(s64) = G_AND [[UV3]], [[C]]
570    ; SI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
571    ; SI: [[OR1:%[0-9]+]]:_(s64) = G_OR [[AND1]], [[AND3]]
572    ; SI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[OR]](s64), [[OR1]](s64)
573    ; SI: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
574    ; VI-LABEL: name: test_copysign_v2s64_v2s64
575    ; VI: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
576    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
577    ; VI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
578    ; VI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
579    ; VI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
580    ; VI: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C1]]
581    ; VI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
582    ; VI: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
583    ; VI: [[AND2:%[0-9]+]]:_(s64) = G_AND [[UV2]], [[C]]
584    ; VI: [[AND3:%[0-9]+]]:_(s64) = G_AND [[UV3]], [[C]]
585    ; VI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
586    ; VI: [[OR1:%[0-9]+]]:_(s64) = G_OR [[AND1]], [[AND3]]
587    ; VI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[OR]](s64), [[OR1]](s64)
588    ; VI: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
589    ; GFX9-LABEL: name: test_copysign_v2s64_v2s64
590    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
591    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
592    ; GFX9: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
593    ; GFX9: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
594    ; GFX9: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
595    ; GFX9: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C1]]
596    ; GFX9: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
597    ; GFX9: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
598    ; GFX9: [[AND2:%[0-9]+]]:_(s64) = G_AND [[UV2]], [[C]]
599    ; GFX9: [[AND3:%[0-9]+]]:_(s64) = G_AND [[UV3]], [[C]]
600    ; GFX9: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
601    ; GFX9: [[OR1:%[0-9]+]]:_(s64) = G_OR [[AND1]], [[AND3]]
602    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[OR]](s64), [[OR1]](s64)
603    ; GFX9: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
604    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
605    %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
606    %2:_(<2 x s64>) = G_FCOPYSIGN %0, %1
607    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
608...
609
610---
611name: test_copysign_v2s64_v2s32
612body: |
613  bb.0:
614    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5
615
616    ; SI-LABEL: name: test_copysign_v2s64_v2s32
617    ; SI: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
618    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
619    ; SI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
620    ; SI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
621    ; SI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
622    ; SI: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C1]]
623    ; SI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
624    ; SI: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
625    ; SI: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
626    ; SI: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32)
627    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
628    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
629    ; SI: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[COPY2]](s32)
630    ; SI: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[ZEXT1]], [[C2]](s32)
631    ; SI: [[AND2:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
632    ; SI: [[AND3:%[0-9]+]]:_(s64) = G_AND [[SHL1]], [[C]]
633    ; SI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
634    ; SI: [[OR1:%[0-9]+]]:_(s64) = G_OR [[AND1]], [[AND3]]
635    ; SI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[OR]](s64), [[OR1]](s64)
636    ; SI: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
637    ; VI-LABEL: name: test_copysign_v2s64_v2s32
638    ; VI: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
639    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
640    ; VI: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
641    ; VI: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
642    ; VI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
643    ; VI: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C1]]
644    ; VI: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
645    ; VI: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
646    ; VI: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
647    ; VI: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32)
648    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
649    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
650    ; VI: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[COPY2]](s32)
651    ; VI: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[ZEXT1]], [[C2]](s32)
652    ; VI: [[AND2:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
653    ; VI: [[AND3:%[0-9]+]]:_(s64) = G_AND [[SHL1]], [[C]]
654    ; VI: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
655    ; VI: [[OR1:%[0-9]+]]:_(s64) = G_OR [[AND1]], [[AND3]]
656    ; VI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[OR]](s64), [[OR1]](s64)
657    ; VI: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
658    ; GFX9-LABEL: name: test_copysign_v2s64_v2s32
659    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
660    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
661    ; GFX9: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808
662    ; GFX9: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
663    ; GFX9: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
664    ; GFX9: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C1]]
665    ; GFX9: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
666    ; GFX9: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
667    ; GFX9: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
668    ; GFX9: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32)
669    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
670    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
671    ; GFX9: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[COPY2]](s32)
672    ; GFX9: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[ZEXT1]], [[C2]](s32)
673    ; GFX9: [[AND2:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C]]
674    ; GFX9: [[AND3:%[0-9]+]]:_(s64) = G_AND [[SHL1]], [[C]]
675    ; GFX9: [[OR:%[0-9]+]]:_(s64) = G_OR [[AND]], [[AND2]]
676    ; GFX9: [[OR1:%[0-9]+]]:_(s64) = G_OR [[AND1]], [[AND3]]
677    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[OR]](s64), [[OR1]](s64)
678    ; GFX9: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
679    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
680    %1:_(<2 x s32>) = COPY $vgpr4_vgpr5
681    %2:_(<2 x s64>) = G_FCOPYSIGN %0, %1
682    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
683...
684
685
686---
687name: test_copysign_v2s32_v2s64
688body: |
689  bb.0:
690    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
691
692    ; SI-LABEL: name: test_copysign_v2s32_v2s64
693    ; SI: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
694    ; SI: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
695    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
696    ; SI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)
697    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
698    ; SI: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32)
699    ; SI: [[AND:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY]], [[BUILD_VECTOR1]]
700    ; SI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
701    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
702    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
703    ; SI: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[COPY2]](s32)
704    ; SI: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[C2]](s32)
705    ; SI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
706    ; SI: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR1]](s64)
707    ; SI: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC]](s32), [[TRUNC1]](s32)
708    ; SI: [[AND1:%[0-9]+]]:_(<2 x s32>) = G_AND [[BUILD_VECTOR2]], [[BUILD_VECTOR]]
709    ; SI: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[AND]], [[AND1]]
710    ; SI: $vgpr0_vgpr1 = COPY [[OR]](<2 x s32>)
711    ; VI-LABEL: name: test_copysign_v2s32_v2s64
712    ; VI: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
713    ; VI: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
714    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
715    ; VI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)
716    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
717    ; VI: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32)
718    ; VI: [[AND:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY]], [[BUILD_VECTOR1]]
719    ; VI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
720    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
721    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
722    ; VI: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[COPY2]](s32)
723    ; VI: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[C2]](s32)
724    ; VI: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
725    ; VI: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR1]](s64)
726    ; VI: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC]](s32), [[TRUNC1]](s32)
727    ; VI: [[AND1:%[0-9]+]]:_(<2 x s32>) = G_AND [[BUILD_VECTOR2]], [[BUILD_VECTOR]]
728    ; VI: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[AND]], [[AND1]]
729    ; VI: $vgpr0_vgpr1 = COPY [[OR]](<2 x s32>)
730    ; GFX9-LABEL: name: test_copysign_v2s32_v2s64
731    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
732    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
733    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
734    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)
735    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
736    ; GFX9: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32)
737    ; GFX9: [[AND:%[0-9]+]]:_(<2 x s32>) = G_AND [[COPY]], [[BUILD_VECTOR1]]
738    ; GFX9: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
739    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
740    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
741    ; GFX9: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[COPY2]](s32)
742    ; GFX9: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[C2]](s32)
743    ; GFX9: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
744    ; GFX9: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR1]](s64)
745    ; GFX9: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC]](s32), [[TRUNC1]](s32)
746    ; GFX9: [[AND1:%[0-9]+]]:_(<2 x s32>) = G_AND [[BUILD_VECTOR2]], [[BUILD_VECTOR]]
747    ; GFX9: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[AND]], [[AND1]]
748    ; GFX9: $vgpr0_vgpr1 = COPY [[OR]](<2 x s32>)
749    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
750    %1:_(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
751    %2:_(<2 x s32>) = G_FCOPYSIGN %0, %1
752    $vgpr0_vgpr1 = COPY %2
753...
754
755---
756name: test_copysign_s32_s32_flagss
757body: |
758  bb.0:
759    liveins: $vgpr0, $vgpr1
760
761    ; SI-LABEL: name: test_copysign_s32_s32_flagss
762    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
763    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
764    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
765    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
766    ; SI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
767    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
768    ; SI: [[OR:%[0-9]+]]:_(s32) = nnan G_OR [[AND]], [[AND1]]
769    ; SI: $vgpr0 = COPY [[OR]](s32)
770    ; VI-LABEL: name: test_copysign_s32_s32_flagss
771    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
772    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
773    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
774    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
775    ; VI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
776    ; VI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
777    ; VI: [[OR:%[0-9]+]]:_(s32) = nnan G_OR [[AND]], [[AND1]]
778    ; VI: $vgpr0 = COPY [[OR]](s32)
779    ; GFX9-LABEL: name: test_copysign_s32_s32_flagss
780    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
781    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
782    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
783    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
784    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
785    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
786    ; GFX9: [[OR:%[0-9]+]]:_(s32) = nnan G_OR [[AND]], [[AND1]]
787    ; GFX9: $vgpr0 = COPY [[OR]](s32)
788    %0:_(s32) = COPY $vgpr0
789    %1:_(s32) = COPY $vgpr1
790    %2:_(s32) = nnan G_FCOPYSIGN %0, %1
791    $vgpr0 = COPY %2
792...
793
794
795---
796name: test_copysign_s32_s16_flags
797body: |
798  bb.0:
799    liveins: $vgpr0, $vgpr1
800    ; SI-LABEL: name: test_copysign_s32_s16_flags
801    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
802    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
803    ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
804    ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
805    ; SI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
806    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
807    ; SI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
808    ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
809    ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]
810    ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
811    ; SI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C]]
812    ; SI: [[OR:%[0-9]+]]:_(s32) = nnan G_OR [[AND]], [[AND2]]
813    ; SI: $vgpr0 = COPY [[OR]](s32)
814    ; VI-LABEL: name: test_copysign_s32_s16_flags
815    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
816    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
817    ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
818    ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
819    ; VI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
820    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
821    ; VI: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
822    ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
823    ; VI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]
824    ; VI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
825    ; VI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C]]
826    ; VI: [[OR:%[0-9]+]]:_(s32) = nnan G_OR [[AND]], [[AND2]]
827    ; VI: $vgpr0 = COPY [[OR]](s32)
828    ; GFX9-LABEL: name: test_copysign_s32_s16_flags
829    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
830    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
831    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648
832    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147483647
833    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
834    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
835    ; GFX9: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
836    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
837    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]
838    ; GFX9: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
839    ; GFX9: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C]]
840    ; GFX9: [[OR:%[0-9]+]]:_(s32) = nnan G_OR [[AND]], [[AND2]]
841    ; GFX9: $vgpr0 = COPY [[OR]](s32)
842    %0:_(s32) = COPY $vgpr0
843    %1:_(s32) = COPY $vgpr1
844    %2:_(s16) = G_TRUNC %1
845    %3:_(s32) = nnan G_FCOPYSIGN %0, %2
846    $vgpr0 = COPY %3
847...
848
849
850---
851name: test_copysign_s16_s32_flags
852body: |
853  bb.0:
854    liveins: $vgpr0, $vgpr1
855
856    ; SI-LABEL: name: test_copysign_s16_s32_flags
857    ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
858    ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
859    ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
860    ; SI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
861    ; SI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
862    ; SI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
863    ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
864    ; SI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C2]](s32)
865    ; SI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
866    ; SI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
867    ; SI: [[OR:%[0-9]+]]:_(s16) = nnan G_OR [[AND]], [[AND1]]
868    ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
869    ; SI: $vgpr0 = COPY [[ANYEXT]](s32)
870    ; VI-LABEL: name: test_copysign_s16_s32_flags
871    ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
872    ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
873    ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
874    ; VI: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
875    ; VI: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
876    ; VI: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
877    ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
878    ; VI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C2]](s32)
879    ; VI: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
880    ; VI: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
881    ; VI: [[OR:%[0-9]+]]:_(s16) = nnan G_OR [[AND]], [[AND1]]
882    ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
883    ; VI: $vgpr0 = COPY [[ANYEXT]](s32)
884    ; GFX9-LABEL: name: test_copysign_s16_s32_flags
885    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
886    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
887    ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
888    ; GFX9: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
889    ; GFX9: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 32767
890    ; GFX9: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C1]]
891    ; GFX9: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
892    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C2]](s32)
893    ; GFX9: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
894    ; GFX9: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C]]
895    ; GFX9: [[OR:%[0-9]+]]:_(s16) = nnan G_OR [[AND]], [[AND1]]
896    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
897    ; GFX9: $vgpr0 = COPY [[ANYEXT]](s32)
898    %0:_(s32) = COPY $vgpr0
899    %1:_(s32) = COPY $vgpr1
900    %2:_(s16) = G_TRUNC %0
901    %3:_(s16) = nnan G_FCOPYSIGN %2, %1
902    %4:_(s32) = G_ANYEXT %3
903    $vgpr0 = COPY %4
904...
905