[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / combine-fsh.mir
bloba1eabb487448ee3a7f729581d1d35ada6d6b44ed
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
4 ---
5 name: fshl_i32
6 tracksRegLiveness: true
7 body: |
8   bb.0:
9     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
11     ; CHECK-LABEL: name: fshl_i32
12     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
13     ; CHECK-NEXT: {{  $}}
14     ; CHECK-NEXT: %a:_(s32) = COPY $vgpr0
15     ; CHECK-NEXT: %b:_(s32) = COPY $vgpr1
16     ; CHECK-NEXT: %amt:_(s32) = COPY $vgpr2
17     ; CHECK-NEXT: %or:_(s32) = G_FSHL %a, %b, %amt(s32)
18     ; CHECK-NEXT: $vgpr3 = COPY %or(s32)
19     %a:_(s32) = COPY $vgpr0
20     %b:_(s32) = COPY $vgpr1
21     %amt:_(s32) = COPY $vgpr2
22     %bw:_(s32) = G_CONSTANT i32 32
23     %shl:_(s32) = G_SHL %a, %amt
24     %sub:_(s32) = G_SUB %bw, %amt
25     %lshr:_(s32) = G_LSHR %b, %sub
26     %or:_(s32) = G_OR %shl, %lshr
27     $vgpr3 = COPY %or
28 ...
30 ---
31 name: fshl_v2i32
32 tracksRegLiveness: true
33 body: |
34   bb.0:
35     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
37     ; CHECK-LABEL: name: fshl_v2i32
38     ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
39     ; CHECK-NEXT: {{  $}}
40     ; CHECK-NEXT: %a:_(<2 x s32>) = COPY $vgpr0_vgpr1
41     ; CHECK-NEXT: %b:_(<2 x s32>) = COPY $vgpr2_vgpr3
42     ; CHECK-NEXT: %amt:_(<2 x s32>) = COPY $vgpr4_vgpr5
43     ; CHECK-NEXT: %or:_(<2 x s32>) = G_FSHL %a, %b, %amt(<2 x s32>)
44     ; CHECK-NEXT: $vgpr6_vgpr7 = COPY %or(<2 x s32>)
45     %a:_(<2 x s32>) = COPY $vgpr0_vgpr1
46     %b:_(<2 x s32>) = COPY $vgpr2_vgpr3
47     %amt:_(<2 x s32>) = COPY $vgpr4_vgpr5
48     %scalar_bw:_(s32) = G_CONSTANT i32 32
49     %bw:_(<2 x s32>) = G_BUILD_VECTOR %scalar_bw, %scalar_bw
50     %shl:_(<2 x s32>) = G_SHL %a, %amt
51     %sub:_(<2 x s32>) = G_SUB %bw, %amt
52     %lshr:_(<2 x s32>) = G_LSHR %b, %sub
53     %or:_(<2 x s32>) = G_OR %shl, %lshr
54     $vgpr6_vgpr7 = COPY %or
55 ...
57 ---
58 name: fshl_commute_i32
59 tracksRegLiveness: true
60 body: |
61   bb.0:
62     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
64     ; CHECK-LABEL: name: fshl_commute_i32
65     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
66     ; CHECK-NEXT: {{  $}}
67     ; CHECK-NEXT: %a:_(s32) = COPY $vgpr0
68     ; CHECK-NEXT: %b:_(s32) = COPY $vgpr1
69     ; CHECK-NEXT: %amt:_(s32) = COPY $vgpr2
70     ; CHECK-NEXT: %or:_(s32) = G_FSHL %a, %b, %amt(s32)
71     ; CHECK-NEXT: $vgpr3 = COPY %or(s32)
72     %a:_(s32) = COPY $vgpr0
73     %b:_(s32) = COPY $vgpr1
74     %amt:_(s32) = COPY $vgpr2
75     %bw:_(s32) = G_CONSTANT i32 32
76     %shl:_(s32) = G_SHL %a, %amt
77     %sub:_(s32) = G_SUB %bw, %amt
78     %lshr:_(s32) = G_LSHR %b, %sub
79     %or:_(s32) = G_OR %lshr, %shl
80     $vgpr3 = COPY %or
81 ...
83 ---
84 name: fshr_i32
85 tracksRegLiveness: true
86 body: |
87   bb.0:
88     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
90     ; CHECK-LABEL: name: fshr_i32
91     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
92     ; CHECK-NEXT: {{  $}}
93     ; CHECK-NEXT: %a:_(s32) = COPY $vgpr0
94     ; CHECK-NEXT: %b:_(s32) = COPY $vgpr1
95     ; CHECK-NEXT: %amt:_(s32) = COPY $vgpr2
96     ; CHECK-NEXT: %or:_(s32) = G_FSHR %a, %b, %amt(s32)
97     ; CHECK-NEXT: $vgpr3 = COPY %or(s32)
98     %a:_(s32) = COPY $vgpr0
99     %b:_(s32) = COPY $vgpr1
100     %amt:_(s32) = COPY $vgpr2
101     %bw:_(s32) = G_CONSTANT i32 32
102     %lshr:_(s32) = G_LSHR %b, %amt
103     %sub:_(s32) = G_SUB %bw, %amt
104     %shl:_(s32) = G_SHL %a, %sub
105     %or:_(s32) = G_OR %shl, %lshr
106     $vgpr3 = COPY %or
110 name: fsh_i32_const
111 tracksRegLiveness: true
112 body: |
113   bb.0:
114     liveins: $vgpr0, $vgpr1, $vgpr2
116     ; CHECK-LABEL: name: fsh_i32_const
117     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2
118     ; CHECK-NEXT: {{  $}}
119     ; CHECK-NEXT: %a:_(s32) = COPY $vgpr0
120     ; CHECK-NEXT: %b:_(s32) = COPY $vgpr1
121     ; CHECK-NEXT: %amt1:_(s32) = G_CONSTANT i32 12
122     ; CHECK-NEXT: %or:_(s32) = G_FSHR %a, %b, %amt1(s32)
123     ; CHECK-NEXT: $vgpr2 = COPY %or(s32)
124     %a:_(s32) = COPY $vgpr0
125     %b:_(s32) = COPY $vgpr1
126     %amt0:_(s32) = G_CONSTANT i32 20
127     %amt1:_(s32) = G_CONSTANT i32 12
128     %shl:_(s32) = G_SHL %a, %amt0
129     %lshr:_(s32) = G_LSHR %b, %amt1
130     %or:_(s32) = G_OR %shl, %lshr
131     $vgpr2 = COPY %or
135 name: fsh_i32_bad_const
136 tracksRegLiveness: true
137 body: |
138   bb.0:
139     liveins: $vgpr0, $vgpr1, $vgpr2
141     ; CHECK-LABEL: name: fsh_i32_bad_const
142     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2
143     ; CHECK-NEXT: {{  $}}
144     ; CHECK-NEXT: %a:_(s32) = COPY $vgpr0
145     ; CHECK-NEXT: %b:_(s32) = COPY $vgpr1
146     ; CHECK-NEXT: %amt0:_(s32) = G_CONSTANT i32 20
147     ; CHECK-NEXT: %amt1:_(s32) = G_CONSTANT i32 11
148     ; CHECK-NEXT: %shl:_(s32) = G_SHL %a, %amt0(s32)
149     ; CHECK-NEXT: %lshr:_(s32) = G_LSHR %b, %amt1(s32)
150     ; CHECK-NEXT: %or:_(s32) = G_OR %shl, %lshr
151     ; CHECK-NEXT: $vgpr2 = COPY %or(s32)
152     %a:_(s32) = COPY $vgpr0
153     %b:_(s32) = COPY $vgpr1
154     %amt0:_(s32) = G_CONSTANT i32 20
155     %amt1:_(s32) = G_CONSTANT i32 11
156     %shl:_(s32) = G_SHL %a, %amt0
157     %lshr:_(s32) = G_LSHR %b, %amt1
158     %or:_(s32) = G_OR %shl, %lshr
159     $vgpr2 = COPY %or
163 name: fshl_i32_bad_bw
164 tracksRegLiveness: true
165 body: |
166   bb.0:
167     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
169     ; CHECK-LABEL: name: fshl_i32_bad_bw
170     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
171     ; CHECK-NEXT: {{  $}}
172     ; CHECK-NEXT: %a:_(s32) = COPY $vgpr0
173     ; CHECK-NEXT: %b:_(s32) = COPY $vgpr1
174     ; CHECK-NEXT: %amt:_(s32) = COPY $vgpr2
175     ; CHECK-NEXT: %bw:_(s32) = G_CONSTANT i32 31
176     ; CHECK-NEXT: %shl:_(s32) = G_SHL %a, %amt(s32)
177     ; CHECK-NEXT: %sub:_(s32) = G_SUB %bw, %amt
178     ; CHECK-NEXT: %lshr:_(s32) = G_LSHR %b, %sub(s32)
179     ; CHECK-NEXT: %or:_(s32) = G_OR %shl, %lshr
180     ; CHECK-NEXT: $vgpr3 = COPY %or(s32)
181     %a:_(s32) = COPY $vgpr0
182     %b:_(s32) = COPY $vgpr1
183     %amt:_(s32) = COPY $vgpr2
184     %bw:_(s32) = G_CONSTANT i32 31
185     %shl:_(s32) = G_SHL %a, %amt
186     %sub:_(s32) = G_SUB %bw, %amt
187     %lshr:_(s32) = G_LSHR %b, %sub
188     %or:_(s32) = G_OR %shl, %lshr
189     $vgpr3 = COPY %or
193 name: fshl_i32_bad_amt_reg
194 tracksRegLiveness: true
195 body: |
196   bb.0:
197     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4
199     ; CHECK-LABEL: name: fshl_i32_bad_amt_reg
200     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4
201     ; CHECK-NEXT: {{  $}}
202     ; CHECK-NEXT: %a:_(s32) = COPY $vgpr0
203     ; CHECK-NEXT: %b:_(s32) = COPY $vgpr1
204     ; CHECK-NEXT: %amt:_(s32) = COPY $vgpr2
205     ; CHECK-NEXT: %amt1:_(s32) = COPY $vgpr3
206     ; CHECK-NEXT: %bw:_(s32) = G_CONSTANT i32 32
207     ; CHECK-NEXT: %shl:_(s32) = G_SHL %a, %amt(s32)
208     ; CHECK-NEXT: %sub:_(s32) = G_SUB %bw, %amt1
209     ; CHECK-NEXT: %lshr:_(s32) = G_LSHR %b, %sub(s32)
210     ; CHECK-NEXT: %or:_(s32) = G_OR %shl, %lshr
211     ; CHECK-NEXT: $vgpr4 = COPY %or(s32)
212     %a:_(s32) = COPY $vgpr0
213     %b:_(s32) = COPY $vgpr1
214     %amt:_(s32) = COPY $vgpr2
215     %amt1:_(s32) = COPY $vgpr3
216     %bw:_(s32) = G_CONSTANT i32 32
217     %shl:_(s32) = G_SHL %a, %amt
218     %sub:_(s32) = G_SUB %bw, %amt1
219     %lshr:_(s32) = G_LSHR %b, %sub
220     %or:_(s32) = G_OR %shl, %lshr
221     $vgpr4 = COPY %or