117 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc < %s -x mir -mtriple=thumbv7m-arm-none-eabi -run-pass=arm-branch-targets | FileCheck %s3--- |4 define internal i32 @table_switch(i32 %x) {5 entry:6 switch i32 %x, label %sw.epilog [7 i32 1, label %return8 i32 2, label %bb29 i32 3, label %bb310 i32 4, label %bb411 ]12 13 bb2:14 br label %return15 16 bb3:17 br label %return18 19 bb4:20 br label %return21 22 sw.epilog:23 br label %return24 25 return:26 %ret = phi i32 [ 0, %sw.epilog ], [ 2, %bb2 ], [ 3, %bb3 ], [ 4, %bb4 ], [ 1, %entry ]27 ret i32 %ret28 }29 30 !llvm.module.flags = !{!0}31 !0 = !{i32 8, !"branch-target-enforcement", i32 1}32 33...34---35name: table_switch36alignment: 437tracksRegLiveness: true38liveins:39 - { reg: '$r0' }40frameInfo:41 maxAlignment: 142 maxCallFrameSize: 043machineFunctionInfo: {}44jumpTable:45 kind: inline46 entries:47 - id: 048 blocks: [ '%bb.6', '%bb.2', '%bb.3', '%bb.4' ]49body: |50 ; CHECK-LABEL: name: table_switch51 ; CHECK: bb.0.entry:52 ; CHECK: successors: %bb.3(0x40000000), %bb.1(0x40000000)53 ; CHECK: liveins: $r054 ; CHECK: renamable $r1, dead $cpsr = tSUBi3 killed renamable $r0, 1, 14 /* CC::al */, $noreg55 ; CHECK: tCMPi8 renamable $r1, 3, 14 /* CC::al */, $noreg, implicit-def $cpsr56 ; CHECK: t2Bcc %bb.3, 8 /* CC::hi */, killed $cpsr57 ; CHECK: bb.1.entry:58 ; CHECK: successors: %bb.4(0x20000000), %bb.2(0x20000000), %bb.5(0x20000000), %bb.6(0x20000000)59 ; CHECK: liveins: $r160 ; CHECK: renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg61 ; CHECK: renamable $r2 = t2LEApcrelJT %jump-table.0, 14 /* CC::al */, $noreg62 ; CHECK: renamable $r2 = t2ADDrs killed renamable $r2, renamable $r1, 18, 14 /* CC::al */, $noreg, $noreg63 ; CHECK: t2BR_JT killed renamable $r2, killed renamable $r1, %jump-table.064 ; CHECK: bb.2.bb2:65 ; CHECK: renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg66 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r067 ; CHECK: bb.3.sw.epilog:68 ; CHECK: successors: %bb.4(0x80000000)69 ; CHECK: renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg70 ; CHECK: bb.4.return:71 ; CHECK: liveins: $r072 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r073 ; CHECK: bb.5.bb3:74 ; CHECK: renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg75 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r076 ; CHECK: bb.6.bb4:77 ; CHECK: renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg78 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r079 bb.0.entry:80 successors: %bb.5, %bb.181 liveins: $r082 83 renamable $r1, dead $cpsr = tSUBi3 killed renamable $r0, 1, 14 /* CC::al */, $noreg84 tCMPi8 renamable $r1, 3, 14 /* CC::al */, $noreg, implicit-def $cpsr85 t2Bcc %bb.5, 8 /* CC::hi */, killed $cpsr86 87 bb.1.entry:88 successors: %bb.6, %bb.2, %bb.3, %bb.489 liveins: $r190 91 renamable $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg92 renamable $r2 = t2LEApcrelJT %jump-table.0, 14 /* CC::al */, $noreg93 renamable $r2 = t2ADDrs killed renamable $r2, renamable $r1, 18, 14 /* CC::al */, $noreg, $noreg94 t2BR_JT killed renamable $r2, killed renamable $r1, %jump-table.095 96 bb.2.bb2:97 renamable $r0, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg98 tBX_RET 14 /* CC::al */, $noreg, implicit $r099 100 bb.5.sw.epilog:101 renamable $r0, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg102 103 bb.6.return:104 liveins: $r0105 106 tBX_RET 14 /* CC::al */, $noreg, implicit $r0107 108 bb.3.bb3:109 renamable $r0, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg110 tBX_RET 14 /* CC::al */, $noreg, implicit $r0111 112 bb.4.bb4:113 renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg114 tBX_RET 14 /* CC::al */, $noreg, implicit $r0115 116...117