364 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FAST3# RUN: llc -mtriple=aarch64-unknown-unknown -mattr=+addr-lsl-slow-14 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SLOW4 5--- |6 define void @strxrox(ptr %addr) { ret void }7 define void @strxrox_p0(ptr %addr) { ret void }8 define void @strdrox(ptr %addr) { ret void }9 define void @strwrox(ptr %addr) { ret void }10 define void @strsrox(ptr %addr) { ret void }11 define void @strhrox(ptr %addr) { ret void }12 define void @strqrox(ptr %addr) { ret void }13 define void @shl_fast_3(ptr %addr) { ret void }14 define void @shl_slow_1(ptr %addr) { ret void }15 define void @shl_slow_1_more_than_one_use(ptr %addr) { ret void }16 define void @shl_slow_4(ptr %addr) { ret void }17 define void @shl_slow_4_more_than_one_use(ptr %addr) { ret void }18 define void @shl_p0(ptr %addr) { ret void }19...20 21---22name: strxrox23alignment: 424legalized: true25regBankSelected: true26tracksRegLiveness: true27machineFunctionInfo: {}28body: |29 bb.0:30 liveins: $x0, $x1, $x231 ; CHECK-LABEL: name: strxrox32 ; CHECK: liveins: $x0, $x1, $x233 ; CHECK-NEXT: {{ $}}34 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x035 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x136 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x237 ; CHECK-NEXT: STRXroX [[COPY2]], [[COPY]], [[COPY1]], 0, 0 :: (store (s64) into %ir.addr)38 %0:gpr(p0) = COPY $x039 %1:gpr(s64) = COPY $x140 %ptr:gpr(p0) = G_PTR_ADD %0, %141 %3:gpr(s64) = COPY $x242 G_STORE %3, %ptr :: (store (s64) into %ir.addr)43...44---45name: strxrox_p046alignment: 447legalized: true48regBankSelected: true49tracksRegLiveness: true50machineFunctionInfo: {}51body: |52 bb.0:53 liveins: $x0, $x1, $x254 ; CHECK-LABEL: name: strxrox_p055 ; CHECK: liveins: $x0, $x1, $x256 ; CHECK-NEXT: {{ $}}57 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x058 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x159 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64all = COPY $x260 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr64 = COPY [[COPY2]]61 ; CHECK-NEXT: STRXroX [[COPY3]], [[COPY]], [[COPY1]], 0, 0 :: (store (p0) into %ir.addr)62 %0:gpr(p0) = COPY $x063 %1:gpr(s64) = COPY $x164 %ptr:gpr(p0) = G_PTR_ADD %0, %165 %3:gpr(p0) = COPY $x266 G_STORE %3, %ptr :: (store (p0) into %ir.addr)67...68---69name: strdrox70alignment: 471legalized: true72regBankSelected: true73tracksRegLiveness: true74machineFunctionInfo: {}75body: |76 bb.0:77 liveins: $x0, $x1, $d278 ; CHECK-LABEL: name: strdrox79 ; CHECK: liveins: $x0, $x1, $d280 ; CHECK-NEXT: {{ $}}81 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x082 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x183 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr64 = COPY $d284 ; CHECK-NEXT: STRDroX [[COPY2]], [[COPY]], [[COPY1]], 0, 0 :: (store (s64) into %ir.addr)85 %0:gpr(p0) = COPY $x086 %1:gpr(s64) = COPY $x187 %ptr:gpr(p0) = G_PTR_ADD %0, %188 %3:fpr(s64) = COPY $d289 G_STORE %3, %ptr :: (store (s64) into %ir.addr)90...91---92name: strwrox93alignment: 494legalized: true95regBankSelected: true96tracksRegLiveness: true97machineFunctionInfo: {}98body: |99 bb.0:100 liveins: $x0, $x1, $w2101 ; CHECK-LABEL: name: strwrox102 ; CHECK: liveins: $x0, $x1, $w2103 ; CHECK-NEXT: {{ $}}104 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0105 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1106 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY $w2107 ; CHECK-NEXT: STRWroX [[COPY2]], [[COPY]], [[COPY1]], 0, 0 :: (store (s32) into %ir.addr)108 %0:gpr(p0) = COPY $x0109 %1:gpr(s64) = COPY $x1110 %ptr:gpr(p0) = G_PTR_ADD %0, %1111 %3:gpr(s32) = COPY $w2112 G_STORE %3, %ptr :: (store (s32) into %ir.addr)113...114---115name: strsrox116alignment: 4117legalized: true118regBankSelected: true119tracksRegLiveness: true120machineFunctionInfo: {}121body: |122 bb.0:123 liveins: $x0, $x1, $s2124 ; CHECK-LABEL: name: strsrox125 ; CHECK: liveins: $x0, $x1, $s2126 ; CHECK-NEXT: {{ $}}127 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0128 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1129 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr32 = COPY $s2130 ; CHECK-NEXT: STRSroX [[COPY2]], [[COPY]], [[COPY1]], 0, 0 :: (store (s32) into %ir.addr)131 %0:gpr(p0) = COPY $x0132 %1:gpr(s64) = COPY $x1133 %ptr:gpr(p0) = G_PTR_ADD %0, %1134 %3:fpr(s32) = COPY $s2135 G_STORE %3, %ptr :: (store (s32) into %ir.addr)136...137---138name: strhrox139alignment: 4140legalized: true141regBankSelected: true142tracksRegLiveness: true143machineFunctionInfo: {}144body: |145 bb.0:146 liveins: $x0, $x1, $h0147 ; CHECK-LABEL: name: strhrox148 ; CHECK: liveins: $x0, $x1, $h0149 ; CHECK-NEXT: {{ $}}150 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0151 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1152 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr16 = COPY $h0153 ; CHECK-NEXT: STRHroX [[COPY2]], [[COPY]], [[COPY1]], 0, 0 :: (store (s16) into %ir.addr)154 %0:gpr(p0) = COPY $x0155 %1:gpr(s64) = COPY $x1156 %ptr:gpr(p0) = G_PTR_ADD %0, %1157 %3:fpr(s16) = COPY $h0158 G_STORE %3, %ptr :: (store (s16) into %ir.addr)159...160---161name: strqrox162alignment: 4163legalized: true164regBankSelected: true165tracksRegLiveness: true166machineFunctionInfo: {}167body: |168 bb.0:169 liveins: $x0, $x1, $q2170 ; CHECK-LABEL: name: strqrox171 ; CHECK: liveins: $x0, $x1, $q2172 ; CHECK-NEXT: {{ $}}173 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0174 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1175 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr128 = COPY $q2176 ; CHECK-NEXT: STRQroX [[COPY2]], [[COPY]], [[COPY1]], 0, 0 :: (store (<2 x s64>) into %ir.addr)177 %0:gpr(p0) = COPY $x0178 %1:gpr(s64) = COPY $x1179 %ptr:gpr(p0) = G_PTR_ADD %0, %1180 %2:fpr(<2 x s64>) = COPY $q2181 G_STORE %2, %ptr :: (store (<2 x s64>) into %ir.addr)182...183---184name: shl_fast_3185alignment: 4186legalized: true187regBankSelected: true188tracksRegLiveness: true189machineFunctionInfo: {}190body: |191 bb.0:192 liveins: $x0, $x1, $x2193 ; CHECK-LABEL: name: shl_fast_3194 ; CHECK: liveins: $x0, $x1, $x2195 ; CHECK-NEXT: {{ $}}196 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0197 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x1198 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x2199 ; CHECK-NEXT: STRXroX [[COPY2]], [[COPY1]], [[COPY]], 0, 1 :: (store (s64) into %ir.addr)200 %0:gpr(s64) = COPY $x0201 %1:gpr(s64) = G_CONSTANT i64 3202 %2:gpr(s64) = G_SHL %0, %1(s64)203 %3:gpr(p0) = COPY $x1204 %ptr:gpr(p0) = G_PTR_ADD %3, %2205 %4:gpr(s64) = COPY $x2206 G_STORE %4, %ptr :: (store (s64) into %ir.addr)207...208---209name: shl_slow_1210alignment: 4211legalized: true212regBankSelected: true213tracksRegLiveness: true214machineFunctionInfo: {}215body: |216 bb.0:217 liveins: $x0, $x1, $x2218 ; CHECK-LABEL: name: shl_slow_1219 ; CHECK: liveins: $x0, $x1, $x2220 ; CHECK-NEXT: {{ $}}221 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0222 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x1223 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x2224 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY [[COPY2]].sub_32225 ; CHECK-NEXT: STRHHroX [[COPY3]], [[COPY1]], [[COPY]], 0, 1 :: (store (s16) into %ir.addr)226 %0:gpr(s64) = COPY $x0227 %1:gpr(s64) = G_CONSTANT i64 1228 %2:gpr(s64) = G_SHL %0, %1(s64)229 %3:gpr(p0) = COPY $x1230 %ptr:gpr(p0) = G_PTR_ADD %3, %2231 %4:gpr(s64) = COPY $x2232 G_STORE %4, %ptr :: (store (s16) into %ir.addr)233...234---235name: shl_slow_1_more_than_one_use236alignment: 4237legalized: true238regBankSelected: true239tracksRegLiveness: true240machineFunctionInfo: {}241body: |242 bb.0:243 liveins: $x0, $x1, $x2244 ; CHECK-FAST-LABEL: name: shl_slow_1_more_than_one_use245 ; CHECK-FAST: liveins: $x0, $x1, $x2246 ; CHECK-FAST-NEXT: {{ $}}247 ; CHECK-FAST-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0248 ; CHECK-FAST-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x1249 ; CHECK-FAST-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x2250 ; CHECK-FAST-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY [[COPY2]].sub_32251 ; CHECK-FAST-NEXT: STRHHroX [[COPY3]], [[COPY1]], [[COPY]], 0, 1 :: (store (s16) into %ir.addr)252 ; CHECK-FAST-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY [[COPY2]].sub_32253 ; CHECK-FAST-NEXT: STRHHroX [[COPY4]], [[COPY1]], [[COPY]], 0, 1 :: (store (s16) into %ir.addr)254 ;255 ; CHECK-SLOW-LABEL: name: shl_slow_1_more_than_one_use256 ; CHECK-SLOW: liveins: $x0, $x1, $x2257 ; CHECK-SLOW-NEXT: {{ $}}258 ; CHECK-SLOW-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0259 ; CHECK-SLOW-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1260 ; CHECK-SLOW-NEXT: %ptr:gpr64common = ADDXrs [[COPY1]], [[COPY]], 1261 ; CHECK-SLOW-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x2262 ; CHECK-SLOW-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY [[COPY2]].sub_32263 ; CHECK-SLOW-NEXT: STRHHui [[COPY3]], %ptr, 0 :: (store (s16) into %ir.addr)264 ; CHECK-SLOW-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY [[COPY2]].sub_32265 ; CHECK-SLOW-NEXT: STRHHui [[COPY4]], %ptr, 0 :: (store (s16) into %ir.addr)266 %0:gpr(s64) = COPY $x0267 %1:gpr(s64) = G_CONSTANT i64 1268 %2:gpr(s64) = G_SHL %0, %1(s64)269 %3:gpr(p0) = COPY $x1270 %ptr:gpr(p0) = G_PTR_ADD %3, %2271 %4:gpr(s64) = COPY $x2272 %5:gpr(s16) = G_TRUNC %4273 G_STORE %4, %ptr :: (store (s16) into %ir.addr)274 G_STORE %4, %ptr :: (store (s16) into %ir.addr)275...276---277name: shl_slow_4278alignment: 4279legalized: true280regBankSelected: true281tracksRegLiveness: true282machineFunctionInfo: {}283body: |284 bb.0:285 liveins: $x0, $x1, $x2, $q0286 ; CHECK-LABEL: name: shl_slow_4287 ; CHECK: liveins: $x0, $x1, $x2, $q0288 ; CHECK-NEXT: {{ $}}289 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0290 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x1291 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr128 = COPY $q0292 ; CHECK-NEXT: STRQroX [[COPY2]], [[COPY1]], [[COPY]], 0, 1 :: (store (s128) into %ir.addr)293 %0:gpr(s64) = COPY $x0294 %1:gpr(s64) = G_CONSTANT i64 4295 %2:gpr(s64) = G_SHL %0, %1(s64)296 %3:gpr(p0) = COPY $x1297 %ptr:gpr(p0) = G_PTR_ADD %3, %2298 %5:fpr(s128) = COPY $q0299 G_STORE %5, %ptr :: (store (s128) into %ir.addr)300...301---302name: shl_slow_4_more_than_one_use303alignment: 4304legalized: true305regBankSelected: true306tracksRegLiveness: true307machineFunctionInfo: {}308body: |309 bb.0:310 liveins: $x0, $x1, $x2, $q0311 ; CHECK-FAST-LABEL: name: shl_slow_4_more_than_one_use312 ; CHECK-FAST: liveins: $x0, $x1, $x2, $q0313 ; CHECK-FAST-NEXT: {{ $}}314 ; CHECK-FAST-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0315 ; CHECK-FAST-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x1316 ; CHECK-FAST-NEXT: [[COPY2:%[0-9]+]]:fpr128 = COPY $q0317 ; CHECK-FAST-NEXT: STRQroX [[COPY2]], [[COPY1]], [[COPY]], 0, 1 :: (store (s128) into %ir.addr)318 ; CHECK-FAST-NEXT: STRQroX [[COPY2]], [[COPY1]], [[COPY]], 0, 1 :: (store (s128) into %ir.addr)319 ;320 ; CHECK-SLOW-LABEL: name: shl_slow_4_more_than_one_use321 ; CHECK-SLOW: liveins: $x0, $x1, $x2, $q0322 ; CHECK-SLOW-NEXT: {{ $}}323 ; CHECK-SLOW-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0324 ; CHECK-SLOW-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1325 ; CHECK-SLOW-NEXT: %ptr:gpr64common = ADDXrs [[COPY1]], [[COPY]], 4326 ; CHECK-SLOW-NEXT: [[COPY2:%[0-9]+]]:fpr128 = COPY $q0327 ; CHECK-SLOW-NEXT: STRQui [[COPY2]], %ptr, 0 :: (store (s128) into %ir.addr)328 ; CHECK-SLOW-NEXT: STRQui [[COPY2]], %ptr, 0 :: (store (s128) into %ir.addr)329 %0:gpr(s64) = COPY $x0330 %1:gpr(s64) = G_CONSTANT i64 4331 %2:gpr(s64) = G_SHL %0, %1(s64)332 %3:gpr(p0) = COPY $x1333 %ptr:gpr(p0) = G_PTR_ADD %3, %2334 %5:fpr(s128) = COPY $q0335 G_STORE %5, %ptr :: (store (s128) into %ir.addr)336 G_STORE %5, %ptr :: (store (s128) into %ir.addr)337...338---339name: shl_p0340alignment: 4341legalized: true342regBankSelected: true343tracksRegLiveness: true344machineFunctionInfo: {}345body: |346 bb.0:347 liveins: $x0, $x1, $x2348 ; CHECK-LABEL: name: shl_p0349 ; CHECK: liveins: $x0, $x1, $x2350 ; CHECK-NEXT: {{ $}}351 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0352 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x1353 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64all = COPY $x2354 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr64 = COPY [[COPY2]]355 ; CHECK-NEXT: STRXroX [[COPY3]], [[COPY1]], [[COPY]], 0, 1 :: (store (p0) into %ir.addr)356 %0:gpr(s64) = COPY $x0357 %1:gpr(s64) = G_CONSTANT i64 3358 %2:gpr(s64) = G_SHL %0, %1(s64)359 %3:gpr(p0) = COPY $x1360 %ptr:gpr(p0) = G_PTR_ADD %3, %2361 %4:gpr(p0) = COPY $x2362 G_STORE %4, %ptr :: (store (p0) into %ir.addr)363...364