xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-lowering-unmerge-ext.mir (revision 13b7629a58dd5a020d9e5bbe77d676b60bfc512a)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-lowering -global-isel -verify-machineinstrs %s -o - | FileCheck %s
3
4---
5name:            v4s32
6legalized:       true
7body: |
8  bb.0.entry:
9    liveins: $q0
10    ; CHECK-LABEL: name: v4s32
11    ; CHECK: liveins: $q0
12    ; CHECK-NEXT: {{  $}}
13    ; CHECK-NEXT: %v1:_(<4 x s32>) = COPY $q0
14    ; CHECK-NEXT: %unused:_(<2 x s32>), %unmerge:_(<2 x s32>) = G_UNMERGE_VALUES %v1(<4 x s32>)
15    ; CHECK-NEXT: %fpext:_(<2 x s64>) = G_FPEXT %unmerge(<2 x s32>)
16    ; CHECK-NEXT: $q0 = COPY %fpext(<2 x s64>)
17    ; CHECK-NEXT: RET_ReallyLR implicit $q0
18    %v1:_(<4 x s32>) = COPY $q0
19    %implicit:_(<4 x s32>) = G_IMPLICIT_DEF
20    %C:_(s32) = G_CONSTANT i32 8
21    %ext:_(<4 x s32>) = G_EXT %v1:_, %implicit:_, %C:_(s32)
22    %unmerge:_(<2 x s32>), %unused:_(<2 x s32>) = G_UNMERGE_VALUES %ext:_(<4 x s32>)
23    %fpext:_(<2 x s64>) = G_FPEXT %unmerge:_(<2 x s32>)
24    $q0 = COPY %fpext
25    RET_ReallyLR implicit $q0
26...
27---
28name:            v8s16
29legalized:       true
30body: |
31  bb.0.entry:
32    liveins: $q0
33    ; CHECK-LABEL: name: v8s16
34    ; CHECK: liveins: $q0
35    ; CHECK-NEXT: {{  $}}
36    ; CHECK-NEXT: %v1:_(<8 x s16>) = COPY $q0
37    ; CHECK-NEXT: %unused:_(<4 x s16>), %unmerge:_(<4 x s16>) = G_UNMERGE_VALUES %v1(<8 x s16>)
38    ; CHECK-NEXT: %fpext:_(<4 x s32>) = G_FPEXT %unmerge(<4 x s16>)
39    ; CHECK-NEXT: $q0 = COPY %fpext(<4 x s32>)
40    ; CHECK-NEXT: RET_ReallyLR implicit $q0
41    %v1:_(<8 x s16>) = COPY $q0
42    %implicit:_(<8 x s16>) = G_IMPLICIT_DEF
43    %C:_(s32) = G_CONSTANT i32 8
44    %ext:_(<8 x s16>) = G_EXT %v1:_, %implicit:_, %C:_(s32)
45    %unmerge:_(<4 x s16>), %unused:_(<4 x s16>) = G_UNMERGE_VALUES %ext:_(<8 x s16>)
46    %fpext:_(<4 x s32>) = G_FPEXT %unmerge:_(<4 x s16>)
47    $q0 = COPY %fpext
48    RET_ReallyLR implicit $q0
49...
50---
51name:            v16s8
52legalized:       true
53body: |
54  bb.0.entry:
55    liveins: $q0
56    ; CHECK-LABEL: name: v16s8
57    ; CHECK: liveins: $q0
58    ; CHECK-NEXT: {{  $}}
59    ; CHECK-NEXT: %v1:_(<16 x s8>) = COPY $q0
60    ; CHECK-NEXT: %unused:_(<8 x s8>), %unmerge:_(<8 x s8>) = G_UNMERGE_VALUES %v1(<16 x s8>)
61    ; CHECK-NEXT: %fpext:_(<8 x s16>) = G_FPEXT %unmerge(<8 x s8>)
62    ; CHECK-NEXT: $q0 = COPY %fpext(<8 x s16>)
63    ; CHECK-NEXT: RET_ReallyLR implicit $q0
64    %v1:_(<16 x s8>) = COPY $q0
65    %implicit:_(<16 x s8>) = G_IMPLICIT_DEF
66    %C:_(s32) = G_CONSTANT i32 8
67    %ext:_(<16 x s8>) = G_EXT %v1:_, %implicit:_, %C:_(s32)
68    %unmerge:_(<8 x s8>), %unused:_(<8 x s8>) = G_UNMERGE_VALUES %ext:_(<16 x s8>)
69    %fpext:_(<8 x s16>) = G_FPEXT %unmerge:_(<8 x s8>)
70    $q0 = COPY %fpext
71    RET_ReallyLR implicit $q0
72...
73---
74name:            skip_not_const
75legalized:       true
76body: |
77  bb.0.entry:
78    liveins: $q0, $w0
79    ; CHECK-LABEL: name: skip_not_const
80    ; CHECK: liveins: $q0, $w0
81    ; CHECK-NEXT: {{  $}}
82    ; CHECK-NEXT: %v1:_(<16 x s8>) = COPY $q0
83    ; CHECK-NEXT: %implicit:_(<16 x s8>) = G_IMPLICIT_DEF
84    ; CHECK-NEXT: %C:_(s32) = COPY $w0
85    ; CHECK-NEXT: %ext:_(<16 x s8>) = G_EXT %v1, %implicit, %C(s32)
86    ; CHECK-NEXT: %unmerge:_(<8 x s8>), %unused:_(<8 x s8>) = G_UNMERGE_VALUES %ext(<16 x s8>)
87    ; CHECK-NEXT: %fpext:_(<8 x s16>) = G_FPEXT %unmerge(<8 x s8>)
88    ; CHECK-NEXT: $q0 = COPY %fpext(<8 x s16>)
89    ; CHECK-NEXT: RET_ReallyLR implicit $q0
90    %v1:_(<16 x s8>) = COPY $q0
91    %implicit:_(<16 x s8>) = G_IMPLICIT_DEF
92    %C:_(s32) = COPY $w0
93    %ext:_(<16 x s8>) = G_EXT %v1:_, %implicit:_, %C:_(s32)
94    %unmerge:_(<8 x s8>), %unused:_(<8 x s8>) = G_UNMERGE_VALUES %ext:_(<16 x s8>)
95    %fpext:_(<8 x s16>) = G_FPEXT %unmerge:_(<8 x s8>)
96    $q0 = COPY %fpext
97    RET_ReallyLR implicit $q0
98...
99---
100name:            skip_not_unused
101legalized:       true
102body: |
103  bb.0.entry:
104    liveins: $q0
105    ; CHECK-LABEL: name: skip_not_unused
106    ; CHECK: liveins: $q0
107    ; CHECK-NEXT: {{  $}}
108    ; CHECK-NEXT: %v1:_(<16 x s8>) = COPY $q0
109    ; CHECK-NEXT: %implicit:_(<16 x s8>) = G_IMPLICIT_DEF
110    ; CHECK-NEXT: %C:_(s32) = G_CONSTANT i32 8
111    ; CHECK-NEXT: %ext:_(<16 x s8>) = G_EXT %v1, %implicit, %C(s32)
112    ; CHECK-NEXT: %unmerge:_(<8 x s8>), %unused:_(<8 x s8>) = G_UNMERGE_VALUES %ext(<16 x s8>)
113    ; CHECK-NEXT: %fpext:_(<8 x s16>) = G_FPEXT %unmerge(<8 x s8>)
114    ; CHECK-NEXT: %fpext2:_(<8 x s16>) = G_FPEXT %unused(<8 x s8>)
115    ; CHECK-NEXT: $q0 = COPY %fpext(<8 x s16>)
116    ; CHECK-NEXT: $q1 = COPY %fpext2(<8 x s16>)
117    ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1
118    %v1:_(<16 x s8>) = COPY $q0
119    %implicit:_(<16 x s8>) = G_IMPLICIT_DEF
120    %C:_(s32) = G_CONSTANT i32 8
121    %ext:_(<16 x s8>) = G_EXT %v1:_, %implicit:_, %C:_(s32)
122    %unmerge:_(<8 x s8>), %unused:_(<8 x s8>) = G_UNMERGE_VALUES %ext:_(<16 x s8>)
123    %fpext:_(<8 x s16>) = G_FPEXT %unmerge:_(<8 x s8>)
124    %fpext2:_(<8 x s16>) = G_FPEXT %unused:_(<8 x s8>)
125    $q0 = COPY %fpext
126    $q1 = COPY %fpext2
127    RET_ReallyLR implicit $q0, implicit $q1
128...
129---
130name:            skip_borders
131legalized:       true
132body: |
133  bb.0.entry:
134    liveins: $q0
135    ; CHECK-LABEL: name: skip_borders
136    ; CHECK: liveins: $q0
137    ; CHECK-NEXT: {{  $}}
138    ; CHECK-NEXT: %v1:_(<4 x s32>) = COPY $q0
139    ; CHECK-NEXT: %implicit:_(<4 x s32>) = G_IMPLICIT_DEF
140    ; CHECK-NEXT: %C:_(s32) = G_CONSTANT i32 9
141    ; CHECK-NEXT: %ext:_(<4 x s32>) = G_EXT %v1, %implicit, %C(s32)
142    ; CHECK-NEXT: %unmerge:_(<2 x s32>), %unused:_(<2 x s32>) = G_UNMERGE_VALUES %ext(<4 x s32>)
143    ; CHECK-NEXT: %fpext:_(<2 x s64>) = G_FPEXT %unmerge(<2 x s32>)
144    ; CHECK-NEXT: $q0 = COPY %fpext(<2 x s64>)
145    ; CHECK-NEXT: RET_ReallyLR implicit $q0
146    %v1:_(<4 x s32>) = COPY $q0
147    %implicit:_(<4 x s32>) = G_IMPLICIT_DEF
148    %C:_(s32) = G_CONSTANT i32 9
149    %ext:_(<4 x s32>) = G_EXT %v1:_, %implicit:_, %C:_(s32)
150    %unmerge:_(<2 x s32>), %unused:_(<2 x s32>) = G_UNMERGE_VALUES %ext:_(<4 x s32>)
151    %fpext:_(<2 x s64>) = G_FPEXT %unmerge:_(<2 x s32>)
152    $q0 = COPY %fpext
153    RET_ReallyLR implicit $q0
154...
155