1# RUN: llc -mtriple=mipsel-unknown-linux-gnu -mattr=+micromips -mcpu=mips32r2 \ 2# RUN: -verify-machineinstrs -run-pass micromips-reduce-size \ 3# RUN: %s -o - | FileCheck %s 4 5--- | 6 define void @f1(i32* %adr, i32 %val) { ret void } 7 define void @f2(i32* %adr, i32 %val) { ret void } 8 define void @f3(i32* %adr, i32 %val) { ret void } 9 define void @f4(i32* %adr, i32 %val) { ret void } 10 11 declare i32* @f() 12 13 ; Function Attrs: nounwind 14 declare void @llvm.stackprotector(i8*, i8**) 15... 16--- 17# CHECK-LABEL: name: f1 18# CHECK-NOT: SWP_MM 19# CHECK-NOT: LWP_MM 20name: f1 21alignment: 4 22exposesReturnsTwice: false 23legalized: false 24regBankSelected: false 25selected: false 26tracksRegLiveness: true 27registers: 28liveins: 29 - { reg: '$a1', virtual-reg: '' } 30frameInfo: 31 isFrameAddressTaken: false 32 isReturnAddressTaken: false 33 hasStackMap: false 34 hasPatchPoint: false 35 stackSize: 24 36 offsetAdjustment: 0 37 maxAlignment: 4 38 adjustsStack: true 39 hasCalls: true 40 stackProtector: '' 41 maxCallFrameSize: 16 42 hasOpaqueSPAdjustment: false 43 hasVAStart: false 44 hasMustTailInVarArgFunc: false 45 savePoint: '' 46 restorePoint: '' 47fixedStack: 48stack: 49 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 50 stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true, 51 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 52 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 53 stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true, 54 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 55constants: 56body: | 57 bb.0: 58 liveins: $a1, $ra, $s0 59 60 $sp = ADDiu $sp, -24 61 CFI_INSTRUCTION def_cfa_offset 24 62 SW killed $ra, $sp, 20 :: (store 4 into %stack.0) 63 SW killed $s0, $sp, 16 :: (store 4 into %stack.1) 64 CFI_INSTRUCTION offset $ra_64, -4 65 CFI_INSTRUCTION offset $s0_64, -8 66 $s0 = MOVE16_MM $a1 67 JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0 68 $v0 = MOVE16_MM killed $s0 69 $s0 = LW $sp, 16 :: (load 4 from %stack.1) 70 $ra = LW $sp, 20 :: (load 4 from %stack.0) 71 $sp = ADDiu $sp, 24 72 PseudoReturn undef $ra, implicit killed $v0 73 74... 75--- 76# CHECK-LABEL: name: f2 77# CHECK-NOT: SWP_MM 78# CHECK-NOT: LWP_MM 79name: f2 80alignment: 4 81exposesReturnsTwice: false 82legalized: false 83regBankSelected: false 84selected: false 85tracksRegLiveness: true 86registers: 87liveins: 88 - { reg: '$a1', virtual-reg: '' } 89frameInfo: 90 isFrameAddressTaken: false 91 isReturnAddressTaken: false 92 hasStackMap: false 93 hasPatchPoint: false 94 stackSize: 24 95 offsetAdjustment: 0 96 maxAlignment: 4 97 adjustsStack: true 98 hasCalls: true 99 stackProtector: '' 100 maxCallFrameSize: 16 101 hasOpaqueSPAdjustment: false 102 hasVAStart: false 103 hasMustTailInVarArgFunc: false 104 savePoint: '' 105 restorePoint: '' 106fixedStack: 107stack: 108 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 109 stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true, 110 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 111 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 112 stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true, 113 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 114constants: 115body: | 116 bb.0: 117 liveins: $a1, $ra, $s0 118 119 $sp = ADDiu $sp, -24 120 CFI_INSTRUCTION def_cfa_offset 24 121 SW_MM killed $ra, $sp, 20 :: (store 4 into %stack.0) 122 SW_MM killed $s0, $sp, 16 :: (store 4 into %stack.1) 123 CFI_INSTRUCTION offset $ra_64, -4 124 CFI_INSTRUCTION offset $s0_64, -8 125 $s0 = MOVE16_MM $a1 126 JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0 127 $v0 = MOVE16_MM killed $s0 128 $s0 = LW_MM $sp, 16 :: (load 4 from %stack.1) 129 $ra = LW_MM $sp, 20 :: (load 4 from %stack.0) 130 $sp = ADDiu $sp, 24 131 PseudoReturn undef $ra, implicit killed $v0 132 133... 134--- 135# CHECK-LABEL: name: f3 136# CHECK-NOT: SWP_MM 137# CHECK-NOT: LWP_MM 138name: f3 139alignment: 4 140exposesReturnsTwice: false 141legalized: false 142regBankSelected: false 143selected: false 144tracksRegLiveness: true 145registers: 146liveins: 147 - { reg: '$a1', virtual-reg: '' } 148frameInfo: 149 isFrameAddressTaken: false 150 isReturnAddressTaken: false 151 hasStackMap: false 152 hasPatchPoint: false 153 stackSize: 24 154 offsetAdjustment: 0 155 maxAlignment: 4 156 adjustsStack: true 157 hasCalls: true 158 stackProtector: '' 159 maxCallFrameSize: 16 160 hasOpaqueSPAdjustment: false 161 hasVAStart: false 162 hasMustTailInVarArgFunc: false 163 savePoint: '' 164 restorePoint: '' 165fixedStack: 166stack: 167 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 168 stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true, 169 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 170 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 171 stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true, 172 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 173constants: 174body: | 175 bb.0: 176 liveins: $a1, $ra, $s0 177 178 $sp = ADDiu $sp, -24 179 CFI_INSTRUCTION def_cfa_offset 24 180 SW_MM killed $ra, $sp, 20 :: (store 4 into %stack.0) 181 SW killed $s0, $sp, 16 :: (store 4 into %stack.1) 182 CFI_INSTRUCTION offset $ra_64, -4 183 CFI_INSTRUCTION offset $s0_64, -8 184 $s0 = MOVE16_MM $a1 185 JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0 186 $v0 = MOVE16_MM killed $s0 187 $s0 = LW_MM $sp, 16 :: (load 4 from %stack.1) 188 $ra = LW $sp, 20 :: (load 4 from %stack.0) 189 $sp = ADDiu $sp, 24 190 PseudoReturn undef $ra, implicit killed $v0 191 192... 193--- 194# CHECK-LABEL: name: f4 195# CHECK-NOT: SWP_MM 196# CHECK-NOT: LWP_MM 197name: f4 198alignment: 4 199exposesReturnsTwice: false 200legalized: false 201regBankSelected: false 202selected: false 203tracksRegLiveness: true 204registers: 205liveins: 206 - { reg: '$a1', virtual-reg: '' } 207frameInfo: 208 isFrameAddressTaken: false 209 isReturnAddressTaken: false 210 hasStackMap: false 211 hasPatchPoint: false 212 stackSize: 24 213 offsetAdjustment: 0 214 maxAlignment: 4 215 adjustsStack: true 216 hasCalls: true 217 stackProtector: '' 218 maxCallFrameSize: 16 219 hasOpaqueSPAdjustment: false 220 hasVAStart: false 221 hasMustTailInVarArgFunc: false 222 savePoint: '' 223 restorePoint: '' 224fixedStack: 225stack: 226 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, 227 stack-id: default, callee-saved-register: '$ra', callee-saved-restored: true, 228 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 229 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, 230 stack-id: default, callee-saved-register: '$s0', callee-saved-restored: true, 231 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 232constants: 233body: | 234 bb.0: 235 liveins: $a1, $ra, $s0 236 237 $sp = ADDiu $sp, -24 238 CFI_INSTRUCTION def_cfa_offset 24 239 SW killed $ra, $sp, 20 :: (store 4 into %stack.0) 240 SW_MM killed $s0, $sp, 16 :: (store 4 into %stack.1) 241 CFI_INSTRUCTION offset $ra_64, -4 242 CFI_INSTRUCTION offset $s0_64, -8 243 $s0 = MOVE16_MM $a1 244 JAL @f, csr_o32, implicit-def dead $ra, implicit-def $sp, implicit-def dead $v0 245 $v0 = MOVE16_MM killed $s0 246 $s0 = LW $sp, 16 :: (load 4 from %stack.1) 247 $ra = LW_MM $sp, 20 :: (load 4 from %stack.0) 248 $sp = ADDiu $sp, 24 249 PseudoReturn undef $ra, implicit killed $v0 250 251... 252 253