377 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 42# RUN: llc %s -mtriple=riscv64 -run-pass=peephole-opt -o - | FileCheck %s3 4# Make sure we shouldn't replace the %2 ADDI with the $x10 ADDI since it has a5# physical register destination.6 7--- |8 define void @foo(i32 signext %0) {9 tail call void @bar(i32 1)10 %2 = icmp ugt i32 %0, 111 br i1 %2, label %3, label %412 13 3: ; preds = %114 tail call void @bar(i32 3)15 ret void16 17 4: ; preds = %118 ret void19 }20 21 define void @ule_negone(ptr %a, i32 signext %b, ptr %c, ptr %d) {22 store i32 0, ptr %a23 %p = icmp ule i32 %b, -124 br i1 %p, label %block1, label %block225 26 block1: ; preds = %027 store i32 %b, ptr %c28 br label %end_block29 30 block2: ; preds = %031 store i32 87, ptr %d32 br label %end_block33 34 end_block: ; preds = %block2, %block135 ret void36 }37 38 define void @ult_zero(ptr %a, i32 signext %b, ptr %c, ptr %d) {39 store i32 -1, ptr %a40 %p = icmp ult i32 %b, 041 br i1 %p, label %block1, label %block242 43 block1: ; preds = %044 store i32 %b, ptr %c45 br label %end_block46 47 block2: ; preds = %048 store i32 87, ptr %d49 br label %end_block50 51 end_block: ; preds = %block2, %block152 ret void53 }54 55 define void @sle_zero(ptr %a, i32 signext %b, ptr %c, ptr %d) {56 store i32 1, ptr %a57 %p = icmp sle i32 %b, 058 br i1 %p, label %block1, label %block259 60 block1: ; preds = %061 store i32 %b, ptr %c62 br label %end_block63 64 block2: ; preds = %065 store i32 87, ptr %d66 br label %end_block67 68 end_block: ; preds = %block2, %block169 ret void70 }71 72 define void @slt_zero(ptr %a, i32 signext %b, ptr %c, ptr %d) {73 store i32 -1, ptr %a74 %p = icmp slt i32 %b, 075 br i1 %p, label %block1, label %block276 77 block1: ; preds = %078 store i32 %b, ptr %c79 br label %end_block80 81 block2: ; preds = %082 store i32 87, ptr %d83 br label %end_block84 85 end_block: ; preds = %block2, %block186 ret void87 }88 89 declare void @bar(...)90 91...92---93name: foo94tracksRegLiveness: true95body: |96 ; CHECK-LABEL: name: foo97 ; CHECK: bb.0 (%ir-block.1):98 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)99 ; CHECK-NEXT: liveins: $x10100 ; CHECK-NEXT: {{ $}}101 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10102 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $x2, implicit $x2103 ; CHECK-NEXT: $x10 = ADDI $x0, 1104 ; CHECK-NEXT: PseudoCALL target-flags(riscv-call) @bar, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit-def $x2105 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $x2, implicit $x2106 ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, 2107 ; CHECK-NEXT: BLTU [[COPY]], killed [[ADDI]], %bb.2108 ; CHECK-NEXT: PseudoBR %bb.1109 ; CHECK-NEXT: {{ $}}110 ; CHECK-NEXT: bb.1 (%ir-block.3):111 ; CHECK-NEXT: $x10 = ADDI $x0, 3112 ; CHECK-NEXT: PseudoTAIL target-flags(riscv-call) @bar, implicit $x2, implicit $x10113 ; CHECK-NEXT: {{ $}}114 ; CHECK-NEXT: bb.2 (%ir-block.4):115 ; CHECK-NEXT: PseudoRET116 bb.0 (%ir-block.1):117 successors: %bb.1, %bb.2118 liveins: $x10119 120 %0:gpr = COPY $x10121 ADJCALLSTACKDOWN 0, 0, implicit-def dead $x2, implicit $x2122 $x10 = ADDI $x0, 1123 PseudoCALL target-flags(riscv-call) @bar, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit-def $x2124 ADJCALLSTACKUP 0, 0, implicit-def dead $x2, implicit $x2125 %2:gpr = ADDI $x0, 2126 BLTU %0, killed %2, %bb.2127 PseudoBR %bb.1128 129 bb.1 (%ir-block.3):130 $x10 = ADDI $x0, 3131 PseudoTAIL target-flags(riscv-call) @bar, implicit $x2, implicit $x10132 133 bb.2 (%ir-block.4):134 PseudoRET135 136...137---138name: ule_negone139tracksRegLiveness: true140body: |141 ; CHECK-LABEL: name: ule_negone142 ; CHECK: bb.0:143 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)144 ; CHECK-NEXT: liveins: $x10, $x11, $x12, $x13145 ; CHECK-NEXT: {{ $}}146 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x13147 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x12148 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x11149 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x10150 ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, 0151 ; CHECK-NEXT: SW killed [[ADDI]], [[COPY3]], 0 :: (store (s32))152 ; CHECK-NEXT: [[ADDI1:%[0-9]+]]:gpr = ADDI $x0, -1153 ; CHECK-NEXT: BLTU killed [[ADDI1]], [[COPY2]], %bb.2154 ; CHECK-NEXT: PseudoBR %bb.1155 ; CHECK-NEXT: {{ $}}156 ; CHECK-NEXT: bb.1:157 ; CHECK-NEXT: successors: %bb.3(0x80000000)158 ; CHECK-NEXT: {{ $}}159 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr = COPY [[COPY2]]160 ; CHECK-NEXT: SW [[COPY4]], [[COPY1]], 0 :: (store (s32))161 ; CHECK-NEXT: PseudoBR %bb.3162 ; CHECK-NEXT: {{ $}}163 ; CHECK-NEXT: bb.2:164 ; CHECK-NEXT: successors: %bb.3(0x80000000)165 ; CHECK-NEXT: {{ $}}166 ; CHECK-NEXT: [[ADDI2:%[0-9]+]]:gpr = ADDI $x0, 87167 ; CHECK-NEXT: SW killed [[ADDI2]], [[COPY]], 0 :: (store (s32))168 ; CHECK-NEXT: {{ $}}169 ; CHECK-NEXT: bb.3:170 ; CHECK-NEXT: PseudoRET171 bb.0:172 successors: %bb.1, %bb.2173 liveins: $x10, $x11, $x12, $x13174 175 %3:gpr = COPY $x13176 %2:gpr = COPY $x12177 %1:gpr = COPY $x11178 %0:gpr = COPY $x10179 %5:gpr = ADDI $x0, 0180 SW killed %5, %0, 0 :: (store (s32))181 %6:gpr = ADDI $x0, -1182 BLTU killed %6, %1, %bb.2183 PseudoBR %bb.1184 185 bb.1:186 %4:gpr = COPY %1187 SW %4, %2, 0 :: (store (s32))188 PseudoBR %bb.3189 190 bb.2:191 %7:gpr = ADDI $x0, 87192 SW killed %7, %3, 0 :: (store (s32))193 194 bb.3:195 PseudoRET196...197---198name: ult_zero199tracksRegLiveness: true200body: |201 ; CHECK-LABEL: name: ult_zero202 ; CHECK: bb.0:203 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)204 ; CHECK-NEXT: liveins: $x10, $x11, $x12, $x13205 ; CHECK-NEXT: {{ $}}206 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x13207 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x12208 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x11209 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x10210 ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, -1211 ; CHECK-NEXT: SW killed [[ADDI]], [[COPY3]], 0 :: (store (s32))212 ; CHECK-NEXT: [[ADDI1:%[0-9]+]]:gpr = ADDI $x0, 0213 ; CHECK-NEXT: BLTU [[COPY2]], killed [[ADDI1]], %bb.2214 ; CHECK-NEXT: PseudoBR %bb.1215 ; CHECK-NEXT: {{ $}}216 ; CHECK-NEXT: bb.1:217 ; CHECK-NEXT: successors: %bb.3(0x80000000)218 ; CHECK-NEXT: {{ $}}219 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr = COPY [[COPY2]]220 ; CHECK-NEXT: SW [[COPY4]], [[COPY1]], 0 :: (store (s32))221 ; CHECK-NEXT: PseudoBR %bb.3222 ; CHECK-NEXT: {{ $}}223 ; CHECK-NEXT: bb.2:224 ; CHECK-NEXT: successors: %bb.3(0x80000000)225 ; CHECK-NEXT: {{ $}}226 ; CHECK-NEXT: [[ADDI2:%[0-9]+]]:gpr = ADDI $x0, 87227 ; CHECK-NEXT: SW killed [[ADDI2]], [[COPY]], 0 :: (store (s32))228 ; CHECK-NEXT: {{ $}}229 ; CHECK-NEXT: bb.3:230 ; CHECK-NEXT: PseudoRET231 bb.0:232 successors: %bb.1, %bb.2233 liveins: $x10, $x11, $x12, $x13234 235 %3:gpr = COPY $x13236 %2:gpr = COPY $x12237 %1:gpr = COPY $x11238 %0:gpr = COPY $x10239 %5:gpr = ADDI $x0, -1240 SW killed %5, %0, 0 :: (store (s32))241 %6:gpr = ADDI $x0, 0242 BLTU %1, killed %6, %bb.2243 PseudoBR %bb.1244 245 bb.1:246 %4:gpr = COPY %1247 SW %4, %2, 0 :: (store (s32))248 PseudoBR %bb.3249 250 bb.2:251 %7:gpr = ADDI $x0, 87252 SW killed %7, %3, 0 :: (store (s32))253 254 bb.3:255 PseudoRET256...257---258name: sle_zero259tracksRegLiveness: true260body: |261 ; CHECK-LABEL: name: sle_zero262 ; CHECK: bb.0:263 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)264 ; CHECK-NEXT: liveins: $x10, $x11, $x12, $x13265 ; CHECK-NEXT: {{ $}}266 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x13267 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x12268 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x11269 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x10270 ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, 1271 ; CHECK-NEXT: SW killed [[ADDI]], [[COPY3]], 0 :: (store (s32))272 ; CHECK-NEXT: [[ADDI1:%[0-9]+]]:gpr = ADDI $x0, 0273 ; CHECK-NEXT: BLT killed [[ADDI1]], [[COPY2]], %bb.2274 ; CHECK-NEXT: PseudoBR %bb.1275 ; CHECK-NEXT: {{ $}}276 ; CHECK-NEXT: bb.1:277 ; CHECK-NEXT: successors: %bb.3(0x80000000)278 ; CHECK-NEXT: {{ $}}279 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr = COPY [[COPY2]]280 ; CHECK-NEXT: SW [[COPY4]], [[COPY1]], 0 :: (store (s32))281 ; CHECK-NEXT: PseudoBR %bb.3282 ; CHECK-NEXT: {{ $}}283 ; CHECK-NEXT: bb.2:284 ; CHECK-NEXT: successors: %bb.3(0x80000000)285 ; CHECK-NEXT: {{ $}}286 ; CHECK-NEXT: [[ADDI2:%[0-9]+]]:gpr = ADDI $x0, 87287 ; CHECK-NEXT: SW killed [[ADDI2]], [[COPY]], 0 :: (store (s32))288 ; CHECK-NEXT: {{ $}}289 ; CHECK-NEXT: bb.3:290 ; CHECK-NEXT: PseudoRET291 bb.0:292 successors: %bb.1, %bb.2293 liveins: $x10, $x11, $x12, $x13294 295 %3:gpr = COPY $x13296 %2:gpr = COPY $x12297 %1:gpr = COPY $x11298 %0:gpr = COPY $x10299 %5:gpr = ADDI $x0, 1300 SW killed %5, %0, 0 :: (store (s32))301 %6:gpr = ADDI $x0, 0302 BLT killed %6, %1, %bb.2303 PseudoBR %bb.1304 305 bb.1:306 %4:gpr = COPY %1307 SW %4, %2, 0 :: (store (s32))308 PseudoBR %bb.3309 310 bb.2:311 %7:gpr = ADDI $x0, 87312 SW killed %7, %3, 0 :: (store (s32))313 314 bb.3:315 PseudoRET316...317---318name: slt_zero319tracksRegLiveness: true320body: |321 ; CHECK-LABEL: name: slt_zero322 ; CHECK: bb.0:323 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)324 ; CHECK-NEXT: liveins: $x10, $x11, $x12, $x13325 ; CHECK-NEXT: {{ $}}326 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x13327 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x12328 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x11329 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x10330 ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, -1331 ; CHECK-NEXT: SW killed [[ADDI]], [[COPY3]], 0 :: (store (s32))332 ; CHECK-NEXT: [[ADDI1:%[0-9]+]]:gpr = ADDI $x0, 0333 ; CHECK-NEXT: BLT [[COPY2]], killed [[ADDI1]], %bb.2334 ; CHECK-NEXT: PseudoBR %bb.1335 ; CHECK-NEXT: {{ $}}336 ; CHECK-NEXT: bb.1:337 ; CHECK-NEXT: successors: %bb.3(0x80000000)338 ; CHECK-NEXT: {{ $}}339 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr = COPY [[COPY2]]340 ; CHECK-NEXT: SW [[COPY4]], [[COPY1]], 0 :: (store (s32))341 ; CHECK-NEXT: PseudoBR %bb.3342 ; CHECK-NEXT: {{ $}}343 ; CHECK-NEXT: bb.2:344 ; CHECK-NEXT: successors: %bb.3(0x80000000)345 ; CHECK-NEXT: {{ $}}346 ; CHECK-NEXT: [[ADDI2:%[0-9]+]]:gpr = ADDI $x0, 87347 ; CHECK-NEXT: SW killed [[ADDI2]], [[COPY]], 0 :: (store (s32))348 ; CHECK-NEXT: {{ $}}349 ; CHECK-NEXT: bb.3:350 ; CHECK-NEXT: PseudoRET351 bb.0:352 successors: %bb.1, %bb.2353 liveins: $x10, $x11, $x12, $x13354 355 %3:gpr = COPY $x13356 %2:gpr = COPY $x12357 %1:gpr = COPY $x11358 %0:gpr = COPY $x10359 %5:gpr = ADDI $x0, -1360 SW killed %5, %0, 0 :: (store (s32))361 %6:gpr = ADDI $x0, 0362 BLT %1, killed %6, %bb.2363 PseudoBR %bb.1364 365 bb.1:366 %4:gpr = COPY %1367 SW %4, %2, 0 :: (store (s32))368 PseudoBR %bb.3369 370 bb.2:371 %7:gpr = ADDI $x0, 87372 SW killed %7, %3, 0 :: (store (s32))373 374 bb.3:375 PseudoRET376...377