1# RUN: llc -mtriple=armv7-- -run-pass=prologepilog -run-pass=machine-outliner \ 2# RUN: -verify-machineinstrs %s -o - | FileCheck %s 3 4--- | 5 define void @CheckAddrMode_i12() { ret void } 6 define void @CheckAddrMode3() { ret void } 7 define void @CheckAddrMode5() { ret void } 8 define void @CheckAddrMode5FP16() { ret void } 9 define void @foo() { ret void } 10 11... 12--- 13 14name: CheckAddrMode_i12 15tracksRegLiveness: true 16body: | 17 bb.0: 18 liveins: $r0 19 ; CHECK-LABEL: name: CheckAddrMode_i12 20 ; CHECK: $r1 = MOVr killed $r0, 14 /* CC::al */, $noreg, $noreg 21 ; CHECK-NEXT: BL @foo, implicit-def dead $lr, implicit $sp 22 ; CHECK-NEXT: BL @OUTLINED_FUNCTION_[[I12:[0-9]+]] 23 ; CHECK-NEXT: $r6 = LDRi12 $sp, 4088, 14 /* CC::al */, $noreg 24 $r1 = MOVr killed $r0, 14, $noreg, $noreg 25 BL @foo, implicit-def dead $lr, implicit $sp 26 $r1 = LDRi12 $sp, 0, 14, $noreg 27 $r2 = LDRi12 $sp, 8, 14, $noreg 28 $r5 = LDRi12 $sp, 4086, 14, $noreg 29 $r6 = LDRi12 $sp, 4088, 14, $noreg 30 BL @foo, implicit-def dead $lr, implicit $sp 31 $r1 = LDRi12 $sp, 0, 14, $noreg 32 $r2 = LDRi12 $sp, 8, 14, $noreg 33 $r5 = LDRi12 $sp, 4086, 14, $noreg 34 $r6 = LDRi12 $sp, 4088, 14, $noreg 35 BL @foo, implicit-def dead $lr, implicit $sp 36 $r1 = LDRi12 $sp, 0, 14, $noreg 37 $r2 = LDRi12 $sp, 8, 14, $noreg 38 $r5 = LDRi12 $sp, 4086, 14, $noreg 39 $r6 = LDRi12 $sp, 4088, 14, $noreg 40 BX_RET 14, $noreg 41... 42--- 43 44name: CheckAddrMode3 45tracksRegLiveness: true 46body: | 47 bb.0: 48 liveins: $r1 49 ; CHECK-LABEL: name: CheckAddrMode3 50 ; CHECK: $r0 = MOVr killed $r1, 14 /* CC::al */, $noreg, $noreg 51 ; CHECK-NEXT: BL @foo, implicit-def dead $lr, implicit $sp 52 ; CHECK-NEXT: BL @OUTLINED_FUNCTION_[[I3:[0-9]+]] 53 ; CHECK-NEXT: $r6 = LDRSH $sp, $noreg, 248, 14 /* CC::al */, $noreg 54 $r0 = MOVr killed $r1, 14, $noreg, $noreg 55 BL @foo, implicit-def dead $lr, implicit $sp 56 $r1 = LDRSH $sp, $noreg, 0, 14, $noreg 57 $r2 = LDRSH $sp, $noreg, 8, 14, $noreg 58 $r5 = LDRSH $sp, $noreg, 247, 14, $noreg 59 $r6 = LDRSH $sp, $noreg, 248, 14, $noreg 60 BL @foo, implicit-def dead $lr, implicit $sp 61 $r1 = LDRSH $sp, $noreg, 0, 14, $noreg 62 $r2 = LDRSH $sp, $noreg, 8, 14, $noreg 63 $r5 = LDRSH $sp, $noreg, 247, 14, $noreg 64 $r6 = LDRSH $sp, $noreg, 248, 14, $noreg 65 BL @foo, implicit-def dead $lr, implicit $sp 66 $r1 = LDRSH $sp, $noreg, 0, 14, $noreg 67 $r2 = LDRSH $sp, $noreg, 8, 14, $noreg 68 $r5 = LDRSH $sp, $noreg, 247, 14, $noreg 69 $r6 = LDRSH $sp, $noreg, 248, 14, $noreg 70 BX_RET 14, $noreg 71... 72--- 73 74name: CheckAddrMode5 75tracksRegLiveness: true 76body: | 77 bb.0: 78 liveins: $r2 79 ; CHECK-LABEL: name: CheckAddrMode5 80 ; CHECK: $r0 = MOVr killed $r2, 14 /* CC::al */, $noreg, $noreg 81 ; CHECK-NEXT: BL @foo, implicit-def dead $lr, implicit $sp 82 ; CHECK-NEXT: BL @OUTLINED_FUNCTION_[[I5:[0-9]+]] 83 ; CHECK-NEXT: $d5 = VLDRD $sp, 254, 14 /* CC::al */, $noreg 84 $r0 = MOVr killed $r2, 14, $noreg, $noreg 85 BL @foo, implicit-def dead $lr, implicit $sp 86 $d0 = VLDRD $sp, 0, 14, $noreg 87 $d1 = VLDRD $sp, 8, 14, $noreg 88 $d4 = VLDRD $sp, 253, 14, $noreg 89 $d5 = VLDRD $sp, 254, 14, $noreg 90 BL @foo, implicit-def dead $lr, implicit $sp 91 $d0 = VLDRD $sp, 0, 14, $noreg 92 $d1 = VLDRD $sp, 8, 14, $noreg 93 $d4 = VLDRD $sp, 253, 14, $noreg 94 $d5 = VLDRD $sp, 254, 14, $noreg 95 BL @foo, implicit-def dead $lr, implicit $sp 96 $d0 = VLDRD $sp, 0, 14, $noreg 97 $d1 = VLDRD $sp, 8, 14, $noreg 98 $d4 = VLDRD $sp, 253, 14, $noreg 99 $d5 = VLDRD $sp, 254, 14, $noreg 100 BL @foo, implicit-def dead $lr, implicit $sp 101 $d0 = VLDRD $sp, 0, 14, $noreg 102 $d1 = VLDRD $sp, 8, 14, $noreg 103 $d4 = VLDRD $sp, 253, 14, $noreg 104 $d5 = VLDRD $sp, 254, 14, $noreg 105 BX_RET 14, $noreg 106... 107--- 108 109name: CheckAddrMode5FP16 110tracksRegLiveness: true 111body: | 112 bb.0: 113 liveins: $r3 114 ; CHECK-LABEL: name: CheckAddrMode5FP16 115 ; CHECK: $r0 = MOVr killed $r3, 14 /* CC::al */, $noreg, $noreg 116 ; CHECK-NEXT: BL @foo, implicit-def dead $lr, implicit $sp 117 ; CHECK-NEXT: BL @OUTLINED_FUNCTION_[[I5FP16:[0-9]+]] 118 ; CHECK-NEXT: $s6 = VLDRH $sp, 252, 14, $noreg 119 $r0 = MOVr killed $r3, 14, $noreg, $noreg 120 BL @foo, implicit-def dead $lr, implicit $sp 121 $s1 = VLDRH $sp, 0, 14, $noreg 122 $s2 = VLDRH $sp, 8, 14, $noreg 123 $s5 = VLDRH $sp, 240, 14, $noreg 124 $s6 = VLDRH $sp, 252, 14, $noreg 125 BL @foo, implicit-def dead $lr, implicit $sp 126 $s1 = VLDRH $sp, 0, 14, $noreg 127 $s2 = VLDRH $sp, 8, 14, $noreg 128 $s5 = VLDRH $sp, 240, 14, $noreg 129 $s6 = VLDRH $sp, 252, 14, $noreg 130 BL @foo, implicit-def dead $lr, implicit $sp 131 $s1 = VLDRH $sp, 0, 14, $noreg 132 $s2 = VLDRH $sp, 8, 14, $noreg 133 $s5 = VLDRH $sp, 240, 14, $noreg 134 $s6 = VLDRH $sp, 252, 14, $noreg 135 BL @foo, implicit-def dead $lr, implicit $sp 136 $s1 = VLDRH $sp, 0, 14, $noreg 137 $s2 = VLDRH $sp, 8, 14, $noreg 138 $s5 = VLDRH $sp, 240, 14, $noreg 139 $s6 = VLDRH $sp, 252, 14, $noreg 140 BX_RET 14, $noreg 141... 142--- 143 144name: foo 145tracksRegLiveness: true 146body: | 147 bb.0: 148 liveins: $lr 149 150 BX_RET 14, $noreg 151 152 ;CHECK: name: OUTLINED_FUNCTION_[[I5]] 153 ;CHECK: liveins: $r10, $r9, $r8, $r7, $r6, $r5, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8 154 ;CHECK: $d0 = VLDRD $sp, 0, 14 /* CC::al */, $noreg 155 ;CHECK-NEXT: $d1 = VLDRD $sp, 8, 14 /* CC::al */, $noreg 156 ;CHECK-NEXT: $d4 = VLDRD $sp, 253, 14 /* CC::al */, $noreg 157 ;CHECK-NEXT: BX_RET 14 /* CC::al */, $noreg 158 159 ;CHECK: name: OUTLINED_FUNCTION_[[I5FP16]] 160 ;CHECK: liveins: $r10, $r9, $r8, $r7, $r6, $r5, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8 161 ;CHECK: $s1 = VLDRH $sp, 0, 14, $noreg 162 ;CHECK-NEXT: $s2 = VLDRH $sp, 8, 14, $noreg 163 ;CHECK-NEXT: $s5 = VLDRH $sp, 240, 14, $noreg 164 ;CHECK-NEXT: BX_RET 14 /* CC::al */, $noreg 165 166 ;CHECK: name: OUTLINED_FUNCTION_[[I12]] 167 ;CHECK: liveins: $r10, $r9, $r8, $r7, $d8, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9 168 ;CHECK: $r1 = LDRi12 $sp, 0, 14 /* CC::al */, $noreg 169 ;CHECK-NEXT: $r2 = LDRi12 $sp, 8, 14 /* CC::al */, $noreg 170 ;CHECK-NEXT: $r5 = LDRi12 $sp, 4086, 14 /* CC::al */, $noreg 171 ;CHECK-NEXT: BX_RET 14 /* CC::al */, $noreg 172 173 ;CHECK: name: OUTLINED_FUNCTION_[[I3]] 174 ;CHECK: liveins: $r10, $r9, $r8, $r7, $d8, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9 175 ;CHECK: $r1 = LDRSH $sp, $noreg, 0, 14 /* CC::al */, $noreg 176 ;CHECK-NEXT: $r2 = LDRSH $sp, $noreg, 8, 14 /* CC::al */, $noreg 177 ;CHECK-NEXT: $r5 = LDRSH $sp, $noreg, 247, 14 /* CC::al */, $noreg 178 ;CHECK-NEXT: BX_RET 14 /* CC::al */, $noreg 179