[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-abs.mir
blob3123e304116fe589dbac4d6481e4ca03d314676e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s
3 # RUN: llc -mtriple=aarch64 -run-pass=legalizer -mattr=+cssc -global-isel-abort=1 %s -o - | FileCheck %s --check-prefix=CHECK-CSSC
4 ---
5 name:            abs_s32
6 liveins:
7 body:             |
8   bb.0:
9     ; CHECK-LABEL: name: abs_s32
10     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
11     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 31
12     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s64)
13     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[ASHR]]
14     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ADD]], [[ASHR]]
15     ; CHECK-NEXT: $w0 = COPY [[XOR]](s32)
16     ; CHECK-CSSC-LABEL: name: abs_s32
17     ; CHECK-CSSC: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
18     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[COPY]]
19     ; CHECK-CSSC-NEXT: $w0 = COPY [[ABS]](s32)
20     %0:_(s32) = COPY $w0
21     %1:_(s32) = G_ABS %0(s32)
22     $w0 = COPY %1(s32)
23 ...
24 ---
25 name:            abs_s64
26 liveins:
27 body:             |
28   bb.0:
29     ; CHECK-LABEL: name: abs_s64
30     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
31     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
32     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s64)
33     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[ASHR]]
34     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[ADD]], [[ASHR]]
35     ; CHECK-NEXT: $x0 = COPY [[XOR]](s64)
36     ; CHECK-CSSC-LABEL: name: abs_s64
37     ; CHECK-CSSC: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
38     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(s64) = G_ABS [[COPY]]
39     ; CHECK-CSSC-NEXT: $x0 = COPY [[ABS]](s64)
40     %0:_(s64) = COPY $x0
41     %1:_(s64) = G_ABS %0(s64)
42     $x0 = COPY %1(s64)
43 ...
44 ---
45 name:            abs_v4s16
46 tracksRegLiveness: true
47 body:             |
48   bb.0:
49     liveins: $d0
51     ; CHECK-LABEL: name: abs_v4s16
52     ; CHECK: liveins: $d0
53     ; CHECK-NEXT: {{  $}}
54     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
55     ; CHECK-NEXT: [[ABS:%[0-9]+]]:_(<4 x s16>) = G_ABS [[COPY]]
56     ; CHECK-NEXT: $d0 = COPY [[ABS]](<4 x s16>)
57     ; CHECK-NEXT: RET_ReallyLR implicit $d0
58     ; CHECK-CSSC-LABEL: name: abs_v4s16
59     ; CHECK-CSSC: liveins: $d0
60     ; CHECK-CSSC-NEXT: {{  $}}
61     ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
62     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(<4 x s16>) = G_ABS [[COPY]]
63     ; CHECK-CSSC-NEXT: $d0 = COPY [[ABS]](<4 x s16>)
64     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $d0
65     %0:_(<4 x s16>) = COPY $d0
66     %1:_(<4 x s16>) = G_ABS %0
67     $d0 = COPY %1(<4 x s16>)
68     RET_ReallyLR implicit $d0
70 ...
71 ---
72 name:            abs_v8s16
73 tracksRegLiveness: true
74 body:             |
75   bb.0:
76     liveins: $q0
78     ; CHECK-LABEL: name: abs_v8s16
79     ; CHECK: liveins: $q0
80     ; CHECK-NEXT: {{  $}}
81     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
82     ; CHECK-NEXT: [[ABS:%[0-9]+]]:_(<8 x s16>) = G_ABS [[COPY]]
83     ; CHECK-NEXT: $q0 = COPY [[ABS]](<8 x s16>)
84     ; CHECK-NEXT: RET_ReallyLR implicit $q0
85     ; CHECK-CSSC-LABEL: name: abs_v8s16
86     ; CHECK-CSSC: liveins: $q0
87     ; CHECK-CSSC-NEXT: {{  $}}
88     ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
89     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(<8 x s16>) = G_ABS [[COPY]]
90     ; CHECK-CSSC-NEXT: $q0 = COPY [[ABS]](<8 x s16>)
91     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $q0
92     %0:_(<8 x s16>) = COPY $q0
93     %1:_(<8 x s16>) = G_ABS %0
94     $q0 = COPY %1(<8 x s16>)
95     RET_ReallyLR implicit $q0
97 ...
98 ---
99 name:            abs_v2s32
100 tracksRegLiveness: true
101 body:             |
102   bb.0:
103     liveins: $d0
105     ; CHECK-LABEL: name: abs_v2s32
106     ; CHECK: liveins: $d0
107     ; CHECK-NEXT: {{  $}}
108     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
109     ; CHECK-NEXT: [[ABS:%[0-9]+]]:_(<2 x s32>) = G_ABS [[COPY]]
110     ; CHECK-NEXT: $d0 = COPY [[ABS]](<2 x s32>)
111     ; CHECK-NEXT: RET_ReallyLR implicit $d0
112     ; CHECK-CSSC-LABEL: name: abs_v2s32
113     ; CHECK-CSSC: liveins: $d0
114     ; CHECK-CSSC-NEXT: {{  $}}
115     ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
116     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(<2 x s32>) = G_ABS [[COPY]]
117     ; CHECK-CSSC-NEXT: $d0 = COPY [[ABS]](<2 x s32>)
118     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $d0
119     %0:_(<2 x s32>) = COPY $d0
120     %1:_(<2 x s32>) = G_ABS %0
121     $d0 = COPY %1(<2 x s32>)
122     RET_ReallyLR implicit $d0
126 name:            abs_v4s32
127 tracksRegLiveness: true
128 body:             |
129   bb.0:
130     liveins: $q0
132     ; CHECK-LABEL: name: abs_v4s32
133     ; CHECK: liveins: $q0
134     ; CHECK-NEXT: {{  $}}
135     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
136     ; CHECK-NEXT: [[ABS:%[0-9]+]]:_(<4 x s32>) = G_ABS [[COPY]]
137     ; CHECK-NEXT: $q0 = COPY [[ABS]](<4 x s32>)
138     ; CHECK-NEXT: RET_ReallyLR implicit $q0
139     ; CHECK-CSSC-LABEL: name: abs_v4s32
140     ; CHECK-CSSC: liveins: $q0
141     ; CHECK-CSSC-NEXT: {{  $}}
142     ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
143     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(<4 x s32>) = G_ABS [[COPY]]
144     ; CHECK-CSSC-NEXT: $q0 = COPY [[ABS]](<4 x s32>)
145     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $q0
146     %0:_(<4 x s32>) = COPY $q0
147     %1:_(<4 x s32>) = G_ABS %0
148     $q0 = COPY %1(<4 x s32>)
149     RET_ReallyLR implicit $q0
153 name:            abs_v4s8
154 tracksRegLiveness: true
155 body:             |
156   bb.0:
157     liveins: $d0
159     ; CHECK-LABEL: name: abs_v4s8
160     ; CHECK: liveins: $d0
161     ; CHECK-NEXT: {{  $}}
162     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
163     ; CHECK-NEXT: [[ABS:%[0-9]+]]:_(<8 x s8>) = G_ABS [[COPY]]
164     ; CHECK-NEXT: $d0 = COPY [[ABS]](<8 x s8>)
165     ; CHECK-NEXT: RET_ReallyLR implicit $d0
166     ; CHECK-CSSC-LABEL: name: abs_v4s8
167     ; CHECK-CSSC: liveins: $d0
168     ; CHECK-CSSC-NEXT: {{  $}}
169     ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
170     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(<8 x s8>) = G_ABS [[COPY]]
171     ; CHECK-CSSC-NEXT: $d0 = COPY [[ABS]](<8 x s8>)
172     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $d0
173     %0:_(<8 x s8>) = COPY $d0
174     %1:_(<8 x s8>) = G_ABS %0
175     $d0 = COPY %1(<8 x s8>)
176     RET_ReallyLR implicit $d0
180 name:            abs_v16s8
181 tracksRegLiveness: true
182 body:             |
183   bb.0:
184     liveins: $q0
186     ; CHECK-LABEL: name: abs_v16s8
187     ; CHECK: liveins: $q0
188     ; CHECK-NEXT: {{  $}}
189     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
190     ; CHECK-NEXT: [[ABS:%[0-9]+]]:_(<16 x s8>) = G_ABS [[COPY]]
191     ; CHECK-NEXT: $q0 = COPY [[ABS]](<16 x s8>)
192     ; CHECK-NEXT: RET_ReallyLR implicit $q0
193     ; CHECK-CSSC-LABEL: name: abs_v16s8
194     ; CHECK-CSSC: liveins: $q0
195     ; CHECK-CSSC-NEXT: {{  $}}
196     ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
197     ; CHECK-CSSC-NEXT: [[ABS:%[0-9]+]]:_(<16 x s8>) = G_ABS [[COPY]]
198     ; CHECK-CSSC-NEXT: $q0 = COPY [[ABS]](<16 x s8>)
199     ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $q0
200     %0:_(<16 x s8>) = COPY $q0
201     %1:_(<16 x s8>) = G_ABS %0
202     $q0 = COPY %1(<16 x s8>)
203     RET_ReallyLR implicit $q0