| #RUN: llc -run-pass arm-cp-islands %s -o - | FileCheck %s | |
| --- | | |
| ; ModuleID = 'test.ll' | |
| source_filename = "test.c" | |
| target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" | |
| target triple = "thumbv8r-arm-none-eabi" | |
| define void @Func(i32 %i, i32* nocapture %p) local_unnamed_addr { | |
| entry: | |
| switch i32 %i, label %sw.epilog [ | |
| i32 0, label %sw.bb | |
| i32 1, label %sw.bb1 | |
| i32 2, label %sw.epilog.sink.split | |
| i32 4, label %sw.bb3 | |
| ] | |
| sw.bb: ; preds = %entry | |
| br label %sw.epilog.sink.split | |
| sw.bb1: ; preds = %entry | |
| store i32 0, i32* %p, align 4 | |
| br label %sw.epilog.sink.split | |
| sw.bb3: ; preds = %entry | |
| br label %sw.epilog.sink.split | |
| sw.epilog.sink.split: ; preds = %sw.bb3, %sw.bb1, %sw.bb, %entry | |
| %.sink = phi i32 [ 2, %sw.bb3 ], [ 0, %sw.bb ], [ 1, %entry ], [ 1, %sw.bb1 ] | |
| store i32 %.sink, i32* %p, align 4 | |
| br label %sw.epilog | |
| sw.epilog: ; preds = %sw.epilog.sink.split, %entry | |
| ret void | |
| } | |
| ... | |
| --- | |
| name: Func | |
| alignment: 1 | |
| exposesReturnsTwice: false | |
| legalized: false | |
| regBankSelected: false | |
| selected: false | |
| tracksRegLiveness: true | |
| liveins: | |
| - { reg: '$r0' } | |
| - { reg: '$r1' } | |
| frameInfo: | |
| isFrameAddressTaken: false | |
| isReturnAddressTaken: false | |
| hasStackMap: false | |
| hasPatchPoint: false | |
| stackSize: 0 | |
| offsetAdjustment: 0 | |
| maxAlignment: 0 | |
| adjustsStack: false | |
| hasCalls: false | |
| maxCallFrameSize: 0 | |
| hasOpaqueSPAdjustment: false | |
| hasVAStart: false | |
| hasMustTailInVarArgFunc: false | |
| jumpTable: | |
| kind: inline | |
| entries: | |
| - id: 0 | |
| blocks: [ '%bb.2.sw.bb', '%bb.3.sw.bb1', '%bb.5.sw.epilog.sink.split', | |
| '%bb.6.sw.epilog', '%bb.4.sw.bb3' ] | |
| # The ADD should be deleted along with the LEA | |
| # CHECK-NOT: t2LEApcrelJT | |
| # CHECK-NOT: t2ADDrs | |
| # CHECK: tMOVi8 | |
| # CHECK: t2TBB_JT | |
| body: | | |
| bb.0.entry: | |
| successors: %bb.6.sw.epilog(0x0ccccccb), %bb.1.entry(0x73333335) | |
| liveins: $r0, $r1 | |
| tCMPi8 $r0, 4, 14, $noreg, implicit-def $cpsr | |
| t2Bcc %bb.6.sw.epilog, 8, killed $cpsr | |
| bb.1.entry: | |
| successors: %bb.2.sw.bb(0x1c71c71c), %bb.3.sw.bb1(0x1c71c71c), %bb.5.sw.epilog.sink.split(0x1c71c71c), %bb.6.sw.epilog(0x0e38e38e), %bb.4.sw.bb3(0x1c71c71c) | |
| liveins: $r0, $r1 | |
| $r2 = t2LEApcrelJT %jump-table.0, 14, $noreg | |
| $r3 = t2ADDrs killed $r2, $r0, 18, 14, $noreg, $noreg | |
| $r2, dead $cpsr = tMOVi8 1, 14, $noreg | |
| t2BR_JT killed $r3, killed $r0, %jump-table.0 | |
| bb.2.sw.bb: | |
| successors: %bb.5.sw.epilog.sink.split(0x80000000) | |
| liveins: $r1 | |
| $r2, dead $cpsr = tMOVi8 0, 14, $noreg | |
| t2B %bb.5.sw.epilog.sink.split, 14, $noreg | |
| bb.3.sw.bb1: | |
| successors: %bb.5.sw.epilog.sink.split(0x80000000) | |
| liveins: $r1 | |
| $r0, dead $cpsr = tMOVi8 0, 14, $noreg | |
| $r2, dead $cpsr = tMOVi8 1, 14, $noreg | |
| tSTRi killed $r0, $r1, 0, 14, $noreg :: (store 4 into %ir.p) | |
| t2B %bb.5.sw.epilog.sink.split, 14, $noreg | |
| bb.4.sw.bb3: | |
| successors: %bb.5.sw.epilog.sink.split(0x80000000) | |
| liveins: $r1 | |
| $r2, dead $cpsr = tMOVi8 2, 14, $noreg | |
| bb.5.sw.epilog.sink.split: | |
| successors: %bb.6.sw.epilog(0x80000000) | |
| liveins: $r1, $r2 | |
| tSTRi killed $r2, killed $r1, 0, 14, $noreg :: (store 4 into %ir.p) | |
| bb.6.sw.epilog: | |
| tBX_RET 14, $noreg | |
| ... |