212 lines · plain
1# RUN: llc -mtriple=thumbv7-- -run-pass=prologepilog \2# RUN: -run-pass=machine-outliner %s -o - | FileCheck %s3 4--- |5 define void @CheckAddrModeT2_i12() { ret void }6 define void @CheckAddrModeT2_i8() { ret void }7 define void @CheckAddrModeT2_i8s4() { ret void }8 define void @CheckAddrModeT2_ldrex() { ret void }9 define void @CheckAddrModeT1_s() { ret void }10 define void @foo() { ret void }11 12...13---14 15name: CheckAddrModeT2_i1216tracksRegLiveness: true17 18body: |19 bb.0:20 liveins: $r121 ;CHECK-LABEL: name: CheckAddrModeT2_i1222 ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]23 ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[I12:[0-9]+]]24 ;CHECK-NEXT: $r0 = t2LDRi12 $sp, 4088, 14 /* CC::al */, $noreg25 $r0 = tMOVr killed $r1, 14, $noreg26 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp27 $r0 = t2LDRi12 $sp, 0, 14, $noreg28 $r0 = t2LDRi12 $sp, 4, 14, $noreg29 $r0 = t2LDRi12 $sp, 4086, 14, $noreg30 $r0 = t2LDRi12 $sp, 4088, 14, $noreg31 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp32 $r0 = t2LDRi12 $sp, 0, 14, $noreg33 $r0 = t2LDRi12 $sp, 4, 14, $noreg34 $r0 = t2LDRi12 $sp, 4086, 14, $noreg35 $r0 = t2LDRi12 $sp, 4088, 14, $noreg36 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp37 $r0 = t2LDRi12 $sp, 0, 14, $noreg38 $r0 = t2LDRi12 $sp, 4, 14, $noreg39 $r0 = t2LDRi12 $sp, 4086, 14, $noreg40 $r0 = t2LDRi12 $sp, 4088, 14, $noreg41 BX_RET 14, $noreg42...43---44 45name: CheckAddrModeT2_i846tracksRegLiveness: true47 48body: |49 bb.0:50 liveins: $r151 ;CHECK-LABEL: name: CheckAddrModeT2_i852 ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]53 ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[I8:[0-9]+]]54 ;CHECK-NEXT: t2STRHT $r0, $sp, 248, 14 /* CC::al */, $noreg55 $r0 = tMOVr $r1, 14, $noreg56 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp57 t2STRHT $r0, $sp, 0, 14, $noreg58 t2STRHT $r0, $sp, 4, 14, $noreg59 t2STRHT $r0, $sp, 247, 14, $noreg60 t2STRHT $r0, $sp, 248, 14, $noreg61 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp62 t2STRHT $r0, $sp, 0, 14, $noreg63 t2STRHT $r0, $sp, 4, 14, $noreg64 t2STRHT $r0, $sp, 247, 14, $noreg65 t2STRHT $r0, $sp, 248, 14, $noreg66 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp67 t2STRHT $r0, $sp, 0, 14, $noreg68 t2STRHT $r0, $sp, 4, 14, $noreg69 t2STRHT $r0, $sp, 247, 14, $noreg70 t2STRHT $r0, $sp, 248, 14, $noreg71 BX_RET 14, $noreg72...73---74 75name: CheckAddrModeT2_i8s476tracksRegLiveness: true77 78body: |79 bb.0:80 liveins: $r181 ;CHECK-LABEL: name: CheckAddrModeT2_i8s482 ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]83 ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[I8S4:[0-9]+]]84 ;CHECK-NEXT: t2STRDi8 $r0, $r1, $sp, 1020, 14 /* CC::al */, $noreg85 $r0 = tMOVr $r1, 14, $noreg86 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp87 t2STRDi8 $r0, $r1, $sp, 0, 14, $noreg88 t2STRDi8 $r0, $r1, $sp, 8, 14, $noreg89 t2STRDi8 $r0, $r1, $sp, 1012, 14, $noreg90 t2STRDi8 $r0, $r1, $sp, 1020, 14, $noreg91 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp92 t2STRDi8 $r0, $r1, $sp, 0, 14, $noreg93 t2STRDi8 $r0, $r1, $sp, 8, 14, $noreg94 t2STRDi8 $r0, $r1, $sp, 1012, 14, $noreg95 t2STRDi8 $r0, $r1, $sp, 1020, 14, $noreg96 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp97 t2STRDi8 $r0, $r1, $sp, 0, 14, $noreg98 t2STRDi8 $r0, $r1, $sp, 8, 14, $noreg99 t2STRDi8 $r0, $r1, $sp, 1012, 14, $noreg100 t2STRDi8 $r0, $r1, $sp, 1020, 14, $noreg101 BX_RET 14, $noreg102...103---104 105name: CheckAddrModeT2_ldrex106tracksRegLiveness: true107 108body: |109 bb.0:110 liveins: $r1111 ;CHECK-LABEL: name: CheckAddrModeT2_ldrex112 ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]113 ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[LDREX:[0-9]+]]114 ;CHECK-NEXT: $r1 = t2LDREX $sp, 254, 14 /* CC::al */, $noreg115 $r0 = tMOVr $r1, 14, $noreg116 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp117 $r1 = t2LDREX $sp, 0, 14, $noreg118 $r1 = t2LDREX $sp, 8, 14, $noreg119 $r1 = t2LDREX $sp, 253, 14, $noreg120 $r1 = t2LDREX $sp, 254, 14, $noreg121 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp122 $r1 = t2LDREX $sp, 0, 14, $noreg123 $r1 = t2LDREX $sp, 8, 14, $noreg124 $r1 = t2LDREX $sp, 253, 14, $noreg125 $r1 = t2LDREX $sp, 254, 14, $noreg126 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp127 $r1 = t2LDREX $sp, 0, 14, $noreg128 $r1 = t2LDREX $sp, 8, 14, $noreg129 $r1 = t2LDREX $sp, 253, 14, $noreg130 $r1 = t2LDREX $sp, 254, 14, $noreg131 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp132 $r1 = t2LDREX $sp, 0, 14, $noreg133 $r1 = t2LDREX $sp, 8, 14, $noreg134 $r1 = t2LDREX $sp, 253, 14, $noreg135 $r1 = t2LDREX $sp, 254, 14, $noreg136 BX_RET 14, $noreg137...138---139 140name: CheckAddrModeT1_s141tracksRegLiveness: true142 143body: |144 bb.0:145 liveins: $r0, $r1146 ;CHECK-LABEL: name: CheckAddrModeT1_s147 ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]148 ;CHECK-NEXT: tSTRspi $r0, $sp, 0, 14 /* CC::al */, $noreg149 ;CHECK-NEXT: tSTRspi $r0, $sp, 4, 14 /* CC::al */, $noreg150 ;CHECK-NEXT: tSTRspi $r0, $sp, 253, 14 /* CC::al */, $noreg151 ;CHECK-NEXT: tSTRspi $r0, $sp, 254, 14 /* CC::al */, $noreg152 $r0 = tMOVr $r1, 14, $noreg153 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp154 tSTRspi $r0, $sp, 0, 14, $noreg155 tSTRspi $r0, $sp, 4, 14, $noreg156 tSTRspi $r0, $sp, 253, 14, $noreg157 tSTRspi $r0, $sp, 254, 14, $noreg158 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp159 tSTRspi $r0, $sp, 0, 14, $noreg160 tSTRspi $r0, $sp, 4, 14, $noreg161 tSTRspi $r0, $sp, 253, 14, $noreg162 tSTRspi $r0, $sp, 254, 14, $noreg163 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp164 tSTRspi $r0, $sp, 0, 14, $noreg165 tSTRspi $r0, $sp, 4, 14, $noreg166 tSTRspi $r0, $sp, 253, 14, $noreg167 tSTRspi $r0, $sp, 254, 14, $noreg168 tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp169 tSTRspi $r0, $sp, 0, 14, $noreg170 tSTRspi $r0, $sp, 4, 14, $noreg171 tSTRspi $r0, $sp, 253, 14, $noreg172 tSTRspi $r0, $sp, 254, 14, $noreg173 BX_RET 14, $noreg174...175---176 177name: foo178tracksRegLiveness: true179body: |180 bb.0:181 liveins: $lr182 183 BX_RET 14, $noreg184 185 ;CHECK: name: OUTLINED_FUNCTION_[[LDREX]]186 ;CHECK: $r1 = t2LDREX $sp, 0, 14 /* CC::al */, $noreg187 ;CHECK-NEXT: $r1 = t2LDREX $sp, 8, 14 /* CC::al */, $noreg188 ;CHECK-NEXT: $r1 = t2LDREX $sp, 253, 14 /* CC::al */, $noreg189 ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg190 191 ;CHECK: name: OUTLINED_FUNCTION_[[I8]]192 ;CHECK: t2STRHT $r0, $sp, 0, 14 /* CC::al */, $noreg193 ;CHECK-NEXT: t2STRHT $r0, $sp, 4, 14 /* CC::al */, $noreg194 ;CHECK-NEXT: t2STRHT $r0, $sp, 247, 14 /* CC::al */, $noreg195 ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg196 197 ;CHECK: name: OUTLINED_FUNCTION_[[I8S4]]198 ;CHECK: t2STRDi8 $r0, $r1, $sp, 0, 14 /* CC::al */, $noreg199 ;CHECK-NEXT: t2STRDi8 $r0, $r1, $sp, 8, 14 /* CC::al */, $noreg200 ;CHECK-NEXT: t2STRDi8 $r0, $r1, $sp, 1012, 14 /* CC::al */, $noreg201 ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $nore202 203 ;CHECK: name: OUTLINED_FUNCTION_[[I12]]204 ;CHECK: $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg205 ;CHECK-NEXT: $r0 = t2LDRi12 $sp, 4, 14 /* CC::al */, $noreg206 ;CHECK-NEXT: $r0 = t2LDRi12 $sp, 4086, 14 /* CC::al */, $noreg207 ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg208 209 ;CHECK: name: OUTLINED_FUNCTION_[[SHARED]]210 ;CHECK: $r0 = tMOVr killed $r1, 14 /* CC::al */, $noreg211 ;CHECK-NEXT: tTAILJMPdND @foo, 14 /* CC::al */, $noreg, implicit $sp212