1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
3
4---
5name:            sshlsat_1
6tracksRegLiveness: true
7body:             |
8  bb.0:
9    liveins: $vgpr0
10
11    ; CHECK-LABEL: name: sshlsat_1
12    ; CHECK: liveins: $vgpr0
13    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
14    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
15    ; CHECK: [[SSHLSAT:%[0-9]+]]:_(s32) = G_SSHLSAT [[COPY]], [[C]](s32)
16    ; CHECK: $vgpr0 = COPY [[SSHLSAT]](s32)
17    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0
18    %0:_(s32) = COPY $vgpr0
19    %2:_(s32) = G_CONSTANT i32 2
20    %3:_(s32) = G_SSHLSAT %0, %2(s32)
21    %4:_(s32) = G_SSHLSAT %3, %2(s32)
22    $vgpr0 = COPY %4(s32)
23    SI_RETURN_TO_EPILOG implicit $vgpr0
24
25...
26---
27name:            sshlsat_2
28tracksRegLiveness: true
29body:             |
30  bb.0:
31    liveins: $sgpr0
32
33    ; CHECK-LABEL: name: sshlsat_2
34    ; CHECK: liveins: $sgpr0
35    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
36    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
37    ; CHECK: [[SSHLSAT:%[0-9]+]]:_(s32) = G_SSHLSAT [[COPY]], [[C]](s32)
38    ; CHECK: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), [[SSHLSAT]](s32)
39    ; CHECK: $sgpr0 = COPY [[INT]](s32)
40    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0
41    %0:_(s32) = COPY $sgpr0
42    %2:_(s32) = G_CONSTANT i32 1
43    %4:_(s32) = G_CONSTANT i32 2
44    %6:_(s32) = G_CONSTANT i32 3
45    %8:_(s32) = G_CONSTANT i32 4
46    %3:_(s32) = G_SSHLSAT %0, %2(s32)
47    %5:_(s32) = G_SSHLSAT %3, %4(s32)
48    %7:_(s32) = G_SSHLSAT %5, %6(s32)
49    %9:_(s32) = G_SSHLSAT %7, %8(s32)
50    %10:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), %9(s32)
51    $sgpr0 = COPY %10(s32)
52    SI_RETURN_TO_EPILOG implicit $sgpr0
53
54...
55---
56name:            sshlsat_i32
57tracksRegLiveness: true
58body:             |
59  bb.0:
60    liveins: $vgpr0
61
62    ; CHECK-LABEL: name: sshlsat_i32
63    ; CHECK: liveins: $vgpr0
64    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
65    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
66    ; CHECK: [[SSHLSAT:%[0-9]+]]:_(s32) = G_SSHLSAT [[COPY]], [[C]](s32)
67    ; CHECK: $vgpr0 = COPY [[SSHLSAT]](s32)
68    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0
69    %0:_(s32) = COPY $vgpr0
70    %2:_(s32) = G_CONSTANT i32 10
71    %3:_(s32) = G_SSHLSAT %0, %2(s32)
72    %4:_(s32) = G_SSHLSAT %3, %2(s32)
73    %5:_(s32) = G_SSHLSAT %4, %2(s32)
74    %6:_(s32) = G_SSHLSAT %5, %2(s32)
75    $vgpr0 = COPY %6(s32)
76    SI_RETURN_TO_EPILOG implicit $vgpr0
77
78...
79---
80name:            sshlsat_i64
81tracksRegLiveness: true
82body:             |
83  bb.0:
84    liveins: $sgpr0, $sgpr1
85
86    ; CHECK-LABEL: name: sshlsat_i64
87    ; CHECK: liveins: $sgpr0, $sgpr1
88    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
89    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $sgpr1
90    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
91    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 62
92    ; CHECK: [[SSHLSAT:%[0-9]+]]:_(s64) = G_SSHLSAT [[MV]], [[C]](s64)
93    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SSHLSAT]](s64)
94    ; CHECK: $sgpr0 = COPY [[UV]](s32)
95    ; CHECK: $sgpr1 = COPY [[UV1]](s32)
96    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
97    %1:_(s32) = COPY $sgpr0
98    %2:_(s32) = COPY $sgpr1
99    %0:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
100    %4:_(s64) = G_CONSTANT i64 10
101    %11:_(s64) = G_CONSTANT i64 2
102    %5:_(s64) = G_SSHLSAT %0, %4(s64)
103    %6:_(s64) = G_SSHLSAT %5, %4(s64)
104    %7:_(s64) = G_SSHLSAT %6, %4(s64)
105    %8:_(s64) = G_SSHLSAT %7, %4(s64)
106    %9:_(s64) = G_SSHLSAT %8, %4(s64)
107    %10:_(s64) = G_SSHLSAT %9, %4(s64)
108    %12:_(s64) = G_SSHLSAT %10, %11(s64)
109    %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %12(s64)
110    $sgpr0 = COPY %13(s32)
111    $sgpr1 = COPY %14(s32)
112    SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
113
114...
115---
116name:            ushlsat_1
117tracksRegLiveness: true
118body:             |
119  bb.0:
120    liveins: $vgpr0
121
122    ; CHECK-LABEL: name: ushlsat_1
123    ; CHECK: liveins: $vgpr0
124    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
125    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
126    ; CHECK: [[USHLSAT:%[0-9]+]]:_(s32) = G_USHLSAT [[COPY]], [[C]](s32)
127    ; CHECK: $vgpr0 = COPY [[USHLSAT]](s32)
128    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0
129    %0:_(s32) = COPY $vgpr0
130    %2:_(s32) = G_CONSTANT i32 2
131    %3:_(s32) = G_USHLSAT %0, %2(s32)
132    %4:_(s32) = G_USHLSAT %3, %2(s32)
133    $vgpr0 = COPY %4(s32)
134    SI_RETURN_TO_EPILOG implicit $vgpr0
135
136...
137---
138name:            ushlsat_2
139tracksRegLiveness: true
140body:             |
141  bb.0:
142    liveins: $sgpr0
143
144    ; CHECK-LABEL: name: ushlsat_2
145    ; CHECK: liveins: $sgpr0
146    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
147    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
148    ; CHECK: [[USHLSAT:%[0-9]+]]:_(s32) = G_USHLSAT [[COPY]], [[C]](s32)
149    ; CHECK: $sgpr0 = COPY [[USHLSAT]](s32)
150    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0
151    %0:_(s32) = COPY $sgpr0
152    %2:_(s32) = G_CONSTANT i32 1
153    %4:_(s32) = G_CONSTANT i32 2
154    %6:_(s32) = G_CONSTANT i32 3
155    %8:_(s32) = G_CONSTANT i32 4
156    %3:_(s32) = G_USHLSAT %0, %2(s32)
157    %5:_(s32) = G_USHLSAT %3, %4(s32)
158    %7:_(s32) = G_USHLSAT %5, %6(s32)
159    %9:_(s32) = G_USHLSAT %7, %8(s32)
160    $sgpr0 = COPY %9(s32)
161    SI_RETURN_TO_EPILOG implicit $sgpr0
162
163...
164---
165name:            ushlsat_i32
166tracksRegLiveness: true
167body:             |
168  bb.0:
169    liveins: $vgpr0
170
171    ; CHECK-LABEL: name: ushlsat_i32
172    ; CHECK: liveins: $vgpr0
173    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
174    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
175    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 30
176    ; CHECK: [[USHLSAT:%[0-9]+]]:_(s32) = G_USHLSAT [[COPY]], [[C1]](s32)
177    ; CHECK: [[USHLSAT1:%[0-9]+]]:_(s32) = G_USHLSAT [[USHLSAT]], [[C]](s32)
178    ; CHECK: $vgpr0 = COPY [[USHLSAT1]](s32)
179    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0
180    %0:_(s32) = COPY $vgpr0
181    %2:_(s32) = G_CONSTANT i32 10
182    %3:_(s32) = G_USHLSAT %0, %2(s32)
183    %4:_(s32) = G_USHLSAT %3, %2(s32)
184    %5:_(s32) = G_USHLSAT %4, %2(s32)
185    %6:_(s32) = G_USHLSAT %5, %2(s32)
186    $vgpr0 = COPY %6(s32)
187    SI_RETURN_TO_EPILOG implicit $vgpr0
188
189...
190---
191name:            ushlsat_i64
192tracksRegLiveness: true
193body:             |
194  bb.0:
195    liveins: $sgpr0, $sgpr1
196
197    ; CHECK-LABEL: name: ushlsat_i64
198    ; CHECK: liveins: $sgpr0, $sgpr1
199    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
200    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $sgpr1
201    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
202    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 10
203    ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 60
204    ; CHECK: [[USHLSAT:%[0-9]+]]:_(s64) = G_USHLSAT [[MV]], [[C1]](s64)
205    ; CHECK: [[USHLSAT1:%[0-9]+]]:_(s64) = G_USHLSAT [[USHLSAT]], [[C]](s64)
206    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[USHLSAT1]](s64)
207    ; CHECK: $sgpr0 = COPY [[UV]](s32)
208    ; CHECK: $sgpr1 = COPY [[UV1]](s32)
209    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
210    %1:_(s32) = COPY $sgpr0
211    %2:_(s32) = COPY $sgpr1
212    %0:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
213    %4:_(s64) = G_CONSTANT i64 10
214    %5:_(s64) = G_USHLSAT %0, %4(s64)
215    %6:_(s64) = G_USHLSAT %5, %4(s64)
216    %7:_(s64) = G_USHLSAT %6, %4(s64)
217    %8:_(s64) = G_USHLSAT %7, %4(s64)
218    %9:_(s64) = G_USHLSAT %8, %4(s64)
219    %10:_(s64) = G_USHLSAT %9, %4(s64)
220    %11:_(s64) = G_USHLSAT %10, %4(s64)
221    %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11(s64)
222    $sgpr0 = COPY %12(s32)
223    $sgpr1 = COPY %13(s32)
224    SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
225
226...
227