273 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs -run-pass=legalizer %s -o - | FileCheck %s3# RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs -mattr=+cssc -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=CHECK-CSSC4 5...6---7name: s88tracksRegLiveness: true9body: |10 bb.0:11 liveins: $w012 ; CHECK-LABEL: name: s813 ; CHECK: liveins: $w014 ; CHECK-NEXT: {{ $}}15 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF16 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 25617 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]18 ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[OR]]19 ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s32) = G_CTLZ [[BITREVERSE]](s32)20 ; CHECK-NEXT: $w0 = COPY [[CTLZ]](s32)21 ; CHECK-NEXT: RET_ReallyLR implicit $w022 ;23 ; CHECK-CSSC-LABEL: name: s824 ; CHECK-CSSC: liveins: $w025 ; CHECK-CSSC-NEXT: {{ $}}26 ; CHECK-CSSC-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF27 ; CHECK-CSSC-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 25628 ; CHECK-CSSC-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]29 ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s32) = G_CTTZ [[OR]](s32)30 ; CHECK-CSSC-NEXT: $w0 = COPY [[CTTZ]](s32)31 ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $w032 %val:_(s8) = G_IMPLICIT_DEF33 %cttz:_(s8) = G_CTTZ %val(s8)34 %ext:_(s32) = G_ANYEXT %cttz(s8)35 $w0 = COPY %ext(s32)36 RET_ReallyLR implicit $w037 38...39---40name: s1641tracksRegLiveness: true42body: |43 bb.0:44 liveins: $w045 ; CHECK-LABEL: name: s1646 ; CHECK: liveins: $w047 ; CHECK-NEXT: {{ $}}48 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF49 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 6553650 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]51 ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[OR]]52 ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s32) = G_CTLZ [[BITREVERSE]](s32)53 ; CHECK-NEXT: $w0 = COPY [[CTLZ]](s32)54 ; CHECK-NEXT: RET_ReallyLR implicit $w055 ;56 ; CHECK-CSSC-LABEL: name: s1657 ; CHECK-CSSC: liveins: $w058 ; CHECK-CSSC-NEXT: {{ $}}59 ; CHECK-CSSC-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF60 ; CHECK-CSSC-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 6553661 ; CHECK-CSSC-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[DEF]], [[C]]62 ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s32) = G_CTTZ [[OR]](s32)63 ; CHECK-CSSC-NEXT: $w0 = COPY [[CTTZ]](s32)64 ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $w065 %val:_(s16) = G_IMPLICIT_DEF66 %cttz:_(s16) = G_CTTZ %val(s16)67 %ext:_(s32) = G_ANYEXT %cttz(s16)68 $w0 = COPY %ext(s32)69 RET_ReallyLR implicit $w070 71...72---73name: s3274alignment: 475tracksRegLiveness: true76body: |77 bb.0:78 liveins: $w079 80 ; CHECK-LABEL: name: s3281 ; CHECK: liveins: $w082 ; CHECK-NEXT: {{ $}}83 ; CHECK-NEXT: %val:_(s32) = COPY $w084 ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE %val85 ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s32) = G_CTLZ [[BITREVERSE]](s32)86 ; CHECK-NEXT: $w0 = COPY [[CTLZ]](s32)87 ; CHECK-NEXT: RET_ReallyLR implicit $w088 ;89 ; CHECK-CSSC-LABEL: name: s3290 ; CHECK-CSSC: liveins: $w091 ; CHECK-CSSC-NEXT: {{ $}}92 ; CHECK-CSSC-NEXT: %val:_(s32) = COPY $w093 ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s32) = G_CTTZ %val(s32)94 ; CHECK-CSSC-NEXT: $w0 = COPY [[CTTZ]](s32)95 ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $w096 %val:_(s32) = COPY $w097 %1:_(s32) = G_CTTZ %val(s32)98 $w0 = COPY %1(s32)99 RET_ReallyLR implicit $w0100 101...102---103name: s64104alignment: 4105tracksRegLiveness: true106body: |107 bb.0:108 liveins: $x0109 110 ; CHECK-LABEL: name: s64111 ; CHECK: liveins: $x0112 ; CHECK-NEXT: {{ $}}113 ; CHECK-NEXT: %val:_(s64) = COPY $x0114 ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s64) = G_BITREVERSE %val115 ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[BITREVERSE]](s64)116 ; CHECK-NEXT: $x0 = COPY [[CTLZ]](s64)117 ; CHECK-NEXT: RET_ReallyLR implicit $x0118 ;119 ; CHECK-CSSC-LABEL: name: s64120 ; CHECK-CSSC: liveins: $x0121 ; CHECK-CSSC-NEXT: {{ $}}122 ; CHECK-CSSC-NEXT: %val:_(s64) = COPY $x0123 ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s64) = G_CTTZ %val(s64)124 ; CHECK-CSSC-NEXT: $x0 = COPY [[CTTZ]](s64)125 ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $x0126 %val:_(s64) = COPY $x0127 %1:_(s64) = G_CTTZ %val(s64)128 $x0 = COPY %1(s64)129 RET_ReallyLR implicit $x0130...131---132name: v4s32133alignment: 4134tracksRegLiveness: true135body: |136 bb.0:137 liveins: $q0138 139 ; CHECK-LABEL: name: v4s32140 ; CHECK: liveins: $q0141 ; CHECK-NEXT: {{ $}}142 ; CHECK-NEXT: %val:_(<4 x s32>) = COPY $q0143 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1144 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)145 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR %val, [[BUILD_VECTOR]]146 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s32>) = G_ADD %val, [[BUILD_VECTOR]]147 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[XOR]], [[ADD]]148 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<16 x s8>) = G_BITCAST [[AND]](<4 x s32>)149 ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(<16 x s8>) = G_CTPOP [[BITCAST]](<16 x s8>)150 ; CHECK-NEXT: [[UADDLP:%[0-9]+]]:_(<8 x s16>) = G_UADDLP [[CTPOP]]151 ; CHECK-NEXT: [[UADDLP1:%[0-9]+]]:_(<4 x s32>) = G_UADDLP [[UADDLP]]152 ; CHECK-NEXT: $q0 = COPY [[UADDLP1]](<4 x s32>)153 ; CHECK-NEXT: RET_ReallyLR implicit $q0154 ;155 ; CHECK-CSSC-LABEL: name: v4s32156 ; CHECK-CSSC: liveins: $q0157 ; CHECK-CSSC-NEXT: {{ $}}158 ; CHECK-CSSC-NEXT: %val:_(<4 x s32>) = COPY $q0159 ; CHECK-CSSC-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1160 ; CHECK-CSSC-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)161 ; CHECK-CSSC-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR %val, [[BUILD_VECTOR]]162 ; CHECK-CSSC-NEXT: [[ADD:%[0-9]+]]:_(<4 x s32>) = G_ADD %val, [[BUILD_VECTOR]]163 ; CHECK-CSSC-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[XOR]], [[ADD]]164 ; CHECK-CSSC-NEXT: [[BITCAST:%[0-9]+]]:_(<16 x s8>) = G_BITCAST [[AND]](<4 x s32>)165 ; CHECK-CSSC-NEXT: [[CTPOP:%[0-9]+]]:_(<16 x s8>) = G_CTPOP [[BITCAST]](<16 x s8>)166 ; CHECK-CSSC-NEXT: [[UADDLP:%[0-9]+]]:_(<8 x s16>) = G_UADDLP [[CTPOP]]167 ; CHECK-CSSC-NEXT: [[UADDLP1:%[0-9]+]]:_(<4 x s32>) = G_UADDLP [[UADDLP]]168 ; CHECK-CSSC-NEXT: $q0 = COPY [[UADDLP1]](<4 x s32>)169 ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $q0170 %val:_(<4 x s32>) = COPY $q0171 %1:_(<4 x s32>) = G_CTTZ %val(<4 x s32>)172 $q0 = COPY %1(<4 x s32>)173 RET_ReallyLR implicit $q0174 175...176---177name: s35178alignment: 4179tracksRegLiveness: true180body: |181 bb.1:182 liveins: $x0183 184 ; CHECK-LABEL: name: s35185 ; CHECK: liveins: $x0186 ; CHECK-NEXT: {{ $}}187 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0188 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738368189 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[C]]190 ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s64) = G_BITREVERSE [[OR]]191 ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[BITREVERSE]](s64)192 ; CHECK-NEXT: $x0 = COPY [[CTLZ]](s64)193 ; CHECK-NEXT: RET_ReallyLR implicit $x0194 ;195 ; CHECK-CSSC-LABEL: name: s35196 ; CHECK-CSSC: liveins: $x0197 ; CHECK-CSSC-NEXT: {{ $}}198 ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0199 ; CHECK-CSSC-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738368200 ; CHECK-CSSC-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[C]]201 ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s64) = G_CTTZ [[OR]](s64)202 ; CHECK-CSSC-NEXT: $x0 = COPY [[CTTZ]](s64)203 ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $x0204 %1:_(s64) = COPY $x0205 %0:_(s35) = G_TRUNC %1(s64)206 %2:_(s35) = G_CTTZ %0(s35)207 %3:_(s64) = G_ANYEXT %2(s35)208 $x0 = COPY %3(s64)209 RET_ReallyLR implicit $x0210...211---212name: s65213alignment: 4214tracksRegLiveness: true215body: |216 bb.1:217 liveins: $x0, $x1218 219 ; CHECK-LABEL: name: s65220 ; CHECK: liveins: $x0, $x1221 ; CHECK-NEXT: {{ $}}222 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0223 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1224 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0225 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2226 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[C]]227 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[COPY1]], [[C1]]228 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[OR]](s64), [[C]]229 ; CHECK-NEXT: [[BITREVERSE:%[0-9]+]]:_(s64) = G_BITREVERSE [[OR1]]230 ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[BITREVERSE]](s64)231 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 64232 ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[CTLZ]], [[C2]]233 ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[C]], [[C]], [[UADDO1]]234 ; CHECK-NEXT: [[BITREVERSE1:%[0-9]+]]:_(s64) = G_BITREVERSE [[OR]]235 ; CHECK-NEXT: [[CTLZ1:%[0-9]+]]:_(s64) = G_CTLZ [[BITREVERSE1]](s64)236 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[UADDO]], [[CTLZ1]]237 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[UADDE]], [[C]]238 ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)239 ; CHECK-NEXT: $x1 = COPY [[SELECT1]](s64)240 ; CHECK-NEXT: RET_ReallyLR implicit $x0, implicit $x1241 ;242 ; CHECK-CSSC-LABEL: name: s65243 ; CHECK-CSSC: liveins: $x0, $x1244 ; CHECK-CSSC-NEXT: {{ $}}245 ; CHECK-CSSC-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0246 ; CHECK-CSSC-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1247 ; CHECK-CSSC-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0248 ; CHECK-CSSC-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2249 ; CHECK-CSSC-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[C]]250 ; CHECK-CSSC-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[COPY1]], [[C1]]251 ; CHECK-CSSC-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[OR]](s64), [[C]]252 ; CHECK-CSSC-NEXT: [[CTTZ:%[0-9]+]]:_(s64) = G_CTTZ [[OR1]](s64)253 ; CHECK-CSSC-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 64254 ; CHECK-CSSC-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[CTTZ]], [[C2]]255 ; CHECK-CSSC-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[C]], [[C]], [[UADDO1]]256 ; CHECK-CSSC-NEXT: [[CTTZ1:%[0-9]+]]:_(s64) = G_CTTZ [[OR]](s64)257 ; CHECK-CSSC-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[UADDO]], [[CTTZ1]]258 ; CHECK-CSSC-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[UADDE]], [[C]]259 ; CHECK-CSSC-NEXT: $x0 = COPY [[SELECT]](s64)260 ; CHECK-CSSC-NEXT: $x1 = COPY [[SELECT1]](s64)261 ; CHECK-CSSC-NEXT: RET_ReallyLR implicit $x0, implicit $x1262 %1:_(s64) = COPY $x0263 %2:_(s64) = COPY $x1264 %3:_(s128) = G_MERGE_VALUES %1(s64), %2(s64)265 %0:_(s65) = G_TRUNC %3(s128)266 %4:_(s65) = G_CTTZ %0(s65)267 %7:_(s128) = G_ANYEXT %4(s65)268 %5:_(s64), %6:_(s64) = G_UNMERGE_VALUES %7(s128)269 $x0 = COPY %5(s64)270 $x1 = COPY %6(s64)271 RET_ReallyLR implicit $x0, implicit $x1272...273