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