1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs -o - %s | FileCheck %s
3
4---
5name: v2s16_trunc_same_bitcast_lshr16
6tracksRegLiveness: true
7legalized: true
8body: |
9  bb.0:
10    liveins: $vgpr0
11    ; CHECK-LABEL: name: v2s16_trunc_same_bitcast_lshr16
12    ; CHECK: liveins: $vgpr0
13    ; CHECK-NEXT: {{  $}}
14    ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0
15    ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>)
16    %src:_(<2 x s16>) = COPY $vgpr0
17    %bitcast:_(s32) = G_BITCAST %src
18    %lshr_amount:_(s32) = G_CONSTANT i32 16
19    %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount
20    %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast, %lshr
21    $vgpr0 = COPY %root
22...
23
24---
25name: v2s16_trunc_different_bitcast_lshr16
26tracksRegLiveness: true
27legalized: true
28body: |
29  bb.0:
30    liveins: $vgpr0
31    ; CHECK-LABEL: name: v2s16_trunc_different_bitcast_lshr16
32    ; CHECK: liveins: $vgpr0
33    ; CHECK-NEXT: {{  $}}
34    ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0
35    ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>)
36    %src:_(<2 x s16>) = COPY $vgpr0
37    %bitcast0:_(s32) = G_BITCAST %src
38    %bitcast1:_(s32) = G_BITCAST %src
39    %lshr_amount:_(s32) = G_CONSTANT i32 16
40    %lshr:_(s32) = G_LSHR %bitcast1, %lshr_amount
41    %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast0, %lshr
42    $vgpr0 = COPY %root
43...
44
45---
46name: v2s16_trunc_same_bitcast_lshr8_nocombine
47tracksRegLiveness: true
48legalized: true
49body: |
50  bb.0:
51    liveins: $vgpr0
52    ; CHECK-LABEL: name: v2s16_trunc_same_bitcast_lshr8_nocombine
53    ; CHECK: liveins: $vgpr0
54    ; CHECK-NEXT: {{  $}}
55    ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0
56    ; CHECK-NEXT: %bitcast:_(s32) = G_BITCAST %src(<2 x s16>)
57    ; CHECK-NEXT: %lshr_amount:_(s32) = G_CONSTANT i32 8
58    ; CHECK-NEXT: %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount(s32)
59    ; CHECK-NEXT: %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast(s32), %lshr(s32)
60    ; CHECK-NEXT: $vgpr0 = COPY %root(<2 x s16>)
61    %src:_(<2 x s16>) = COPY $vgpr0
62    %bitcast:_(s32) = G_BITCAST %src
63    %lshr_amount:_(s32) = G_CONSTANT i32 8
64    %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount
65    %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast, %lshr
66    $vgpr0 = COPY %root
67...
68
69---
70name: v2s16_same_bitcast_lshr16
71tracksRegLiveness: true
72legalized: true
73body: |
74  bb.0:
75    liveins: $vgpr0
76    ; CHECK-LABEL: name: v2s16_same_bitcast_lshr16
77    ; CHECK: liveins: $vgpr0
78    ; CHECK-NEXT: {{  $}}
79    ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0
80    ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>)
81    %src:_(<2 x s16>) = COPY $vgpr0
82    %bitcast:_(s32) = G_BITCAST %src
83    %lshr_amount:_(s32) = G_CONSTANT i32 16
84    %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount
85    %trunclo:_(s16) = G_TRUNC %bitcast
86    %trunchi:_(s16) = G_TRUNC %lshr
87    %root:_(<2 x s16>) = G_BUILD_VECTOR %trunclo, %trunchi
88    $vgpr0 = COPY %root
89...
90
91---
92name: v2s16_same_bitcast_lshr8_nocombine
93tracksRegLiveness: true
94legalized: true
95body: |
96  bb.0:
97    liveins: $vgpr0
98    ; CHECK-LABEL: name: v2s16_same_bitcast_lshr8_nocombine
99    ; CHECK: liveins: $vgpr0
100    ; CHECK-NEXT: {{  $}}
101    ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0
102    ; CHECK-NEXT: %bitcast:_(s32) = G_BITCAST %src(<2 x s16>)
103    ; CHECK-NEXT: %lshr_amount:_(s32) = G_CONSTANT i32 8
104    ; CHECK-NEXT: %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount(s32)
105    ; CHECK-NEXT: %trunclo:_(s16) = G_TRUNC %bitcast(s32)
106    ; CHECK-NEXT: %trunchi:_(s16) = G_TRUNC %lshr(s32)
107    ; CHECK-NEXT: %root:_(<2 x s16>) = G_BUILD_VECTOR %trunclo(s16), %trunchi(s16)
108    ; CHECK-NEXT: $vgpr0 = COPY %root(<2 x s16>)
109    %src:_(<2 x s16>) = COPY $vgpr0
110    %bitcast:_(s32) = G_BITCAST %src
111    %lshr_amount:_(s32) = G_CONSTANT i32 8
112    %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount
113    %trunclo:_(s16) = G_TRUNC %bitcast
114    %trunchi:_(s16) = G_TRUNC %lshr
115    %root:_(<2 x s16>) = G_BUILD_VECTOR %trunclo, %trunchi
116    $vgpr0 = COPY %root
117...
118
119---
120name: v2s16_undefhi
121tracksRegLiveness: true
122legalized: true
123body: |
124  bb.0:
125    liveins: $vgpr0
126    ; CHECK-LABEL: name: v2s16_undefhi
127    ; CHECK: liveins: $vgpr0
128    ; CHECK-NEXT: {{  $}}
129    ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0
130    ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>)
131    %src:_(<2 x s16>) = COPY $vgpr0
132    %bitcast:_(s32) = G_BITCAST %src
133    %trunc:_(s16) = G_TRUNC %bitcast
134    %undef:_(s16) = G_IMPLICIT_DEF
135    %root:_(<2 x s16>) = G_BUILD_VECTOR %trunc, %undef
136    $vgpr0 = COPY %root
137...
138
139---
140name: v2s32_undefhi
141tracksRegLiveness: true
142legalized: true
143body: |
144  bb.0:
145    liveins: $vgpr0_vgpr1
146    ; CHECK-LABEL: name: v2s32_undefhi
147    ; CHECK: liveins: $vgpr0_vgpr1
148    ; CHECK-NEXT: {{  $}}
149    ; CHECK-NEXT: %src:_(<2 x s32>) = COPY $vgpr0_vgpr1
150    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY %src(<2 x s32>)
151    %src:_(<2 x s32>) = COPY $vgpr0_vgpr1
152    %bitcast:_(s64) = G_BITCAST %src
153    %trunc:_(s32) = G_TRUNC %bitcast
154    %undef:_(s32) = G_IMPLICIT_DEF
155    %root:_(<2 x s32>) = G_BUILD_VECTOR %trunc, %undef
156    $vgpr0_vgpr1 = COPY %root
157...
158