Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / postlegalizer-combiner-buildvector-identities.mir
blob33e484682eb3157f705e3ec998fa527d607b77f1
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
4 ---
5 name: v2s16_trunc_same_bitcast_lshr16
6 tracksRegLiveness: true
7 legalized: true
8 body: |
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 ...
24 ---
25 name: v2s16_trunc_different_bitcast_lshr16
26 tracksRegLiveness: true
27 legalized: true
28 body: |
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 ...
45 ---
46 name: v2s16_trunc_same_bitcast_lshr8_nocombine
47 tracksRegLiveness: true
48 legalized: true
49 body: |
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 ...
69 ---
70 name: v2s16_same_bitcast_lshr16
71 tracksRegLiveness: true
72 legalized: true
73 body: |
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 ...
91 ---
92 name: v2s16_same_bitcast_lshr8_nocombine
93 tracksRegLiveness: true
94 legalized: true
95 body: |
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
120 name: v2s16_undefhi
121 tracksRegLiveness: true
122 legalized: true
123 body: |
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
140 name: v2s32_undefhi
141 tracksRegLiveness: true
142 legalized: true
143 body: |
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