brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.3 KiB · 6a16b5b Raw
316 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - -mtriple=aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs  %s | FileCheck %s3 4# Truncs with a single use get folded.5 6# and(trunc(x), trunc(y)) -> trunc(and(x, y))7---8name:            and_trunc9body:             |10  bb.0:11    liveins: $w0, $w112    ; CHECK-LABEL: name: and_trunc13    ; CHECK: liveins: $w0, $w114    ; CHECK-NEXT: {{  $}}15    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w016    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w117    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[COPY1]]18    ; CHECK-NEXT: $w0 = COPY [[AND]](s32)19    %0:_(s32) = COPY $w020    %1:_(s32) = COPY $w121    %2:_(s16) = G_TRUNC %022    %3:_(s16) = G_TRUNC %123    %4:_(s16) = G_AND %2, %324    %5:_(s32) = G_ANYEXT %425    $w0 = COPY %526...27---28name:            and_trunc_vector29body:             |30  bb.0:31    liveins: $q0, $q132    ; CHECK-LABEL: name: and_trunc_vector33    ; CHECK: liveins: $q0, $q134    ; CHECK-NEXT: {{  $}}35    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q036    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q137    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[COPY]], [[COPY1]]38    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[AND]](<4 x s32>)39    ; CHECK-NEXT: $x0 = COPY [[TRUNC]](<4 x s16>)40    %0:_(<4 x s32>) = COPY $q041    %1:_(<4 x s32>) = COPY $q142    %2:_(<4 x s16>) = G_TRUNC %043    %3:_(<4 x s16>) = G_TRUNC %144    %4:_(<4 x s16>) = G_AND %2, %345    $x0 = COPY %446...47 48# or(trunc(x), trunc(y)) -> trunc(or(x, y))49---50name:            or_trunc51body:             |52  bb.0:53    liveins: $w0, $w154    ; CHECK-LABEL: name: or_trunc55    ; CHECK: liveins: $w0, $w156    ; CHECK-NEXT: {{  $}}57    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w058    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w159    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY]], [[COPY1]]60    ; CHECK-NEXT: $w0 = COPY [[OR]](s32)61    %0:_(s32) = COPY $w062    %1:_(s32) = COPY $w163    %2:_(s16) = G_TRUNC %064    %3:_(s16) = G_TRUNC %165    %4:_(s16) = G_OR %2, %366    %5:_(s32) = G_ANYEXT %467    $w0 = COPY %568...69---70name:            or_trunc_vector71body:             |72  bb.0:73    liveins: $q0, $q174    ; CHECK-LABEL: name: or_trunc_vector75    ; CHECK: liveins: $q0, $q176    ; CHECK-NEXT: {{  $}}77    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q078    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q179    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<4 x s32>) = G_OR [[COPY]], [[COPY1]]80    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[OR]](<4 x s32>)81    ; CHECK-NEXT: $x0 = COPY [[TRUNC]](<4 x s16>)82    %0:_(<4 x s32>) = COPY $q083    %1:_(<4 x s32>) = COPY $q184    %2:_(<4 x s16>) = G_TRUNC %085    %3:_(<4 x s16>) = G_TRUNC %186    %4:_(<4 x s16>) = G_OR %2, %387    $x0 = COPY %488...89 90# xor(trunc(x), trunc(y)) -> trunc(xor(x, y))91---92name:            xor_trunc93body:             |94  bb.0:95    liveins: $w0, $w196    ; CHECK-LABEL: name: xor_trunc97    ; CHECK: liveins: $w0, $w198    ; CHECK-NEXT: {{  $}}99    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0100    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1101    ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY]], [[COPY1]]102    ; CHECK-NEXT: $w0 = COPY [[XOR]](s32)103    %0:_(s32) = COPY $w0104    %1:_(s32) = COPY $w1105    %2:_(s16) = G_TRUNC %0106    %3:_(s16) = G_TRUNC %1107    %4:_(s16) = G_XOR %2, %3108    %5:_(s32) = G_ANYEXT %4109    $w0 = COPY %5110...111---112name:            xor_trunc_vector113body:             |114  bb.0:115    liveins: $q0, $q1116    ; CHECK-LABEL: name: xor_trunc_vector117    ; CHECK: liveins: $q0, $q1118    ; CHECK-NEXT: {{  $}}119    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0120    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1121    ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR [[COPY]], [[COPY1]]122    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[XOR]](<4 x s32>)123    ; CHECK-NEXT: $x0 = COPY [[TRUNC]](<4 x s16>)124    %0:_(<4 x s32>) = COPY $q0125    %1:_(<4 x s32>) = COPY $q1126    %2:_(<4 x s16>) = G_TRUNC %0127    %3:_(<4 x s16>) = G_TRUNC %1128    %4:_(<4 x s16>) = G_XOR %2, %3129    $x0 = COPY %4130...131 132# Truncs with multiple uses do not get folded.133---134name:            or_trunc_multiuse_1135body:             |136  bb.0:137    liveins: $w0, $w1, $x2138    ; CHECK-LABEL: name: or_trunc_multiuse_1139    ; CHECK: liveins: $w0, $w1, $x2140    ; CHECK-NEXT: {{  $}}141    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0142    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1143    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2144    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)145    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)146    ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[COPY2]](p0) :: (store (s16))147    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC]], [[TRUNC1]]148    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)149    ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)150    %0:_(s32) = COPY $w0151    %1:_(s32) = COPY $w1152    %5:_(p0) = COPY $x2153    %2:_(s16) = G_TRUNC %0154    %3:_(s16) = G_TRUNC %1155    G_STORE %2, %5 :: (store (s16))156    %4:_(s16) = G_OR %2, %3157    %6:_(s32) = G_ANYEXT %4158    $w0 = COPY %6159...160---161name:            and_trunc_multiuse_2162body:             |163  bb.0:164    liveins: $w0, $w1, $x2165    ; CHECK-LABEL: name: and_trunc_multiuse_2166    ; CHECK: liveins: $w0, $w1, $x2167    ; CHECK-NEXT: {{  $}}168    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0169    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1170    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2171    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)172    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)173    ; CHECK-NEXT: G_STORE [[TRUNC]](s16), [[COPY2]](p0) :: (store (s16))174    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[TRUNC1]]175    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[AND]](s16)176    ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)177    %0:_(s32) = COPY $w0178    %1:_(s32) = COPY $w1179    %5:_(p0) = COPY $x2180    %2:_(s16) = G_TRUNC %0181    %3:_(s16) = G_TRUNC %1182    G_STORE %2, %5 :: (store (s16))183    %4:_(s16) = G_AND %2, %3184    %6:_(s32) = G_ANYEXT %4185    $w0 = COPY %6186...187---188name:            xor_trunc_vector_multiuse189body:             |190  bb.0:191    liveins: $w0, $w1, $x2192    ; CHECK-LABEL: name: xor_trunc_vector_multiuse193    ; CHECK: liveins: $w0, $w1, $x2194    ; CHECK-NEXT: {{  $}}195    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0196    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1197    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2198    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY]](<4 x s32>)199    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY1]](<4 x s32>)200    ; CHECK-NEXT: G_STORE [[TRUNC]](<4 x s16>), [[COPY2]](p0) :: (store (<4 x s16>))201    ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s16>) = G_XOR [[TRUNC]], [[TRUNC1]]202    ; CHECK-NEXT: $x0 = COPY [[XOR]](<4 x s16>)203    %0:_(<4 x s32>) = COPY $q0204    %1:_(<4 x s32>) = COPY $q1205    %5:_(p0) = COPY $x2206    %2:_(<4 x s16>) = G_TRUNC %0207    %3:_(<4 x s16>) = G_TRUNC %1208    G_STORE %2, %5 :: (store (<4 x s16>))209    %4:_(<4 x s16>) = G_XOR %2, %3210    $x0 = COPY %4211...212 213# Freezes should get pushed through truncs.214 215# This optimizes the pattern where `select(cond, T, 0)` gets converted to216# `and(cond, freeze(T))`.217 218# and(freeze(trunc(x)), trunc(y)) -> trunc(and(freeze(x), y))219---220name:            and_trunc_freeze221body:             |222  bb.0:223    liveins: $w0, $w1224    ; CHECK-LABEL: name: and_trunc_freeze225    ; CHECK: liveins: $w0, $w1226    ; CHECK-NEXT: {{  $}}227    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0228    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1229    ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]230    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[FREEZE]], [[COPY1]]231    ; CHECK-NEXT: $w0 = COPY [[AND]](s32)232    %0:_(s32) = COPY $w0233    %1:_(s32) = COPY $w1234    %2:_(s16) = G_TRUNC %0235    %3:_(s16) = G_TRUNC %1236    %6:_(s16) = G_FREEZE %2237    %4:_(s16) = G_AND %6, %3238    %5:_(s32) = G_ANYEXT %4239    $w0 = COPY %5240...241 242# and(freeze(trunc(x)), freeze(trunc(y))) -> trunc(and(freeze(x), freeze(y)))243---244name:            and_trunc_freeze_both245body:             |246  bb.0:247    liveins: $w0, $w1248    ; CHECK-LABEL: name: and_trunc_freeze_both249    ; CHECK: liveins: $w0, $w1250    ; CHECK-NEXT: {{  $}}251    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0252    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1253    ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]254    ; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s32) = G_FREEZE [[COPY1]]255    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[FREEZE]], [[FREEZE1]]256    ; CHECK-NEXT: $w0 = COPY [[AND]](s32)257    %0:_(s32) = COPY $w0258    %1:_(s32) = COPY $w1259    %2:_(s16) = G_TRUNC %0260    %3:_(s16) = G_TRUNC %1261    %6:_(s16) = G_FREEZE %2262    %7:_(s16) = G_FREEZE %3263    %4:_(s16) = G_AND %6, %7264    %5:_(s32) = G_ANYEXT %4265    $w0 = COPY %5266...267 268# The freeze fold is less important for G_OR and G_XOR, however it can still269# trigger.270---271name:            or_trunc_freeze272body:             |273  bb.0:274    liveins: $w0, $w1275    ; CHECK-LABEL: name: or_trunc_freeze276    ; CHECK: liveins: $w0, $w1277    ; CHECK-NEXT: {{  $}}278    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0279    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1280    ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]281    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[FREEZE]], [[COPY1]]282    ; CHECK-NEXT: $w0 = COPY [[OR]](s32)283    %0:_(s32) = COPY $w0284    %1:_(s32) = COPY $w1285    %2:_(s16) = G_TRUNC %0286    %3:_(s16) = G_TRUNC %1287    %6:_(s16) = G_FREEZE %2288    %4:_(s16) = G_OR %6, %3289    %5:_(s32) = G_ANYEXT %4290    $w0 = COPY %5291...292---293name:            xor_trunc_freeze_both294body:             |295  bb.0:296    liveins: $w0, $w1297    ; CHECK-LABEL: name: xor_trunc_freeze_both298    ; CHECK: liveins: $w0, $w1299    ; CHECK-NEXT: {{  $}}300    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0301    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1302    ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]303    ; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s32) = G_FREEZE [[COPY1]]304    ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FREEZE]], [[FREEZE1]]305    ; CHECK-NEXT: $w0 = COPY [[XOR]](s32)306    %0:_(s32) = COPY $w0307    %1:_(s32) = COPY $w1308    %2:_(s16) = G_TRUNC %0309    %3:_(s16) = G_TRUNC %1310    %6:_(s16) = G_FREEZE %2311    %7:_(s16) = G_FREEZE %3312    %4:_(s16) = G_XOR %6, %7313    %5:_(s32) = G_ANYEXT %4314    $w0 = COPY %5315...316