362 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s3 4...5---6# (x + y) - y -> x7name: simplify_to_x8tracksRegLiveness: true9body: |10 bb.0:11 liveins: $w0, $w112 ; CHECK-LABEL: name: simplify_to_x13 ; CHECK: liveins: $w0, $w114 ; CHECK-NEXT: {{ $}}15 ; CHECK-NEXT: %x:_(s32) = COPY $w016 ; CHECK-NEXT: $w0 = COPY %x(s32)17 ; CHECK-NEXT: RET_ReallyLR implicit $w018 %x:_(s32) = COPY $w019 %y:_(s32) = COPY $w120 %add:_(s32) = G_ADD %x, %y21 %sub:_(s32) = G_SUB %add, %y22 $w0 = COPY %sub(s32)23 RET_ReallyLR implicit $w024...25---26# (x + y) - x -> y27name: simplify_to_y28tracksRegLiveness: true29body: |30 bb.0:31 liveins: $w0, $w132 ; CHECK-LABEL: name: simplify_to_y33 ; CHECK: liveins: $w0, $w134 ; CHECK-NEXT: {{ $}}35 ; CHECK-NEXT: %y:_(s32) = COPY $w136 ; CHECK-NEXT: $w0 = COPY %y(s32)37 ; CHECK-NEXT: RET_ReallyLR implicit $w038 %x:_(s32) = COPY $w039 %y:_(s32) = COPY $w140 %add:_(s32) = G_ADD %x, %y41 %sub:_(s32) = G_SUB %add, %x42 $w0 = COPY %sub(s32)43 RET_ReallyLR implicit $w044...45---46# (x + 1) - 1 -> x47name: simplify_to_constant_x48tracksRegLiveness: true49body: |50 bb.0:51 liveins: $w0, $w152 ; CHECK-LABEL: name: simplify_to_constant_x53 ; CHECK: liveins: $w0, $w154 ; CHECK-NEXT: {{ $}}55 ; CHECK-NEXT: %x:_(s32) = COPY $w056 ; CHECK-NEXT: $w0 = COPY %x(s32)57 ; CHECK-NEXT: RET_ReallyLR implicit $w058 %x:_(s32) = COPY $w059 %y1:_(s32) = G_CONSTANT i32 160 %y2:_(s32) = G_CONSTANT i32 161 %add:_(s32) = G_ADD %x, %y162 %sub:_(s32) = G_SUB %add, %y263 $w0 = COPY %sub(s32)64 RET_ReallyLR implicit $w065...66---67# (x + y) - x -> y68name: simplify_to_constant_y69tracksRegLiveness: true70body: |71 bb.0:72 liveins: $w0, $w173 ; CHECK-LABEL: name: simplify_to_constant_y74 ; CHECK: liveins: $w0, $w175 ; CHECK-NEXT: {{ $}}76 ; CHECK-NEXT: %y:_(s32) = COPY $w177 ; CHECK-NEXT: $w0 = COPY %y(s32)78 ; CHECK-NEXT: RET_ReallyLR implicit $w079 %x1:_(s32) = G_CONSTANT i32 180 %x2:_(s32) = G_CONSTANT i32 181 %y:_(s32) = COPY $w182 %add:_(s32) = G_ADD %x1, %y83 %sub:_(s32) = G_SUB %add, %x284 $w0 = COPY %sub(s32)85 RET_ReallyLR implicit $w086...87---88# (x + y) - y -> x89name: vector_simplify_to_x90tracksRegLiveness: true91body: |92 bb.0:93 liveins: $d0, $d194 ; CHECK-LABEL: name: vector_simplify_to_x95 ; CHECK: liveins: $d0, $d196 ; CHECK-NEXT: {{ $}}97 ; CHECK-NEXT: %x:_(<2 x s32>) = COPY $d098 ; CHECK-NEXT: $d0 = COPY %x(<2 x s32>)99 ; CHECK-NEXT: RET_ReallyLR implicit $d0100 %x:_(<2 x s32>) = COPY $d0101 %y:_(<2 x s32>) = COPY $d1102 %add:_(<2 x s32>) = G_ADD %x, %y103 %sub:_(<2 x s32>) = G_SUB %add, %y104 $d0 = COPY %sub(<2 x s32>)105 RET_ReallyLR implicit $d0106...107---108# (x + 1) - 1 -> x109name: splat_simplify_to_x110tracksRegLiveness: true111body: |112 bb.0:113 liveins: $d0, $d1114 ; CHECK-LABEL: name: splat_simplify_to_x115 ; CHECK: liveins: $d0, $d1116 ; CHECK-NEXT: {{ $}}117 ; CHECK-NEXT: %x:_(<2 x s32>) = COPY $d0118 ; CHECK-NEXT: $d0 = COPY %x(<2 x s32>)119 ; CHECK-NEXT: RET_ReallyLR implicit $d0120 %x:_(<2 x s32>) = COPY $d0121 %cst:_(s32) = G_CONSTANT i32 1122 %y1:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst123 %y2:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst124 %add:_(<2 x s32>) = G_ADD %x, %y1125 %sub:_(<2 x s32>) = G_SUB %add, %y2126 $d0 = COPY %sub(<2 x s32>)127 RET_ReallyLR implicit $d0128...129---130# (x + y) - x -> y131name: unique_registers_no_fold132tracksRegLiveness: true133body: |134 bb.0:135 liveins: $w0, $w1, $w2136 ; CHECK-LABEL: name: unique_registers_no_fold137 ; CHECK: liveins: $w0, $w1, $w2138 ; CHECK-NEXT: {{ $}}139 ; CHECK-NEXT: %x:_(s32) = COPY $w0140 ; CHECK-NEXT: %y:_(s32) = COPY $w1141 ; CHECK-NEXT: %z:_(s32) = COPY $w2142 ; CHECK-NEXT: %add:_(s32) = G_ADD %y, %x143 ; CHECK-NEXT: %sub:_(s32) = G_SUB %add, %z144 ; CHECK-NEXT: $w0 = COPY %sub(s32)145 ; CHECK-NEXT: RET_ReallyLR implicit $w0146 %x:_(s32) = COPY $w0147 %y:_(s32) = COPY $w1148 %z:_(s32) = COPY $w2149 %add:_(s32) = G_ADD %y, %x150 %sub:_(s32) = G_SUB %add, %z151 $w0 = COPY %sub(s32)152 RET_ReallyLR implicit $w0153...154---155# (x + y) - x -> y156name: unique_constants_no_fold157tracksRegLiveness: true158body: |159 bb.0:160 liveins: $w0, $w1161 ; CHECK-LABEL: name: unique_constants_no_fold162 ; CHECK: liveins: $w0, $w1163 ; CHECK-NEXT: {{ $}}164 ; CHECK-NEXT: %y:_(s32) = COPY $w1165 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1166 ; CHECK-NEXT: %sub:_(s32) = G_ADD %y, [[C]]167 ; CHECK-NEXT: $w0 = COPY %sub(s32)168 ; CHECK-NEXT: RET_ReallyLR implicit $w0169 %x1:_(s32) = G_CONSTANT i32 1170 %x2:_(s32) = G_CONSTANT i32 2171 %y:_(s32) = COPY $w1172 %add:_(s32) = G_ADD %x1, %y173 %sub:_(s32) = G_SUB %add, %x2174 $w0 = COPY %sub(s32)175 RET_ReallyLR implicit $w0176...177---178# x - (y + x) -> 0 - y179name: simplify_to_neg_y180tracksRegLiveness: true181body: |182 bb.0:183 liveins: $w0, $w1184 ; CHECK-LABEL: name: simplify_to_neg_y185 ; CHECK: liveins: $w0, $w1186 ; CHECK-NEXT: {{ $}}187 ; CHECK-NEXT: %y:_(s32) = COPY $w1188 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0189 ; CHECK-NEXT: %sub:_(s32) = G_SUB [[C]], %y190 ; CHECK-NEXT: $w0 = COPY %sub(s32)191 ; CHECK-NEXT: RET_ReallyLR implicit $w0192 %x:_(s32) = COPY $w0193 %y:_(s32) = COPY $w1194 %add:_(s32) = G_ADD %x, %y195 %sub:_(s32) = G_SUB %x, %add196 $w0 = COPY %sub(s32)197 RET_ReallyLR implicit $w0198...199---200# y - (y + x) -> 0 - x201name: simplify_to_neg_x202tracksRegLiveness: true203body: |204 bb.0:205 liveins: $w0, $w1206 ; CHECK-LABEL: name: simplify_to_neg_x207 ; CHECK: liveins: $w0, $w1208 ; CHECK-NEXT: {{ $}}209 ; CHECK-NEXT: %x:_(s32) = COPY $w0210 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0211 ; CHECK-NEXT: %sub:_(s32) = G_SUB [[C]], %x212 ; CHECK-NEXT: $w0 = COPY %sub(s32)213 ; CHECK-NEXT: RET_ReallyLR implicit $w0214 %x:_(s32) = COPY $w0215 %y:_(s32) = COPY $w1216 %add:_(s32) = G_ADD %x, %y217 %sub:_(s32) = G_SUB %y, %add218 $w0 = COPY %sub(s32)219 RET_ReallyLR implicit $w0220...221---222# x - (y + x) -> 0 - y223name: simplify_to_neg_y_constant224tracksRegLiveness: true225body: |226 bb.0:227 liveins: $w0, $w1228 ; CHECK-LABEL: name: simplify_to_neg_y_constant229 ; CHECK: liveins: $w0, $w1230 ; CHECK-NEXT: {{ $}}231 ; CHECK-NEXT: %y:_(s32) = COPY $w1232 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0233 ; CHECK-NEXT: %sub:_(s32) = G_SUB [[C]], %y234 ; CHECK-NEXT: $w0 = COPY %sub(s32)235 ; CHECK-NEXT: RET_ReallyLR implicit $w0236 %x1:_(s32) = G_CONSTANT i32 1237 %x2:_(s32) = G_CONSTANT i32 1238 %y:_(s32) = COPY $w1239 %add:_(s32) = G_ADD %x1, %y240 %sub:_(s32) = G_SUB %x2, %add241 $w0 = COPY %sub(s32)242 RET_ReallyLR implicit $w0243...244---245# y - (y + x) -> 0 - x246name: simplify_to_neg_x_constant247tracksRegLiveness: true248body: |249 bb.0:250 liveins: $w0, $w1251 ; CHECK-LABEL: name: simplify_to_neg_x_constant252 ; CHECK: liveins: $w0, $w1253 ; CHECK-NEXT: {{ $}}254 ; CHECK-NEXT: %x:_(s32) = COPY $w0255 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0256 ; CHECK-NEXT: %sub:_(s32) = G_SUB [[C]], %x257 ; CHECK-NEXT: $w0 = COPY %sub(s32)258 ; CHECK-NEXT: RET_ReallyLR implicit $w0259 %x:_(s32) = COPY $w0260 %y1:_(s32) = G_CONSTANT i32 1261 %y2:_(s32) = G_CONSTANT i32 1262 %add:_(s32) = G_ADD %x, %y1263 %sub:_(s32) = G_SUB %y2, %add264 $w0 = COPY %sub(s32)265 RET_ReallyLR implicit $w0266...267---268# y - (y + x) -> 0 - x269name: vector_simplify_to_neg_x270tracksRegLiveness: true271body: |272 bb.0:273 liveins: $d0, $d1274 ; CHECK-LABEL: name: vector_simplify_to_neg_x275 ; CHECK: liveins: $d0, $d1276 ; CHECK-NEXT: {{ $}}277 ; CHECK-NEXT: %x:_(<2 x s32>) = COPY $d0278 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0279 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)280 ; CHECK-NEXT: %sub:_(<2 x s32>) = G_SUB [[BUILD_VECTOR]], %x281 ; CHECK-NEXT: $d0 = COPY %sub(<2 x s32>)282 ; CHECK-NEXT: RET_ReallyLR implicit $d0283 %x:_(<2 x s32>) = COPY $d0284 %y:_(<2 x s32>) = COPY $d1285 %add:_(<2 x s32>) = G_ADD %x, %y286 %sub:_(<2 x s32>) = G_SUB %y, %add287 $d0 = COPY %sub(<2 x s32>)288 RET_ReallyLR implicit $d0289...290---291# x - (y + x) -> 0 - y292name: vector_simplify_to_neg_y_constant293tracksRegLiveness: true294body: |295 bb.0:296 liveins: $d0, $d1297 ; CHECK-LABEL: name: vector_simplify_to_neg_y_constant298 ; CHECK: liveins: $d0, $d1299 ; CHECK-NEXT: {{ $}}300 ; CHECK-NEXT: %y:_(<2 x s32>) = COPY $d1301 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0302 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)303 ; CHECK-NEXT: %sub:_(<2 x s32>) = G_SUB [[BUILD_VECTOR]], %y304 ; CHECK-NEXT: $d0 = COPY %sub(<2 x s32>)305 ; CHECK-NEXT: RET_ReallyLR implicit $d0306 %cst:_(s32) = G_CONSTANT i32 1307 %x1:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst308 %x2:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst309 %y:_(<2 x s32>) = COPY $d1310 %add:_(<2 x s32>) = G_ADD %x1, %y311 %sub:_(<2 x s32>) = G_SUB %x2, %add312 $d0 = COPY %sub(<2 x s32>)313 RET_ReallyLR implicit $d0314...315---316# y - (y + x) -> 0 - x317name: unique_registers_neg_no_fold318tracksRegLiveness: true319body: |320 bb.0:321 liveins: $w0, $w1, $w2322 ; CHECK-LABEL: name: unique_registers_neg_no_fold323 ; CHECK: liveins: $w0, $w1, $w2324 ; CHECK-NEXT: {{ $}}325 ; CHECK-NEXT: %x:_(s32) = COPY $w0326 ; CHECK-NEXT: %y:_(s32) = COPY $w1327 ; CHECK-NEXT: %z:_(s32) = COPY $w2328 ; CHECK-NEXT: %add:_(s32) = G_ADD %x, %y329 ; CHECK-NEXT: %sub:_(s32) = G_SUB %z, %add330 ; CHECK-NEXT: $w0 = COPY %sub(s32)331 ; CHECK-NEXT: RET_ReallyLR implicit $w0332 %x:_(s32) = COPY $w0333 %y:_(s32) = COPY $w1334 %z:_(s32) = COPY $w2335 %add:_(s32) = G_ADD %x, %y336 %sub:_(s32) = G_SUB %z, %add337 $w0 = COPY %sub(s32)338 RET_ReallyLR implicit $w0339...340---341# x - (y + x) -> 0 - y342name: wrong_constant_neg_no_fold343tracksRegLiveness: true344body: |345 bb.0:346 liveins: $w0, $w1347 ; CHECK-LABEL: name: wrong_constant_neg_no_fold348 ; CHECK: liveins: $w0, $w1349 ; CHECK-NEXT: {{ $}}350 ; CHECK-NEXT: %x1:_(s32) = G_CONSTANT i32 1351 ; CHECK-NEXT: %y:_(s32) = COPY $w1352 ; CHECK-NEXT: %sub:_(s32) = G_SUB %x1, %y353 ; CHECK-NEXT: $w0 = COPY %sub(s32)354 ; CHECK-NEXT: RET_ReallyLR implicit $w0355 %x1:_(s32) = G_CONSTANT i32 1356 %x2:_(s32) = G_CONSTANT i32 2357 %y:_(s32) = COPY $w1358 %add:_(s32) = G_ADD %x1, %y359 %sub:_(s32) = G_SUB %x2, %add360 $w0 = COPY %sub(s32)361 RET_ReallyLR implicit $w0362