Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / vec-param.ll
blob40bb8a89ca5e4c24d5f34037b88b38ba9431e4f9
1 ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -O0 -stop-after=irtranslator -verify-machineinstrs -o - %s | FileCheck %s
4 define i12 @v1i12(<1 x i12> %v) {
5   ; CHECK-LABEL: name: v1i12
6   ; CHECK: bb.1 (%ir-block.0):
7   ; CHECK-NEXT:   liveins: $w0
8   ; CHECK-NEXT: {{  $}}
9   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
10   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s12) = G_TRUNC [[COPY]](s32)
11   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s12)
12   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
13   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
14   %r = extractelement <1 x i12> %v, i32 0
15   ret i12 %r
18 define i12 @v2i12(<2 x i12> %v) {
19   ; CHECK-LABEL: name: v2i12
20   ; CHECK: bb.1 (%ir-block.0):
21   ; CHECK-NEXT:   liveins: $d0
22   ; CHECK-NEXT: {{  $}}
23   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
24   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<2 x s12>) = G_TRUNC [[COPY]](<2 x s32>)
25   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
26   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<2 x s12>), [[C]](s64)
27   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
28   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
29   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
30   %r = extractelement <2 x i12> %v, i32 1
31   ret i12 %r
34 define i12 @v3i12(<3 x i12> %v) {
35   ; CHECK-LABEL: name: v3i12
36   ; CHECK: bb.1 (%ir-block.0):
37   ; CHECK-NEXT:   liveins: $w0, $w1, $w2
38   ; CHECK-NEXT: {{  $}}
39   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
40   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
41   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
42   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
43   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<3 x s12>) = G_TRUNC [[BUILD_VECTOR]](<3 x s32>)
44   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
45   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<3 x s12>), [[C]](s64)
46   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
47   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
48   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
49   %r = extractelement <3 x i12> %v, i32 1
50   ret i12 %r
53 define i12 @v4i12(<4 x i12> %v) {
54   ; CHECK-LABEL: name: v4i12
55   ; CHECK: bb.1 (%ir-block.0):
56   ; CHECK-NEXT:   liveins: $d0
57   ; CHECK-NEXT: {{  $}}
58   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
59   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<4 x s12>) = G_TRUNC [[COPY]](<4 x s16>)
60   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
61   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<4 x s12>), [[C]](s64)
62   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
63   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
64   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
65   %r = extractelement <4 x i12> %v, i32 1
66   ret i12 %r
69 define i12 @v5i12(<5 x i12> %v) {
70   ; CHECK-LABEL: name: v5i12
71   ; CHECK: bb.1 (%ir-block.0):
72   ; CHECK-NEXT:   liveins: $w0, $w1, $w2, $w3, $w4
73   ; CHECK-NEXT: {{  $}}
74   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
75   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
76   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
77   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $w3
78   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $w4
79   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32)
80   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<5 x s12>) = G_TRUNC [[BUILD_VECTOR]](<5 x s32>)
81   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
82   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<5 x s12>), [[C]](s64)
83   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
84   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
85   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
86   %r = extractelement <5 x i12> %v, i32 1
87   ret i12 %r
90 define i12 @v6i12(<6 x i12> %v) {
91   ; CHECK-LABEL: name: v6i12
92   ; CHECK: bb.1 (%ir-block.0):
93   ; CHECK-NEXT:   liveins: $w0, $w1, $w2, $w3, $w4, $w5
94   ; CHECK-NEXT: {{  $}}
95   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
96   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
97   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
98   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $w3
99   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $w4
100   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $w5
101   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<6 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)
102   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<6 x s12>) = G_TRUNC [[BUILD_VECTOR]](<6 x s32>)
103   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
104   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<6 x s12>), [[C]](s64)
105   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
106   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
107   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
108   %r = extractelement <6 x i12> %v, i32 1
109   ret i12 %r
112 define i12 @v7i12(<7 x i12> %v) {
113   ; CHECK-LABEL: name: v7i12
114   ; CHECK: bb.1 (%ir-block.0):
115   ; CHECK-NEXT:   liveins: $w0, $w1, $w2, $w3, $w4, $w5, $w6
116   ; CHECK-NEXT: {{  $}}
117   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
118   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
119   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
120   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $w3
121   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $w4
122   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $w5
123   ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $w6
124   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<7 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32)
125   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<7 x s12>) = G_TRUNC [[BUILD_VECTOR]](<7 x s32>)
126   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
127   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<7 x s12>), [[C]](s64)
128   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
129   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
130   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
131   %r = extractelement <7 x i12> %v, i32 1
132   ret i12 %r
135 define i12 @v8i12(<8 x i12> %v) {
136   ; CHECK-LABEL: name: v8i12
137   ; CHECK: bb.1 (%ir-block.0):
138   ; CHECK-NEXT:   liveins: $q0
139   ; CHECK-NEXT: {{  $}}
140   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
141   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<8 x s12>) = G_TRUNC [[COPY]](<8 x s16>)
142   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
143   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<8 x s12>), [[C]](s64)
144   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
145   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
146   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
147   %r = extractelement <8 x i12> %v, i32 1
148   ret i12 %r
151 define i12 @v12i12(<12 x i12> %v) {
152   ; CHECK-LABEL: name: v12i12
153   ; CHECK: bb.1 (%ir-block.0):
154   ; CHECK-NEXT:   liveins: $w0, $w1, $w2, $w3, $w4, $w5, $w6, $w7
155   ; CHECK-NEXT: {{  $}}
156   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
157   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
158   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
159   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $w3
160   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $w4
161   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $w5
162   ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $w6
163   ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $w7
164   ; CHECK-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.3
165   ; CHECK-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.3, align 16)
166   ; CHECK-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.2
167   ; CHECK-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s32) from %fixed-stack.2, align 8)
168   ; CHECK-NEXT:   [[FRAME_INDEX2:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
169   ; CHECK-NEXT:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p0) :: (invariant load (s32) from %fixed-stack.1, align 16)
170   ; CHECK-NEXT:   [[FRAME_INDEX3:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
171   ; CHECK-NEXT:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p0) :: (invariant load (s32) from %fixed-stack.0, align 8)
172   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<12 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[LOAD]](s32), [[LOAD1]](s32), [[LOAD2]](s32), [[LOAD3]](s32)
173   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(<12 x s12>) = G_TRUNC [[BUILD_VECTOR]](<12 x s32>)
174   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
175   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s12) = G_EXTRACT_VECTOR_ELT [[TRUNC]](<12 x s12>), [[C]](s64)
176   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s12)
177   ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
178   ; CHECK-NEXT:   RET_ReallyLR implicit $w0
179   %r = extractelement <12 x i12> %v, i32 1
180   ret i12 %r
184 define i100 @v1i100(<1 x i100> %v) {
185   ; CHECK-LABEL: name: v1i100
186   ; CHECK: bb.1 (%ir-block.0):
187   ; CHECK-NEXT:   liveins: $x0, $x1
188   ; CHECK-NEXT: {{  $}}
189   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x0
190   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
191   ; CHECK-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)
192   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s100) = G_TRUNC [[MV]](s128)
193   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s128) = G_ANYEXT [[TRUNC]](s100)
194   ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[ANYEXT]](s128)
195   ; CHECK-NEXT:   $x0 = COPY [[UV]](s64)
196   ; CHECK-NEXT:   $x1 = COPY [[UV1]](s64)
197   ; CHECK-NEXT:   RET_ReallyLR implicit $x0, implicit $x1
198   %r = extractelement <1 x i100> %v, i32 0
199   ret i100 %r
202 define i100 @v2i100(<2 x i100> %v) {
203   ; CHECK-LABEL: name: v2i100
204   ; CHECK: bb.1 (%ir-block.0):
205   ; CHECK-NEXT:   liveins: $x0, $x1, $x2, $x3
206   ; CHECK-NEXT: {{  $}}
207   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x0
208   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
209   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
210   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
211   ; CHECK-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)
212   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s100) = G_TRUNC [[MV]](s128)
213   ; CHECK-NEXT:   [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY2]](s64), [[COPY3]](s64)
214   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s100) = G_TRUNC [[MV1]](s128)
215   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s100>) = G_BUILD_VECTOR [[TRUNC]](s100), [[TRUNC1]](s100)
216   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
217   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s100) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<2 x s100>), [[C]](s64)
218   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s128) = G_ANYEXT [[EVEC]](s100)
219   ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[ANYEXT]](s128)
220   ; CHECK-NEXT:   $x0 = COPY [[UV]](s64)
221   ; CHECK-NEXT:   $x1 = COPY [[UV1]](s64)
222   ; CHECK-NEXT:   RET_ReallyLR implicit $x0, implicit $x1
223   %r = extractelement <2 x i100> %v, i32 1
224   ret i100 %r
227 define i100 @v3i100(<3 x i100> %v) {
228   ; CHECK-LABEL: name: v3i100
229   ; CHECK: bb.1 (%ir-block.0):
230   ; CHECK-NEXT:   liveins: $x0, $x1, $x2, $x3, $x4, $x5
231   ; CHECK-NEXT: {{  $}}
232   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x0
233   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
234   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
235   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
236   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x4
237   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x5
238   ; CHECK-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)
239   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s100) = G_TRUNC [[MV]](s128)
240   ; CHECK-NEXT:   [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY2]](s64), [[COPY3]](s64)
241   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s100) = G_TRUNC [[MV1]](s128)
242   ; CHECK-NEXT:   [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY4]](s64), [[COPY5]](s64)
243   ; CHECK-NEXT:   [[TRUNC2:%[0-9]+]]:_(s100) = G_TRUNC [[MV2]](s128)
244   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s100>) = G_BUILD_VECTOR [[TRUNC]](s100), [[TRUNC1]](s100), [[TRUNC2]](s100)
245   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
246   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s100) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s100>), [[C]](s64)
247   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s128) = G_ANYEXT [[EVEC]](s100)
248   ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[ANYEXT]](s128)
249   ; CHECK-NEXT:   $x0 = COPY [[UV]](s64)
250   ; CHECK-NEXT:   $x1 = COPY [[UV1]](s64)
251   ; CHECK-NEXT:   RET_ReallyLR implicit $x0, implicit $x1
252   %r = extractelement <3 x i100> %v, i32 1
253   ret i100 %r
256 define i100 @v4i100(<4 x i100> %v) {
257   ; CHECK-LABEL: name: v4i100
258   ; CHECK: bb.1 (%ir-block.0):
259   ; CHECK-NEXT:   liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7
260   ; CHECK-NEXT: {{  $}}
261   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x0
262   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
263   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
264   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
265   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x4
266   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x5
267   ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x6
268   ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x7
269   ; CHECK-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)
270   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s100) = G_TRUNC [[MV]](s128)
271   ; CHECK-NEXT:   [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY2]](s64), [[COPY3]](s64)
272   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s100) = G_TRUNC [[MV1]](s128)
273   ; CHECK-NEXT:   [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY4]](s64), [[COPY5]](s64)
274   ; CHECK-NEXT:   [[TRUNC2:%[0-9]+]]:_(s100) = G_TRUNC [[MV2]](s128)
275   ; CHECK-NEXT:   [[MV3:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY6]](s64), [[COPY7]](s64)
276   ; CHECK-NEXT:   [[TRUNC3:%[0-9]+]]:_(s100) = G_TRUNC [[MV3]](s128)
277   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s100>) = G_BUILD_VECTOR [[TRUNC]](s100), [[TRUNC1]](s100), [[TRUNC2]](s100), [[TRUNC3]](s100)
278   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
279   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s100) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<4 x s100>), [[C]](s64)
280   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s128) = G_ANYEXT [[EVEC]](s100)
281   ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[ANYEXT]](s128)
282   ; CHECK-NEXT:   $x0 = COPY [[UV]](s64)
283   ; CHECK-NEXT:   $x1 = COPY [[UV1]](s64)
284   ; CHECK-NEXT:   RET_ReallyLR implicit $x0, implicit $x1
285   %r = extractelement <4 x i100> %v, i32 1
286   ret i100 %r
289 define i100 @v8i100(<8 x i100> %v) {
290   ; CHECK-LABEL: name: v8i100
291   ; CHECK: bb.1 (%ir-block.0):
292   ; CHECK-NEXT:   liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7
293   ; CHECK-NEXT: {{  $}}
294   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x0
295   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
296   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
297   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
298   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $x4
299   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $x5
300   ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s64) = COPY $x6
301   ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:_(s64) = COPY $x7
302   ; CHECK-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.7
303   ; CHECK-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s64) from %fixed-stack.7, align 16)
304   ; CHECK-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.6
305   ; CHECK-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s64) from %fixed-stack.6)
306   ; CHECK-NEXT:   [[FRAME_INDEX2:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.5
307   ; CHECK-NEXT:   [[LOAD2:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX2]](p0) :: (invariant load (s64) from %fixed-stack.5, align 16)
308   ; CHECK-NEXT:   [[FRAME_INDEX3:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.4
309   ; CHECK-NEXT:   [[LOAD3:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX3]](p0) :: (invariant load (s64) from %fixed-stack.4)
310   ; CHECK-NEXT:   [[FRAME_INDEX4:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.3
311   ; CHECK-NEXT:   [[LOAD4:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX4]](p0) :: (invariant load (s64) from %fixed-stack.3, align 16)
312   ; CHECK-NEXT:   [[FRAME_INDEX5:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.2
313   ; CHECK-NEXT:   [[LOAD5:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX5]](p0) :: (invariant load (s64) from %fixed-stack.2)
314   ; CHECK-NEXT:   [[FRAME_INDEX6:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
315   ; CHECK-NEXT:   [[LOAD6:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX6]](p0) :: (invariant load (s64) from %fixed-stack.1, align 16)
316   ; CHECK-NEXT:   [[FRAME_INDEX7:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
317   ; CHECK-NEXT:   [[LOAD7:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX7]](p0) :: (invariant load (s64) from %fixed-stack.0)
318   ; CHECK-NEXT:   [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64)
319   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s100) = G_TRUNC [[MV]](s128)
320   ; CHECK-NEXT:   [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY2]](s64), [[COPY3]](s64)
321   ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s100) = G_TRUNC [[MV1]](s128)
322   ; CHECK-NEXT:   [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY4]](s64), [[COPY5]](s64)
323   ; CHECK-NEXT:   [[TRUNC2:%[0-9]+]]:_(s100) = G_TRUNC [[MV2]](s128)
324   ; CHECK-NEXT:   [[MV3:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY6]](s64), [[COPY7]](s64)
325   ; CHECK-NEXT:   [[TRUNC3:%[0-9]+]]:_(s100) = G_TRUNC [[MV3]](s128)
326   ; CHECK-NEXT:   [[MV4:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[LOAD]](s64), [[LOAD1]](s64)
327   ; CHECK-NEXT:   [[TRUNC4:%[0-9]+]]:_(s100) = G_TRUNC [[MV4]](s128)
328   ; CHECK-NEXT:   [[MV5:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[LOAD2]](s64), [[LOAD3]](s64)
329   ; CHECK-NEXT:   [[TRUNC5:%[0-9]+]]:_(s100) = G_TRUNC [[MV5]](s128)
330   ; CHECK-NEXT:   [[MV6:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[LOAD4]](s64), [[LOAD5]](s64)
331   ; CHECK-NEXT:   [[TRUNC6:%[0-9]+]]:_(s100) = G_TRUNC [[MV6]](s128)
332   ; CHECK-NEXT:   [[MV7:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[LOAD6]](s64), [[LOAD7]](s64)
333   ; CHECK-NEXT:   [[TRUNC7:%[0-9]+]]:_(s100) = G_TRUNC [[MV7]](s128)
334   ; CHECK-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s100>) = G_BUILD_VECTOR [[TRUNC]](s100), [[TRUNC1]](s100), [[TRUNC2]](s100), [[TRUNC3]](s100), [[TRUNC4]](s100), [[TRUNC5]](s100), [[TRUNC6]](s100), [[TRUNC7]](s100)
335   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
336   ; CHECK-NEXT:   [[EVEC:%[0-9]+]]:_(s100) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<8 x s100>), [[C]](s64)
337   ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s128) = G_ANYEXT [[EVEC]](s100)
338   ; CHECK-NEXT:   [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[ANYEXT]](s128)
339   ; CHECK-NEXT:   $x0 = COPY [[UV]](s64)
340   ; CHECK-NEXT:   $x1 = COPY [[UV1]](s64)
341   ; CHECK-NEXT:   RET_ReallyLR implicit $x0, implicit $x1
342   %r = extractelement <8 x i100> %v, i32 1
343   ret i100 %r