[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / postlegalizer-lowering-uzp.mir
blobd1d5c6c29ba0dfc191ed77eb8ae69aed6255883e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
3 # Check that we can recognize a shuffle mask for a uzp instruction and produce
4 # a G_UZP1 or G_UZP2 where appropriate.
6 # RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-lowering -verify-machineinstrs %s -o - | FileCheck %s
8 ...
9 ---
10 name:            uzp1_v4s32
11 legalized:       true
12 tracksRegLiveness: true
13 body:             |
14   bb.1.entry:
15     liveins: $q0, $q1
17     ; CHECK-LABEL: name: uzp1_v4s32
18     ; CHECK: liveins: $q0, $q1
19     ; CHECK-NEXT: {{  $}}
20     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
21     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
22     ; CHECK-NEXT: [[UZP1_:%[0-9]+]]:_(<4 x s32>) = G_UZP1 [[COPY]], [[COPY1]]
23     ; CHECK-NEXT: $q0 = COPY [[UZP1_]](<4 x s32>)
24     ; CHECK-NEXT: RET_ReallyLR implicit $q0
25     %0:_(<4 x s32>) = COPY $q0
26     %1:_(<4 x s32>) = COPY $q1
27     %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, 2, 4, 6)
28     $q0 = COPY %2(<4 x s32>)
29     RET_ReallyLR implicit $q0
31 ...
32 ---
33 name:            uzp2_v4s32
34 legalized:       true
35 tracksRegLiveness: true
36 body:             |
37   bb.1.entry:
38     liveins: $q0, $q1
40     ; CHECK-LABEL: name: uzp2_v4s32
41     ; CHECK: liveins: $q0, $q1
42     ; CHECK-NEXT: {{  $}}
43     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
44     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
45     ; CHECK-NEXT: [[UZP2_:%[0-9]+]]:_(<4 x s32>) = G_UZP2 [[COPY]], [[COPY1]]
46     ; CHECK-NEXT: $q0 = COPY [[UZP2_]](<4 x s32>)
47     ; CHECK-NEXT: RET_ReallyLR implicit $q0
48     %0:_(<4 x s32>) = COPY $q0
49     %1:_(<4 x s32>) = COPY $q1
50     %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(1, 3, 5, 7)
51     $q0 = COPY %2(<4 x s32>)
52     RET_ReallyLR implicit $q0
54 ...
55 ---
56 name:            no_uzp1
57 legalized:       true
58 tracksRegLiveness: true
59 body:             |
60   bb.1.entry:
61     liveins: $q0, $q1
63     ; See isUZPMask: Mask[1] != 2 * i + 0
65     ; CHECK-LABEL: name: no_uzp1
66     ; CHECK: liveins: $q0, $q1
67     ; CHECK-NEXT: {{  $}}
68     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
69     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
70     ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<4 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(0, 1, 4, 6)
71     ; CHECK-NEXT: $q0 = COPY [[SHUF]](<4 x s32>)
72     ; CHECK-NEXT: RET_ReallyLR implicit $q0
73     %0:_(<4 x s32>) = COPY $q0
74     %1:_(<4 x s32>) = COPY $q1
75     %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, 1, 4, 6)
76     $q0 = COPY %2(<4 x s32>)
77     RET_ReallyLR implicit $q0
79 ...
80 ---
81 name:            no_uzp2
82 legalized:       true
83 tracksRegLiveness: true
84 body:             |
85   bb.1.entry:
86     liveins: $q0, $q1
88     ; See isUZPMask: Mask[1] != 2 * i + 1
90     ; CHECK-LABEL: name: no_uzp2
91     ; CHECK: liveins: $q0, $q1
92     ; CHECK-NEXT: {{  $}}
93     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
94     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
95     ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<4 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(1, 4, 5, 7)
96     ; CHECK-NEXT: $q0 = COPY [[SHUF]](<4 x s32>)
97     ; CHECK-NEXT: RET_ReallyLR implicit $q0
98     %0:_(<4 x s32>) = COPY $q0
99     %1:_(<4 x s32>) = COPY $q1
100     %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(1, 4, 5, 7)
101     $q0 = COPY %2(<4 x s32>)
102     RET_ReallyLR implicit $q0
106 name:            uzp1_undef
107 legalized:       true
108 tracksRegLiveness: true
109 body:             |
110   bb.1.entry:
111     liveins: $q0, $q1
113     ; Make sure that we can still produce a uzp1/uzp2 with undef indices.
115     ; CHECK-LABEL: name: uzp1_undef
116     ; CHECK: liveins: $q0, $q1
117     ; CHECK-NEXT: {{  $}}
118     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
119     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
120     ; CHECK-NEXT: [[UZP1_:%[0-9]+]]:_(<4 x s32>) = G_UZP1 [[COPY]], [[COPY1]]
121     ; CHECK-NEXT: $q0 = COPY [[UZP1_]](<4 x s32>)
122     ; CHECK-NEXT: RET_ReallyLR implicit $q0
123     %0:_(<4 x s32>) = COPY $q0
124     %1:_(<4 x s32>) = COPY $q1
125     %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(0, -1, 4, 6)
126     $q0 = COPY %2(<4 x s32>)
127     RET_ReallyLR implicit $q0
131 name:            uzp2_undef
132 legalized:       true
133 tracksRegLiveness: true
134 body:             |
135   bb.1.entry:
136     liveins: $q0, $q1
138     ; Make sure that we can still produce a uzp1/uzp2 with undef indices.
140     ; CHECK-LABEL: name: uzp2_undef
141     ; CHECK: liveins: $q0, $q1
142     ; CHECK-NEXT: {{  $}}
143     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
144     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
145     ; CHECK-NEXT: [[UZP2_:%[0-9]+]]:_(<4 x s32>) = G_UZP2 [[COPY]], [[COPY1]]
146     ; CHECK-NEXT: $q0 = COPY [[UZP2_]](<4 x s32>)
147     ; CHECK-NEXT: RET_ReallyLR implicit $q0
148     %0:_(<4 x s32>) = COPY $q0
149     %1:_(<4 x s32>) = COPY $q1
150     %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1, shufflemask(1, 3, -1, 7)
151     $q0 = COPY %2(<4 x s32>)
152     RET_ReallyLR implicit $q0