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_save_reg_arm() #0 { ret void } 7 define void @outline_save_reg_thumb() #1 { ret void } 8 declare void @z() 9 10 attributes #0 = { minsize optsize } 11 attributes #1 = { minsize optsize "target-features"="+armv7-a,+thumb-mode" } 12... 13--- 14 15name: outline_save_reg_arm 16tracksRegLiveness: true 17body: | 18 ; CHECK-LABEL: name: outline_save_reg_arm 19 ; CHECK: bb.0: 20 ; CHECK: liveins: $lr 21 ; CHECK: $r6 = MOVr killed $lr, 14 /* CC::al */, $noreg, $noreg 22 ; CHECK: BL @OUTLINED_FUNCTION_1 23 ; CHECK: $lr = MOVr killed $r6, 14 /* CC::al */, $noreg, $noreg 24 ; CHECK: bb.1: 25 ; CHECK: liveins: $lr 26 ; CHECK: $r6 = MOVr killed $lr, 14 /* CC::al */, $noreg, $noreg 27 ; CHECK: BL @OUTLINED_FUNCTION_1 28 ; CHECK: $lr = MOVr killed $r6, 14 /* CC::al */, $noreg, $noreg 29 ; CHECK: bb.2: 30 ; CHECK: liveins: $lr 31 ; CHECK: early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg 32 ; CHECK: BL @OUTLINED_FUNCTION_1 33 ; CHECK: $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg 34 ; CHECK: bb.3: 35 ; CHECK: liveins: $lr, $r0, $r6, $r7, $r8, $r9, $r10, $r11 36 ; CHECK: $r6 = MOVr killed $lr, 14 /* CC::al */, $noreg, $noreg 37 ; CHECK: BL @OUTLINED_FUNCTION_1 38 ; CHECK: $lr = MOVr killed $r6, 14 /* CC::al */, $noreg, $noreg 39 ; CHECK: bb.4: 40 ; CHECK: liveins: $lr 41 ; CHECK: $r2 = MOVr $lr, 14 /* CC::al */, $noreg, $noreg 42 ; CHECK: BX_RET 14 /* CC::al */, $noreg 43 bb.0: 44 liveins: $lr 45 $r0 = MOVi 1, 14, $noreg, $noreg 46 $r1 = MOVi 1, 14, $noreg, $noreg 47 $r2 = MOVi 1, 14, $noreg, $noreg 48 $r3 = MOVi 1, 14, $noreg, $noreg 49 $r4 = MOVi 1, 14, $noreg, $noreg 50 $r5 = MOVi 1, 14, $noreg, $noreg 51 bb.1: 52 liveins: $lr 53 $r0 = MOVi 1, 14, $noreg, $noreg 54 $r1 = MOVi 1, 14, $noreg, $noreg 55 $r2 = MOVi 1, 14, $noreg, $noreg 56 $r3 = MOVi 1, 14, $noreg, $noreg 57 $r4 = MOVi 1, 14, $noreg, $noreg 58 $r5 = MOVi 1, 14, $noreg, $noreg 59 bb.2: 60 liveins: $lr 61 $r0 = MOVi 1, 14, $noreg, $noreg 62 $r1 = MOVi 1, 14, $noreg, $noreg 63 $r2 = MOVi 1, 14, $noreg, $noreg 64 $r3 = MOVi 1, 14, $noreg, $noreg 65 $r4 = MOVi 1, 14, $noreg, $noreg 66 $r5 = MOVi 1, 14, $noreg, $noreg 67 bb.3: 68 liveins: $lr, $r0, $r6, $r7, $r8, $r9, $r10, $r11 69 $r0 = MOVi 1, 14, $noreg, $noreg 70 $r1 = MOVi 1, 14, $noreg, $noreg 71 $r2 = MOVi 1, 14, $noreg, $noreg 72 $r3 = MOVi 1, 14, $noreg, $noreg 73 $r4 = MOVi 1, 14, $noreg, $noreg 74 $r5 = MOVi 1, 14, $noreg, $noreg 75 bb.4: 76 liveins: $lr 77 $r2 = MOVr $lr, 14, $noreg, $noreg 78 BX_RET 14, $noreg 79... 80--- 81 82name: outline_save_reg_thumb 83tracksRegLiveness: true 84body: | 85 ; CHECK-LABEL: name: outline_save_reg_thumb 86 ; CHECK: bb.0: 87 ; CHECK: liveins: $lr 88 ; CHECK: $r6 = tMOVr killed $lr, 14 /* CC::al */, $noreg 89 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0 90 ; CHECK: $lr = tMOVr killed $r6, 14 /* CC::al */, $noreg 91 ; CHECK: bb.1: 92 ; CHECK: liveins: $lr 93 ; CHECK: $r6 = tMOVr killed $lr, 14 /* CC::al */, $noreg 94 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0 95 ; CHECK: $lr = tMOVr killed $r6, 14 /* CC::al */, $noreg 96 ; CHECK: bb.2: 97 ; CHECK: liveins: $lr 98 ; CHECK: early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg 99 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0 100 ; CHECK: $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg 101 ; CHECK: bb.3: 102 ; CHECK: liveins: $lr, $r0, $r6, $r7 103 ; CHECK: $r6 = tMOVr killed $lr, 14 /* CC::al */, $noreg 104 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0 105 ; CHECK: $lr = tMOVr killed $r6, 14 /* CC::al */, $noreg 106 ; CHECK: bb.4: 107 ; CHECK: liveins: $lr 108 ; CHECK: $r2 = tMOVr $lr, 14 /* CC::al */, $noreg 109 ; CHECK: tBX_RET 14 /* CC::al */, $noreg 110 bb.0: 111 liveins: $lr 112 $r0 = t2MOVi 1, 14, $noreg, $noreg 113 $r1 = t2MOVi 1, 14, $noreg, $noreg 114 $r2 = t2MOVi 1, 14, $noreg, $noreg 115 $r3 = t2MOVi 1, 14, $noreg, $noreg 116 $r4 = t2MOVi 1, 14, $noreg, $noreg 117 $r5 = t2MOVi 1, 14, $noreg, $noreg 118 bb.1: 119 liveins: $lr 120 $r0 = t2MOVi 1, 14, $noreg, $noreg 121 $r1 = t2MOVi 1, 14, $noreg, $noreg 122 $r2 = t2MOVi 1, 14, $noreg, $noreg 123 $r3 = t2MOVi 1, 14, $noreg, $noreg 124 $r4 = t2MOVi 1, 14, $noreg, $noreg 125 $r5 = t2MOVi 1, 14, $noreg, $noreg 126 bb.2: 127 liveins: $lr 128 $r0 = t2MOVi 1, 14, $noreg, $noreg 129 $r1 = t2MOVi 1, 14, $noreg, $noreg 130 $r2 = t2MOVi 1, 14, $noreg, $noreg 131 $r3 = t2MOVi 1, 14, $noreg, $noreg 132 $r4 = t2MOVi 1, 14, $noreg, $noreg 133 $r5 = t2MOVi 1, 14, $noreg, $noreg 134 bb.3: 135 liveins: $lr, $r0, $r6, $r7, $r8, $r9, $r10, $r11 136 $r0 = t2MOVi 1, 14, $noreg, $noreg 137 $r1 = t2MOVi 1, 14, $noreg, $noreg 138 $r2 = t2MOVi 1, 14, $noreg, $noreg 139 $r3 = t2MOVi 1, 14, $noreg, $noreg 140 $r4 = t2MOVi 1, 14, $noreg, $noreg 141 $r5 = t2MOVi 1, 14, $noreg, $noreg 142 bb.4: 143 liveins: $lr 144 $r2 = tMOVr $lr, 14, $noreg 145 tBX_RET 14, $noreg 146 147 ; CHECK-LABEL: name: OUTLINED_FUNCTION_0 148 ; CHECK: bb.0: 149 ; CHECK: liveins: $lr 150 ; CHECK: $r0 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 151 ; CHECK: $r1 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 152 ; CHECK: $r2 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 153 ; CHECK: $r3 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 154 ; CHECK: $r4 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 155 ; CHECK: $r5 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg 156 ; CHECK: tBX_RET 14 /* CC::al */, $noreg 157 158 ; CHECK-LABEL: name: OUTLINED_FUNCTION_1 159 ; CHECK: bb.0: 160 ; CHECK: liveins: $lr 161 ; CHECK: $r0 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 162 ; CHECK: $r1 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 163 ; CHECK: $r2 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 164 ; CHECK: $r3 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 165 ; CHECK: $r4 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 166 ; CHECK: $r5 = MOVi 1, 14 /* CC::al */, $noreg, $noreg 167 ; CHECK: MOVPCLR 14 /* CC::al */, $noreg 168 169