1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=arm-- -run-pass=machine-outliner -verify-machineinstrs \ 3# RUN: %s -o - | FileCheck %s 4 5--- | 6 define void @outline_default_arm() #0 { ret void } 7 define void @outline_default_thumb() #1 { ret void } 8 define void @outline_default_KO_stack_arm() #0 { ret void } 9 define void @outline_default_KO_stack_thumb() #0 { ret void } 10 declare void @bar() 11 12 attributes #0 = { minsize optsize } 13 attributes #1 = { minsize optsize "target-features"="+armv7-a,+thumb-mode" } 14... 15--- 16 17name: outline_default_arm 18tracksRegLiveness: true 19body: | 20 ; CHECK-LABEL: name: outline_default_arm 21 ; CHECK: bb.0: 22 ; CHECK: liveins: $lr 23 ; CHECK: early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg 24 ; CHECK: BL @OUTLINED_FUNCTION_0 25 ; CHECK: $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg 26 ; CHECK: bb.1: 27 ; CHECK: liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 28 ; CHECK: early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg 29 ; CHECK: BL @OUTLINED_FUNCTION_0 30 ; CHECK: $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg 31 ; CHECK: bb.2: 32 ; CHECK: liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 33 ; CHECK: early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg 34 ; CHECK: BL @OUTLINED_FUNCTION_0 35 ; CHECK: $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg 36 ; CHECK: bb.3: 37 ; CHECK: liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 38 ; CHECK: $r2 = MOVr $lr, 14 /* CC::al */, $noreg, $noreg 39 ; CHECK: BX_RET 14 /* CC::al */, $noreg 40 bb.0: 41 liveins: $lr 42 $r0 = MOVi 1, 14, $noreg, $noreg 43 $r1 = MOVi 1, 14, $noreg, $noreg 44 $r2 = MOVi 1, 14, $noreg, $noreg 45 $r3 = MOVi 1, 14, $noreg, $noreg 46 $r4 = MOVi 1, 14, $noreg, $noreg 47 $r5 = MOVi 1, 14, $noreg, $noreg 48 bb.1: 49 liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 50 $r0 = MOVi 1, 14, $noreg, $noreg 51 $r1 = MOVi 1, 14, $noreg, $noreg 52 $r2 = MOVi 1, 14, $noreg, $noreg 53 $r3 = MOVi 1, 14, $noreg, $noreg 54 $r4 = MOVi 1, 14, $noreg, $noreg 55 $r5 = MOVi 1, 14, $noreg, $noreg 56 bb.2: 57 liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 58 $r0 = MOVi 1, 14, $noreg, $noreg 59 $r1 = MOVi 1, 14, $noreg, $noreg 60 $r2 = MOVi 1, 14, $noreg, $noreg 61 $r3 = MOVi 1, 14, $noreg, $noreg 62 $r4 = MOVi 1, 14, $noreg, $noreg 63 $r5 = MOVi 1, 14, $noreg, $noreg 64 bb.3: 65 liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 66 $r2 = MOVr $lr, 14, $noreg, $noreg 67 BX_RET 14, $noreg 68... 69--- 70 71name: outline_default_thumb 72tracksRegLiveness: true 73body: | 74 ; CHECK-LABEL: name: outline_default_thumb 75 ; CHECK: bb.0: 76 ; CHECK: liveins: $lr 77 ; CHECK: early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg 78 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_1 79 ; CHECK: $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg 80 ; CHECK: bb.1: 81 ; CHECK: liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 82 ; CHECK: early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg 83 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_1 84 ; CHECK: $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg 85 ; CHECK: bb.2: 86 ; CHECK: liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 87 ; CHECK: early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg 88 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_1 89 ; CHECK: $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg 90 ; CHECK: bb.3: 91 ; CHECK: liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 92 ; CHECK: $r2 = tMOVr $lr, 14 /* CC::al */, $noreg 93 ; CHECK: tBX_RET 14 /* CC::al */, $noreg 94 bb.0: 95 liveins: $lr 96 $r0 = t2MOVi 1, 14, $noreg, $noreg 97 $r1 = t2MOVi 1, 14, $noreg, $noreg 98 $r2 = t2MOVi 1, 14, $noreg, $noreg 99 $r3 = t2MOVi 1, 14, $noreg, $noreg 100 bb.1: 101 liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 102 $r0 = t2MOVi 1, 14, $noreg, $noreg 103 $r1 = t2MOVi 1, 14, $noreg, $noreg 104 $r2 = t2MOVi 1, 14, $noreg, $noreg 105 $r3 = t2MOVi 1, 14, $noreg, $noreg 106 bb.2: 107 liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 108 $r0 = t2MOVi 1, 14, $noreg, $noreg 109 $r1 = t2MOVi 1, 14, $noreg, $noreg 110 $r2 = t2MOVi 1, 14, $noreg, $noreg 111 $r3 = t2MOVi 1, 14, $noreg, $noreg 112 bb.3: 113 liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 114 $r2 = tMOVr $lr, 14, $noreg 115 tBX_RET 14, $noreg 116... 117--- 118 119name: outline_default_KO_stack_arm 120tracksRegLiveness: true 121body: | 122 ; CHECK-LABEL: name: outline_default_KO_stack_arm 123 ; CHECK: bb.0: 124 ; CHECK: liveins: $lr 125 ; CHECK: $r0 = LDRi12 $sp, 0, 14 /* CC::al */, $noreg 126 ; CHECK: $r1 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 127 ; CHECK: $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 128 ; CHECK: $r3 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 129 ; CHECK: $r4 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 130 ; CHECK: $r5 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 131 ; CHECK: bb.1: 132 ; CHECK: liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 133 ; CHECK: $r0 = LDRi12 $sp, 0, 14 /* CC::al */, $noreg 134 ; CHECK: $r1 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 135 ; CHECK: $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 136 ; CHECK: $r3 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 137 ; CHECK: $r4 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 138 ; CHECK: $r5 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 139 ; CHECK: bb.2: 140 ; CHECK: liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11 141 ; CHECK: $r0 = LDRi12 $sp, 0, 14 /* CC::al */, $noreg 142 ; CHECK: $r1 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 143 ; CHECK: $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 144 ; CHECK: $r3 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 145 ; CHECK: $r4 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 146 ; CHECK: $r5 = MOVi 3, 14 /* CC::al */, $noreg, $noreg 147 ; CHECK: bb.3: 148 ; CHECK: liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11 149 ; CHECK: $r2 = MOVr $lr, 14 /* CC::al */, $noreg, $noreg 150 ; CHECK: BX_RET 14 /* CC::al */, $noreg 151 bb.0: 152 liveins: $lr 153 $r0 = LDRi12 $sp, 0, 14, $noreg 154 $r1 = MOVi 3, 14, $noreg, $noreg 155 $r2 = MOVi 3, 14, $noreg, $noreg 156 $r3 = MOVi 3, 14, $noreg, $noreg 157 $r4 = MOVi 3, 14, $noreg, $noreg 158 $r5 = MOVi 3, 14, $noreg, $noreg 159 bb.1: 160 liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 161 $r0 = LDRi12 $sp, 0, 14, $noreg 162 $r1 = MOVi 3, 14, $noreg, $noreg 163 $r2 = MOVi 3, 14, $noreg, $noreg 164 $r3 = MOVi 3, 14, $noreg, $noreg 165 $r4 = MOVi 3, 14, $noreg, $noreg 166 $r5 = MOVi 3, 14, $noreg, $noreg 167 bb.2: 168 liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11 169 $r0 = LDRi12 $sp, 0, 14, $noreg 170 $r1 = MOVi 3, 14, $noreg, $noreg 171 $r2 = MOVi 3, 14, $noreg, $noreg 172 $r3 = MOVi 3, 14, $noreg, $noreg 173 $r4 = MOVi 3, 14, $noreg, $noreg 174 $r5 = MOVi 3, 14, $noreg, $noreg 175 bb.3: 176 liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11 177 $r2 = MOVr $lr, 14, $noreg, $noreg 178 BX_RET 14, $noreg 179... 180--- 181 182name: outline_default_KO_stack_thumb 183tracksRegLiveness: true 184body: | 185 ; CHECK-LABEL: name: outline_default_KO_stack_thumb 186 ; CHECK: bb.0: 187 ; CHECK: liveins: $lr 188 ; CHECK: $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg 189 ; CHECK: $r1 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 190 ; CHECK: $r2 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 191 ; CHECK: $r3 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 192 ; CHECK: bb.1: 193 ; CHECK: liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 194 ; CHECK: $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg 195 ; CHECK: $r1 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 196 ; CHECK: $r2 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 197 ; CHECK: $r3 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 198 ; CHECK: bb.2: 199 ; CHECK: liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 200 ; CHECK: $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg 201 ; CHECK: $r1 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 202 ; CHECK: $r2 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 203 ; CHECK: $r3 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg 204 ; CHECK: bb.3: 205 ; CHECK: liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 206 ; CHECK: $r2 = tMOVr $lr, 14 /* CC::al */, $noreg 207 ; CHECK: tBX_RET 14 /* CC::al */, $noreg 208 bb.0: 209 liveins: $lr 210 $r0 = t2LDRi12 $sp, 0, 14, $noreg 211 $r1 = t2MOVi 3, 14, $noreg, $noreg 212 $r2 = t2MOVi 3, 14, $noreg, $noreg 213 $r3 = t2MOVi 3, 14, $noreg, $noreg 214 bb.1: 215 liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 216 $r0 = t2LDRi12 $sp, 0, 14, $noreg 217 $r1 = t2MOVi 3, 14, $noreg, $noreg 218 $r2 = t2MOVi 3, 14, $noreg, $noreg 219 $r3 = t2MOVi 3, 14, $noreg, $noreg 220 bb.2: 221 liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 222 $r0 = t2LDRi12 $sp, 0, 14, $noreg 223 $r1 = t2MOVi 3, 14, $noreg, $noreg 224 $r2 = t2MOVi 3, 14, $noreg, $noreg 225 $r3 = t2MOVi 3, 14, $noreg, $noreg 226 bb.3: 227 liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 228 $r2 = tMOVr $lr, 14, $noreg 229 tBX_RET 14, $noreg 230 231 232 ; CHECK-LABEL: name: OUTLINED_FUNCTION_0 233 ; CHECK: bb.0: 234 ; CHECK: liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11 235 ; CHECK: $r0 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 236 ; CHECK: $r1 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 237 ; CHECK: $r2 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 238 ; CHECK: $r3 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 239 ; CHECK: $r4 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 240 ; CHECK: $r5 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 241 ; CHECK: MOVPCLR 14 /* CC::al */, $noreg 242 243 ; CHECK-LABEL: name: OUTLINED_FUNCTION_1 244 ; CHECK: bb.0: 245 ; CHECK: liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11 246 ; CHECK: $r0 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 247 ; CHECK: $r1 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 248 ; CHECK: $r2 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 249 ; CHECK: $r3 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 250 ; CHECK: tBX_RET 14 /* CC::al */, $noreg 251 252 253 254