1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
3
4---
5name: zext_trunc_s32_s16_s32
6tracksRegLiveness: true
7body: |
8  bb.0:
9    liveins: $vgpr0
10
11    ; GCN-LABEL: name: zext_trunc_s32_s16_s32
12    ; GCN: liveins: $vgpr0
13    ; GCN: %var:_(s32) = COPY $vgpr0
14    ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383
15    ; GCN: %low_bits:_(s32) = G_AND %var, %c3FFF
16    ; GCN: $vgpr0 = COPY %low_bits(s32)
17    %var:_(s32) = COPY $vgpr0
18    %c3FFF:_(s32) = G_CONSTANT i32 16383
19    %low_bits:_(s32) = G_AND %var, %c3FFF
20    %trunc:_(s16) = G_TRUNC %low_bits(s32)
21    %zext:_(s32) = G_ZEXT %trunc(s16)
22    $vgpr0 = COPY %zext(s32)
23...
24
25---
26name: zext_trunc_s32_s16_s32_unknown_high_bits
27tracksRegLiveness: true
28body: |
29  bb.0:
30    liveins: $vgpr0
31
32    ; GCN-LABEL: name: zext_trunc_s32_s16_s32_unknown_high_bits
33    ; GCN: liveins: $vgpr0
34    ; GCN: %var:_(s32) = COPY $vgpr0
35    ; GCN: %cFFFFF:_(s32) = G_CONSTANT i32 1048575
36    ; GCN: %low_bits:_(s32) = G_AND %var, %cFFFFF
37    ; GCN: %trunc:_(s16) = G_TRUNC %low_bits(s32)
38    ; GCN: %zext:_(s32) = G_ZEXT %trunc(s16)
39    ; GCN: $vgpr0 = COPY %zext(s32)
40    %var:_(s32) = COPY $vgpr0
41    %cFFFFF:_(s32) = G_CONSTANT i32 1048575
42    %low_bits:_(s32) = G_AND %var, %cFFFFF
43    %trunc:_(s16) = G_TRUNC %low_bits(s32)
44    %zext:_(s32) = G_ZEXT %trunc(s16)
45    $vgpr0 = COPY %zext(s32)
46...
47
48---
49name: zext_trunc_s64_s16_s32
50tracksRegLiveness: true
51body: |
52  bb.0:
53    liveins: $vgpr0_vgpr1
54
55    ; GCN-LABEL: name: zext_trunc_s64_s16_s32
56    ; GCN: liveins: $vgpr0_vgpr1
57    ; GCN: %var:_(s64) = COPY $vgpr0_vgpr1
58    ; GCN: %c3FFF:_(s64) = G_CONSTANT i64 16383
59    ; GCN: %low_bits:_(s64) = G_AND %var, %c3FFF
60    ; GCN: %trunc:_(s16) = G_TRUNC %low_bits(s64)
61    ; GCN: %zext:_(s32) = G_ZEXT %trunc(s16)
62    ; GCN: $vgpr0 = COPY %zext(s32)
63    %var:_(s64) = COPY $vgpr0_vgpr1
64    %c3FFF:_(s64) = G_CONSTANT i64 16383
65    %low_bits:_(s64) = G_AND %var, %c3FFF
66    %trunc:_(s16) = G_TRUNC %low_bits(s64)
67    %zext:_(s32) = G_ZEXT %trunc(s16)
68    $vgpr0 = COPY %zext(s32)
69...
70
71---
72name: zext_trunc_s32_s16_s64
73tracksRegLiveness: true
74body: |
75  bb.0:
76    liveins: $vgpr0
77
78    ; GCN-LABEL: name: zext_trunc_s32_s16_s64
79    ; GCN: liveins: $vgpr0
80    ; GCN: %var:_(s32) = COPY $vgpr0
81    ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383
82    ; GCN: %low_bits:_(s32) = G_AND %var, %c3FFF
83    ; GCN: %trunc:_(s16) = G_TRUNC %low_bits(s32)
84    ; GCN: %zext:_(s64) = G_ZEXT %trunc(s16)
85    ; GCN: $vgpr0_vgpr1 = COPY %zext(s64)
86    %var:_(s32) = COPY $vgpr0
87    %c3FFF:_(s32) = G_CONSTANT i32 16383
88    %low_bits:_(s32) = G_AND %var, %c3FFF
89    %trunc:_(s16) = G_TRUNC %low_bits(s32)
90    %zext:_(s64) = G_ZEXT %trunc(s16)
91    $vgpr0_vgpr1 = COPY %zext(s64)
92...
93
94---
95name: zext_trunc_v2s32_v2s16_v2s32
96tracksRegLiveness: true
97body: |
98  bb.0:
99    liveins: $vgpr0_vgpr1
100
101    ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s32
102    ; GCN: liveins: $vgpr0_vgpr1
103    ; GCN: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1
104    ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383
105    ; GCN: %c7FFF:_(s32) = G_CONSTANT i32 32767
106    ; GCN: %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32)
107    ; GCN: %low_bits:_(<2 x s32>) = G_AND %var, %c
108    ; GCN: $vgpr0_vgpr1 = COPY %low_bits(<2 x s32>)
109    %var:_(<2 x s32>) = COPY $vgpr0_vgpr1
110    %c3FFF:_(s32) = G_CONSTANT i32 16383
111    %c7FFF:_(s32) = G_CONSTANT i32 32767
112    %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32)
113    %low_bits:_(<2 x s32>) = G_AND %var, %c
114    %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>)
115    %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>)
116    $vgpr0_vgpr1 = COPY %zext(<2 x s32>)
117...
118
119---
120name: zext_trunc_v2s32_v2s16_v2s32_unknown_high_bits
121tracksRegLiveness: true
122body: |
123  bb.0:
124    liveins: $vgpr0_vgpr1
125
126    ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s32_unknown_high_bits
127    ; GCN: liveins: $vgpr0_vgpr1
128    ; GCN: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1
129    ; GCN: %cFFFFF:_(s32) = G_CONSTANT i32 1048575
130    ; GCN: %c7FFF:_(s32) = G_CONSTANT i32 32767
131    ; GCN: %c:_(<2 x s32>) = G_BUILD_VECTOR %cFFFFF(s32), %c7FFF(s32)
132    ; GCN: %low_bits:_(<2 x s32>) = G_AND %var, %c
133    ; GCN: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>)
134    ; GCN: %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>)
135    ; GCN: $vgpr0_vgpr1 = COPY %zext(<2 x s32>)
136    %var:_(<2 x s32>) = COPY $vgpr0_vgpr1
137    %cFFFFF:_(s32) = G_CONSTANT i32 1048575
138    %c7FFF:_(s32) = G_CONSTANT i32 32767
139    %c:_(<2 x s32>) = G_BUILD_VECTOR %cFFFFF(s32), %c7FFF(s32)
140    %low_bits:_(<2 x s32>) = G_AND %var, %c
141    %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>)
142    %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>)
143    $vgpr0_vgpr1 = COPY %zext(<2 x s32>)
144...
145
146---
147name: zext_trunc_v2s64_v2s16_v2s32
148tracksRegLiveness: true
149body: |
150  bb.0:
151    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
152
153    ; GCN-LABEL: name: zext_trunc_v2s64_v2s16_v2s32
154    ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
155    ; GCN: %var:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
156    ; GCN: %c3FFF:_(s64) = G_CONSTANT i64 16383
157    ; GCN: %c7FFF:_(s64) = G_CONSTANT i64 32767
158    ; GCN: %c:_(<2 x s64>) = G_BUILD_VECTOR %c3FFF(s64), %c7FFF(s64)
159    ; GCN: %low_bits:_(<2 x s64>) = G_AND %var, %c
160    ; GCN: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s64>)
161    ; GCN: %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>)
162    ; GCN: $vgpr0_vgpr1 = COPY %zext(<2 x s32>)
163    %var:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
164    %c3FFF:_(s64) = G_CONSTANT i64 16383
165    %c7FFF:_(s64) = G_CONSTANT i64 32767
166    %c:_(<2 x s64>) = G_BUILD_VECTOR %c3FFF(s64), %c7FFF(s64)
167    %low_bits:_(<2 x s64>) = G_AND %var, %c
168    %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s64>)
169    %zext:_(<2 x s32>) = G_ZEXT %trunc(<2 x s16>)
170    $vgpr0_vgpr1 = COPY %zext(<2 x s32>)
171...
172
173---
174name: zext_trunc_v2s32_v2s16_v2s64
175tracksRegLiveness: true
176body: |
177  bb.0:
178    liveins: $vgpr0_vgpr1
179
180    ; GCN-LABEL: name: zext_trunc_v2s32_v2s16_v2s64
181    ; GCN: liveins: $vgpr0_vgpr1
182    ; GCN: %var:_(<2 x s32>) = COPY $vgpr0_vgpr1
183    ; GCN: %c3FFF:_(s32) = G_CONSTANT i32 16383
184    ; GCN: %c7FFF:_(s32) = G_CONSTANT i32 32767
185    ; GCN: %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32)
186    ; GCN: %low_bits:_(<2 x s32>) = G_AND %var, %c
187    ; GCN: %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>)
188    ; GCN: %zext:_(<2 x s64>) = G_ZEXT %trunc(<2 x s16>)
189    ; GCN: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %zext(<2 x s64>)
190    %var:_(<2 x s32>) = COPY $vgpr0_vgpr1
191    %c3FFF:_(s32) = G_CONSTANT i32 16383
192    %c7FFF:_(s32) = G_CONSTANT i32 32767
193    %c:_(<2 x s32>) = G_BUILD_VECTOR %c3FFF(s32), %c7FFF(s32)
194    %low_bits:_(<2 x s32>) = G_AND %var, %c
195    %trunc:_(<2 x s16>) = G_TRUNC %low_bits(<2 x s32>)
196    %zext:_(<2 x s64>) = G_ZEXT %trunc(<2 x s16>)
197    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %zext(<2 x s64>)
198...
199