142835666SMin Hsu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 242835666SMin Hsu; RUN: llc -mtriple=riscv64 < %s | FileCheck %s 342835666SMin Hsu 442835666SMin Hsudefine i1 @sink_li(ptr %text, ptr %text.addr.0) nounwind { 542835666SMin Hsu; CHECK-LABEL: sink_li: 642835666SMin Hsu; CHECK: # %bb.0: # %entry 742835666SMin Hsu; CHECK-NEXT: addi sp, sp, -32 842835666SMin Hsu; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 942835666SMin Hsu; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 1042835666SMin Hsu; CHECK-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 1142835666SMin Hsu; CHECK-NEXT: sd s2, 0(sp) # 8-byte Folded Spill 1242835666SMin Hsu; CHECK-NEXT: mv s1, a1 1342835666SMin Hsu; CHECK-NEXT: mv s0, a0 1442835666SMin Hsu; CHECK-NEXT: call toupper 1542835666SMin Hsu; CHECK-NEXT: li a1, 0 167e2f9619SMin-Yih Hsu; CHECK-NEXT: beqz s0, .LBB0_26 1742835666SMin Hsu; CHECK-NEXT: # %bb.1: # %while.body.preheader 1842835666SMin Hsu; CHECK-NEXT: li a2, 1 1942835666SMin Hsu; CHECK-NEXT: li a3, 9 2042835666SMin Hsu; CHECK-NEXT: li a4, 32 2142835666SMin Hsu; CHECK-NEXT: .LBB0_2: # %while.body 2242835666SMin Hsu; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 2342835666SMin Hsu; CHECK-NEXT: bnez a2, .LBB0_4 2442835666SMin Hsu; CHECK-NEXT: # %bb.3: # %while.body 2542835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 2642835666SMin Hsu; CHECK-NEXT: bne a2, a3, .LBB0_16 2742835666SMin Hsu; CHECK-NEXT: .LBB0_4: # %while.body.1 2842835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 2942835666SMin Hsu; CHECK-NEXT: bnez a2, .LBB0_6 3042835666SMin Hsu; CHECK-NEXT: # %bb.5: # %while.body.1 3142835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 3242835666SMin Hsu; CHECK-NEXT: bne a2, a3, .LBB0_17 3342835666SMin Hsu; CHECK-NEXT: .LBB0_6: # %while.body.3 3442835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 3542835666SMin Hsu; CHECK-NEXT: bnez a2, .LBB0_8 3642835666SMin Hsu; CHECK-NEXT: # %bb.7: # %while.body.3 3742835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 3842835666SMin Hsu; CHECK-NEXT: bne a2, a4, .LBB0_19 3942835666SMin Hsu; CHECK-NEXT: .LBB0_8: # %while.body.4 4042835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 4142835666SMin Hsu; CHECK-NEXT: bnez a2, .LBB0_10 4242835666SMin Hsu; CHECK-NEXT: # %bb.9: # %while.body.4 4342835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 4442835666SMin Hsu; CHECK-NEXT: bne a2, a4, .LBB0_21 4542835666SMin Hsu; CHECK-NEXT: .LBB0_10: # %while.body.5 4642835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 4742835666SMin Hsu; CHECK-NEXT: bnez a2, .LBB0_12 4842835666SMin Hsu; CHECK-NEXT: # %bb.11: # %while.body.5 4942835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 5042835666SMin Hsu; CHECK-NEXT: bne a2, a3, .LBB0_23 5142835666SMin Hsu; CHECK-NEXT: .LBB0_12: # %while.body.6 5242835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 5342835666SMin Hsu; CHECK-NEXT: bnez a2, .LBB0_2 5442835666SMin Hsu; CHECK-NEXT: # %bb.13: # %while.body.6 5542835666SMin Hsu; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1 5642835666SMin Hsu; CHECK-NEXT: beq a2, a3, .LBB0_2 5742835666SMin Hsu; CHECK-NEXT: # %bb.14: # %while.body.6 587e2f9619SMin-Yih Hsu; CHECK-NEXT: beqz a2, .LBB0_24 5942835666SMin Hsu; CHECK-NEXT: # %bb.15: # %strdup.exit.split.loop.exit126 6042835666SMin Hsu; CHECK-NEXT: addi s0, s1, 7 6142835666SMin Hsu; CHECK-NEXT: j .LBB0_25 627e2f9619SMin-Yih Hsu; CHECK-NEXT: .LBB0_16: # %while.body 637e2f9619SMin-Yih Hsu; CHECK-NEXT: beqz a2, .LBB0_26 647e2f9619SMin-Yih Hsu; CHECK-NEXT: j .LBB0_18 6542835666SMin Hsu; CHECK-NEXT: .LBB0_17: # %while.body.1 667e2f9619SMin-Yih Hsu; CHECK-NEXT: beqz a2, .LBB0_24 6742835666SMin Hsu; CHECK-NEXT: .LBB0_18: # %strdup.exit.loopexit 6842835666SMin Hsu; CHECK-NEXT: li s0, 0 697e2f9619SMin-Yih Hsu; CHECK-NEXT: j .LBB0_25 7042835666SMin Hsu; CHECK-NEXT: .LBB0_19: # %while.body.3 717e2f9619SMin-Yih Hsu; CHECK-NEXT: beqz a2, .LBB0_24 7242835666SMin Hsu; CHECK-NEXT: # %bb.20: # %strdup.exit.split.loop.exit120 7342835666SMin Hsu; CHECK-NEXT: addi s0, s1, 4 747e2f9619SMin-Yih Hsu; CHECK-NEXT: j .LBB0_25 7542835666SMin Hsu; CHECK-NEXT: .LBB0_21: # %while.body.4 767e2f9619SMin-Yih Hsu; CHECK-NEXT: beqz a2, .LBB0_24 7742835666SMin Hsu; CHECK-NEXT: # %bb.22: # %strdup.exit.split.loop.exit122 7842835666SMin Hsu; CHECK-NEXT: addi s0, s1, 5 797e2f9619SMin-Yih Hsu; CHECK-NEXT: j .LBB0_25 8042835666SMin Hsu; CHECK-NEXT: .LBB0_23: # %while.body.5 817e2f9619SMin-Yih Hsu; CHECK-NEXT: bnez a2, .LBB0_25 827e2f9619SMin-Yih Hsu; CHECK-NEXT: .LBB0_24: 8342835666SMin Hsu; CHECK-NEXT: li a1, 0 847e2f9619SMin-Yih Hsu; CHECK-NEXT: j .LBB0_26 857e2f9619SMin-Yih Hsu; CHECK-NEXT: .LBB0_25: # %strdup.exit 8642835666SMin Hsu; CHECK-NEXT: li s1, 0 8742835666SMin Hsu; CHECK-NEXT: mv s2, a0 8842835666SMin Hsu; CHECK-NEXT: li a0, 0 8942835666SMin Hsu; CHECK-NEXT: mv a1, s0 9042835666SMin Hsu; CHECK-NEXT: jalr s1 9142835666SMin Hsu; CHECK-NEXT: li a0, 0 9242835666SMin Hsu; CHECK-NEXT: mv a1, s2 9342835666SMin Hsu; CHECK-NEXT: li a2, 0 9442835666SMin Hsu; CHECK-NEXT: jalr s1 9542835666SMin Hsu; CHECK-NEXT: li a1, 1 967e2f9619SMin-Yih Hsu; CHECK-NEXT: .LBB0_26: # %return 9742835666SMin Hsu; CHECK-NEXT: mv a0, a1 9842835666SMin Hsu; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 9942835666SMin Hsu; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 10042835666SMin Hsu; CHECK-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 10142835666SMin Hsu; CHECK-NEXT: ld s2, 0(sp) # 8-byte Folded Reload 10242835666SMin Hsu; CHECK-NEXT: addi sp, sp, 32 10342835666SMin Hsu; CHECK-NEXT: ret 10442835666SMin Hsuentry: 10542835666SMin Hsu %call = call i32 @toupper() 10642835666SMin Hsu %tobool.not = icmp eq ptr %text, null 10742835666SMin Hsu br i1 %tobool.not, label %return, label %while.body 10842835666SMin Hsu 10942835666SMin Hsuwhile.body: ; preds = %while.body.6, %while.body.6, %entry 11042835666SMin Hsu switch i8 1, label %strdup.exit.split.loop.exit114 [ 11142835666SMin Hsu i8 1, label %while.body.1 11242835666SMin Hsu i8 9, label %while.body.1 11342835666SMin Hsu i8 0, label %return 11442835666SMin Hsu ] 11542835666SMin Hsu 11642835666SMin Hsuwhile.body.1: ; preds = %while.body, %while.body 11742835666SMin Hsu switch i8 1, label %strdup.exit [ 11842835666SMin Hsu i8 1, label %while.body.3 11942835666SMin Hsu i8 9, label %while.body.3 12042835666SMin Hsu i8 0, label %return 12142835666SMin Hsu ] 12242835666SMin Hsu 12342835666SMin Hsuwhile.body.3: ; preds = %while.body.1, %while.body.1 12442835666SMin Hsu switch i8 1, label %strdup.exit.split.loop.exit120 [ 12542835666SMin Hsu i8 32, label %while.body.4 12642835666SMin Hsu i8 1, label %while.body.4 12742835666SMin Hsu i8 0, label %return 12842835666SMin Hsu ] 12942835666SMin Hsu 13042835666SMin Hsuwhile.body.4: ; preds = %while.body.3, %while.body.3 13142835666SMin Hsu switch i8 1, label %strdup.exit.split.loop.exit122 [ 13242835666SMin Hsu i8 32, label %while.body.5 13342835666SMin Hsu i8 1, label %while.body.5 13442835666SMin Hsu i8 0, label %return 13542835666SMin Hsu ] 13642835666SMin Hsu 13742835666SMin Hsuwhile.body.5: ; preds = %while.body.4, %while.body.4 13842835666SMin Hsu switch i8 1, label %strdup.exit.split.loop.exit124 [ 13942835666SMin Hsu i8 1, label %while.body.6 14042835666SMin Hsu i8 9, label %while.body.6 14142835666SMin Hsu i8 0, label %return 14242835666SMin Hsu ] 14342835666SMin Hsu 14442835666SMin Hsuwhile.body.6: ; preds = %while.body.5, %while.body.5 14542835666SMin Hsu switch i8 1, label %strdup.exit.split.loop.exit126 [ 14642835666SMin Hsu i8 1, label %while.body 14742835666SMin Hsu i8 9, label %while.body 14842835666SMin Hsu i8 0, label %return 14942835666SMin Hsu ] 15042835666SMin Hsu 15142835666SMin Hsustrdup.exit.split.loop.exit114: ; preds = %while.body 15242835666SMin Hsu br label %strdup.exit 15342835666SMin Hsu 15442835666SMin Hsustrdup.exit.split.loop.exit120: ; preds = %while.body.3 15542835666SMin Hsu %incdec.ptr.3.le = getelementptr i8, ptr %text.addr.0, i64 4 15642835666SMin Hsu br label %strdup.exit 15742835666SMin Hsu 15842835666SMin Hsustrdup.exit.split.loop.exit122: ; preds = %while.body.4 15942835666SMin Hsu %incdec.ptr.4.le = getelementptr i8, ptr %text.addr.0, i64 5 16042835666SMin Hsu br label %strdup.exit 16142835666SMin Hsu 16242835666SMin Hsustrdup.exit.split.loop.exit124: ; preds = %while.body.5 16342835666SMin Hsu br label %strdup.exit 16442835666SMin Hsu 16542835666SMin Hsustrdup.exit.split.loop.exit126: ; preds = %while.body.6 16642835666SMin Hsu %incdec.ptr.6.le = getelementptr i8, ptr %text.addr.0, i64 7 16742835666SMin Hsu br label %strdup.exit 16842835666SMin Hsu 16942835666SMin Hsustrdup.exit: ; preds = %strdup.exit.split.loop.exit126, %strdup.exit.split.loop.exit124, %strdup.exit.split.loop.exit122, %strdup.exit.split.loop.exit120, %strdup.exit.split.loop.exit114, %while.body.1 17042835666SMin Hsu %text.addr.0.lcssa = phi ptr [ null, %strdup.exit.split.loop.exit114 ], [ %incdec.ptr.3.le, %strdup.exit.split.loop.exit120 ], [ %incdec.ptr.4.le, %strdup.exit.split.loop.exit122 ], [ %text, %strdup.exit.split.loop.exit124 ], [ %incdec.ptr.6.le, %strdup.exit.split.loop.exit126 ], [ null, %while.body.1 ] 17142835666SMin Hsu %call5.i = tail call ptr null(ptr null, ptr %text.addr.0.lcssa) 17242835666SMin Hsu %memchr64 = tail call ptr null(ptr null, i32 %call, i64 0) 17342835666SMin Hsu br label %return 17442835666SMin Hsu 17542835666SMin Hsureturn: ; preds = %strdup.exit, %while.body.6, %while.body.5, %while.body.4, %while.body.3, %while.body.1, %while.body, %entry 17642835666SMin Hsu %retval.1 = phi i1 [ false, %entry ], [ true, %strdup.exit ], [ false, %while.body ], [ false, %while.body.1 ], [ false, %while.body.3 ], [ false, %while.body.4 ], [ false, %while.body.5 ], [ false, %while.body.6 ] 17742835666SMin Hsu ret i1 %retval.1 17842835666SMin Hsu} 17942835666SMin Hsu 18042835666SMin Hsudeclare i32 @toupper() 1817e56a092SPhilip Reames 1827e56a092SPhilip Reames; In this example, %arg and the return value (13) have overlapping live 1837e56a092SPhilip Reames; intervals because the ABI mandidates they both be placed in a0. 1847e56a092SPhilip Reamesdefine signext i32 @overlap_live_ranges(ptr %arg, i32 signext %arg1) { 1857e56a092SPhilip Reames; CHECK-LABEL: overlap_live_ranges: 1867e56a092SPhilip Reames; CHECK: # %bb.0: # %bb 187*6657d4bdSPhilip Reames; CHECK-NEXT: li a2, 1 188*6657d4bdSPhilip Reames; CHECK-NEXT: bne a1, a2, .LBB1_2 1897e56a092SPhilip Reames; CHECK-NEXT: # %bb.1: # %bb2 190*6657d4bdSPhilip Reames; CHECK-NEXT: lw a0, 4(a0) 191*6657d4bdSPhilip Reames; CHECK-NEXT: ret 192*6657d4bdSPhilip Reames; CHECK-NEXT: .LBB1_2: 193*6657d4bdSPhilip Reames; CHECK-NEXT: li a0, 13 1947e56a092SPhilip Reames; CHECK-NEXT: ret 1957e56a092SPhilip Reamesbb: 1967e56a092SPhilip Reames %i = icmp eq i32 %arg1, 1 1977e56a092SPhilip Reames br i1 %i, label %bb2, label %bb5 1987e56a092SPhilip Reames 1997e56a092SPhilip Reamesbb2: ; preds = %bb 2007e56a092SPhilip Reames %i3 = getelementptr inbounds nuw i8, ptr %arg, i64 4 2017e56a092SPhilip Reames %i4 = load i32, ptr %i3, align 4 2027e56a092SPhilip Reames br label %bb5 2037e56a092SPhilip Reames 2047e56a092SPhilip Reamesbb5: ; preds = %bb2, %bb 2057e56a092SPhilip Reames %i6 = phi i32 [ %i4, %bb2 ], [ 13, %bb ] 2067e56a092SPhilip Reames ret i32 %i6 2077e56a092SPhilip Reames} 208c94d7158SPhilip Reames 209c94d7158SPhilip Reames 210c94d7158SPhilip Reames; For switches, the values feeding the phi are always sunk into the 211c94d7158SPhilip Reames; target blocks as the IR syntax requires the intermediate block and 212c94d7158SPhilip Reames; DAG lowers it in the immediate predecessor of the phi. 213c94d7158SPhilip Reamesdefine signext i32 @switch_dispatch(i8 %a) { 214c94d7158SPhilip Reames; CHECK-LABEL: switch_dispatch: 215c94d7158SPhilip Reames; CHECK: # %bb.0: # %bb 216c94d7158SPhilip Reames; CHECK-NEXT: addi sp, sp, -16 217c94d7158SPhilip Reames; CHECK-NEXT: .cfi_def_cfa_offset 16 218c94d7158SPhilip Reames; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 219c94d7158SPhilip Reames; CHECK-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 220c94d7158SPhilip Reames; CHECK-NEXT: .cfi_offset ra, -8 221c94d7158SPhilip Reames; CHECK-NEXT: .cfi_offset s0, -16 222c94d7158SPhilip Reames; CHECK-NEXT: andi a0, a0, 255 223c94d7158SPhilip Reames; CHECK-NEXT: li a1, 31 224c94d7158SPhilip Reames; CHECK-NEXT: blt a1, a0, .LBB2_5 225c94d7158SPhilip Reames; CHECK-NEXT: # %bb.1: # %bb 226c94d7158SPhilip Reames; CHECK-NEXT: beqz a0, .LBB2_10 227c94d7158SPhilip Reames; CHECK-NEXT: # %bb.2: # %bb 228c94d7158SPhilip Reames; CHECK-NEXT: li a1, 12 229c94d7158SPhilip Reames; CHECK-NEXT: beq a0, a1, .LBB2_11 230c94d7158SPhilip Reames; CHECK-NEXT: # %bb.3: # %bb 231c94d7158SPhilip Reames; CHECK-NEXT: li a1, 13 232c94d7158SPhilip Reames; CHECK-NEXT: bne a0, a1, .LBB2_9 233c94d7158SPhilip Reames; CHECK-NEXT: # %bb.4: # %case.4 234c94d7158SPhilip Reames; CHECK-NEXT: li s0, 644 235c94d7158SPhilip Reames; CHECK-NEXT: j .LBB2_13 236c94d7158SPhilip Reames; CHECK-NEXT: .LBB2_5: # %bb 237c94d7158SPhilip Reames; CHECK-NEXT: li a1, 234 238c94d7158SPhilip Reames; CHECK-NEXT: beq a0, a1, .LBB2_9 239c94d7158SPhilip Reames; CHECK-NEXT: # %bb.6: # %bb 240c94d7158SPhilip Reames; CHECK-NEXT: li a1, 70 241c94d7158SPhilip Reames; CHECK-NEXT: beq a0, a1, .LBB2_12 242c94d7158SPhilip Reames; CHECK-NEXT: # %bb.7: # %bb 243c94d7158SPhilip Reames; CHECK-NEXT: li a1, 32 244c94d7158SPhilip Reames; CHECK-NEXT: bne a0, a1, .LBB2_9 245c94d7158SPhilip Reames; CHECK-NEXT: # %bb.8: # %case.0 246c94d7158SPhilip Reames; CHECK-NEXT: li s0, 13 247c94d7158SPhilip Reames; CHECK-NEXT: j .LBB2_13 248c94d7158SPhilip Reames; CHECK-NEXT: .LBB2_9: # %case.default 249c94d7158SPhilip Reames; CHECK-NEXT: li s0, 23 250c94d7158SPhilip Reames; CHECK-NEXT: j .LBB2_13 251c94d7158SPhilip Reames; CHECK-NEXT: .LBB2_10: # %case.5 252c94d7158SPhilip Reames; CHECK-NEXT: li s0, 54 253c94d7158SPhilip Reames; CHECK-NEXT: j .LBB2_13 254c94d7158SPhilip Reames; CHECK-NEXT: .LBB2_11: # %case.1 255c94d7158SPhilip Reames; CHECK-NEXT: li s0, 53 256c94d7158SPhilip Reames; CHECK-NEXT: j .LBB2_13 257c94d7158SPhilip Reames; CHECK-NEXT: .LBB2_12: # %case.2 258c94d7158SPhilip Reames; CHECK-NEXT: li s0, 33 259c94d7158SPhilip Reames; CHECK-NEXT: .LBB2_13: # %merge 260c94d7158SPhilip Reames; CHECK-NEXT: mv a0, s0 261c94d7158SPhilip Reames; CHECK-NEXT: call use 262c94d7158SPhilip Reames; CHECK-NEXT: mv a0, s0 263c94d7158SPhilip Reames; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 264c94d7158SPhilip Reames; CHECK-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 265c94d7158SPhilip Reames; CHECK-NEXT: .cfi_restore ra 266c94d7158SPhilip Reames; CHECK-NEXT: .cfi_restore s0 267c94d7158SPhilip Reames; CHECK-NEXT: addi sp, sp, 16 268c94d7158SPhilip Reames; CHECK-NEXT: .cfi_def_cfa_offset 0 269c94d7158SPhilip Reames; CHECK-NEXT: ret 270c94d7158SPhilip Reamesbb: 271c94d7158SPhilip Reames switch i8 %a, label %case.default [ 272c94d7158SPhilip Reames i8 32, label %case.0 273c94d7158SPhilip Reames i8 12, label %case.1 274c94d7158SPhilip Reames i8 70, label %case.2 275c94d7158SPhilip Reames i8 -22, label %case.3 276c94d7158SPhilip Reames i8 13, label %case.4 277c94d7158SPhilip Reames i8 0, label %case.5 278c94d7158SPhilip Reames ] 279c94d7158SPhilip Reames 280c94d7158SPhilip Reamescase.0: 281c94d7158SPhilip Reames br label %merge 282c94d7158SPhilip Reamescase.1: 283c94d7158SPhilip Reames br label %merge 284c94d7158SPhilip Reamescase.2: 285c94d7158SPhilip Reames br label %merge 286c94d7158SPhilip Reamescase.3: 287c94d7158SPhilip Reames br label %merge 288c94d7158SPhilip Reamescase.4: 289c94d7158SPhilip Reames br label %merge 290c94d7158SPhilip Reamescase.5: 291c94d7158SPhilip Reames br label %merge 292c94d7158SPhilip Reamescase.default: 293c94d7158SPhilip Reames br label %merge 294c94d7158SPhilip Reames 295c94d7158SPhilip Reamesmerge: 296c94d7158SPhilip Reames %res = phi i32 [ 23, %case.default ], [ 13, %case.0 ], [ 53, %case.1 ], [ 33, %case.2 ], [ 23, %case.3 ], [ 644, %case.4 ], [ 54, %case.5 ] 297c94d7158SPhilip Reames call void @use(i32 %res) 298c94d7158SPhilip Reames ret i32 %res 299c94d7158SPhilip Reames} 300c94d7158SPhilip Reames 301c94d7158SPhilip Reames; Same as for the switch, but written via manual branching. 302c94d7158SPhilip Reamesdefine signext i32 @branch_dispatch(i8 %a) { 303c94d7158SPhilip Reames; CHECK-LABEL: branch_dispatch: 304c94d7158SPhilip Reames; CHECK: # %bb.0: # %case.0 305c94d7158SPhilip Reames; CHECK-NEXT: addi sp, sp, -16 306c94d7158SPhilip Reames; CHECK-NEXT: .cfi_def_cfa_offset 16 307c94d7158SPhilip Reames; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 308c94d7158SPhilip Reames; CHECK-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 309c94d7158SPhilip Reames; CHECK-NEXT: .cfi_offset ra, -8 310c94d7158SPhilip Reames; CHECK-NEXT: .cfi_offset s0, -16 311*6657d4bdSPhilip Reames; CHECK-NEXT: .cfi_remember_state 312c94d7158SPhilip Reames; CHECK-NEXT: andi a0, a0, 255 313c94d7158SPhilip Reames; CHECK-NEXT: li a1, 32 314*6657d4bdSPhilip Reames; CHECK-NEXT: beq a0, a1, .LBB3_7 315c94d7158SPhilip Reames; CHECK-NEXT: # %bb.1: # %case.1 316c94d7158SPhilip Reames; CHECK-NEXT: li a1, 12 317c94d7158SPhilip Reames; CHECK-NEXT: beq a0, a1, .LBB3_8 318c94d7158SPhilip Reames; CHECK-NEXT: # %bb.2: # %case.2 319c94d7158SPhilip Reames; CHECK-NEXT: li a1, 70 320*6657d4bdSPhilip Reames; CHECK-NEXT: beq a0, a1, .LBB3_9 321c94d7158SPhilip Reames; CHECK-NEXT: # %bb.3: # %case.3 322c94d7158SPhilip Reames; CHECK-NEXT: li a1, 234 323c94d7158SPhilip Reames; CHECK-NEXT: li s0, 23 324*6657d4bdSPhilip Reames; CHECK-NEXT: beq a0, a1, .LBB3_10 325c94d7158SPhilip Reames; CHECK-NEXT: # %bb.4: # %case.4 326*6657d4bdSPhilip Reames; CHECK-NEXT: beqz a0, .LBB3_11 327c94d7158SPhilip Reames; CHECK-NEXT: # %bb.5: # %case.5 328c94d7158SPhilip Reames; CHECK-NEXT: li a1, 5 329*6657d4bdSPhilip Reames; CHECK-NEXT: bne a0, a1, .LBB3_10 330*6657d4bdSPhilip Reames; CHECK-NEXT: # %bb.6: 331c94d7158SPhilip Reames; CHECK-NEXT: li s0, 54 332*6657d4bdSPhilip Reames; CHECK-NEXT: j .LBB3_10 333c94d7158SPhilip Reames; CHECK-NEXT: .LBB3_7: 334*6657d4bdSPhilip Reames; CHECK-NEXT: li s0, 13 335*6657d4bdSPhilip Reames; CHECK-NEXT: j .LBB3_10 336*6657d4bdSPhilip Reames; CHECK-NEXT: .LBB3_8: 337*6657d4bdSPhilip Reames; CHECK-NEXT: li s0, 53 338*6657d4bdSPhilip Reames; CHECK-NEXT: j .LBB3_10 339*6657d4bdSPhilip Reames; CHECK-NEXT: .LBB3_9: 340*6657d4bdSPhilip Reames; CHECK-NEXT: li s0, 33 341*6657d4bdSPhilip Reames; CHECK-NEXT: .LBB3_10: # %merge 342c94d7158SPhilip Reames; CHECK-NEXT: mv a0, s0 343c94d7158SPhilip Reames; CHECK-NEXT: call use 344c94d7158SPhilip Reames; CHECK-NEXT: mv a0, s0 345c94d7158SPhilip Reames; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 346c94d7158SPhilip Reames; CHECK-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 347c94d7158SPhilip Reames; CHECK-NEXT: .cfi_restore ra 348c94d7158SPhilip Reames; CHECK-NEXT: .cfi_restore s0 349c94d7158SPhilip Reames; CHECK-NEXT: addi sp, sp, 16 350c94d7158SPhilip Reames; CHECK-NEXT: .cfi_def_cfa_offset 0 351c94d7158SPhilip Reames; CHECK-NEXT: ret 352*6657d4bdSPhilip Reames; CHECK-NEXT: .LBB3_11: 353*6657d4bdSPhilip Reames; CHECK-NEXT: .cfi_restore_state 354*6657d4bdSPhilip Reames; CHECK-NEXT: li s0, 644 355*6657d4bdSPhilip Reames; CHECK-NEXT: j .LBB3_10 356c94d7158SPhilip Reamescase.0: 357c94d7158SPhilip Reames %c0 = icmp ne i8 %a, 32 358c94d7158SPhilip Reames br i1 %c0, label %case.1, label %merge 359c94d7158SPhilip Reamescase.1: 360c94d7158SPhilip Reames %c1 = icmp ne i8 %a, 12 361c94d7158SPhilip Reames br i1 %c1, label %case.2, label %merge 362c94d7158SPhilip Reamescase.2: 363c94d7158SPhilip Reames %c2 = icmp ne i8 %a, 70 364c94d7158SPhilip Reames br i1 %c2, label %case.3, label %merge 365c94d7158SPhilip Reamescase.3: 366c94d7158SPhilip Reames %c3 = icmp ne i8 %a, -22 367c94d7158SPhilip Reames br i1 %c3, label %case.4, label %merge 368c94d7158SPhilip Reamescase.4: 369c94d7158SPhilip Reames %c4 = icmp ne i8 %a, 0 370c94d7158SPhilip Reames br i1 %c4, label %case.5, label %merge 371c94d7158SPhilip Reamescase.5: 372c94d7158SPhilip Reames %c5 = icmp ne i8 %a, 5 373c94d7158SPhilip Reames br i1 %c5, label %case.default, label %merge 374c94d7158SPhilip Reamescase.default: 375c94d7158SPhilip Reames br label %merge 376c94d7158SPhilip Reames 377c94d7158SPhilip Reamesmerge: 378c94d7158SPhilip Reames %res = phi i32 [ 23, %case.default ], [ 13, %case.0 ], [ 53, %case.1 ], [ 33, %case.2 ], [ 23, %case.3 ], [ 644, %case.4 ], [ 54, %case.5 ] 379c94d7158SPhilip Reames call void @use(i32 %res) 380c94d7158SPhilip Reames ret i32 %res 381c94d7158SPhilip Reames} 382c94d7158SPhilip Reames 383c94d7158SPhilip Reames 384c94d7158SPhilip Reamesdeclare void @use(i32) 385c94d7158SPhilip Reames 386