1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3 2# RUN: llc -run-pass=cfi-fixup %s -o - | FileCheck %s 3--- | 4 source_filename = "cfi-fixup.ll" 5 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 6 target triple = "aarch64-linux" 7 8 define i32 @f(i32 %x) #0 { 9 entry: 10 %p = alloca i8, i32 30000, align 1 11 switch i32 %x, label %if.end7 [ 12 i32 0, label %return 13 i32 1, label %if.then2 14 i32 2, label %if.then5 15 ] 16 17 if.then2: ; preds = %entry 18 %call = tail call i32 @g1(i32 1) 19 %add = add nsw i32 %call, 1 20 br label %return 21 22 if.then5: ; preds = %entry 23 %call6 = tail call i32 @g0(i32 2) 24 %sub = sub nsw i32 1, %call6 25 br label %return 26 27 if.end7: ; preds = %entry 28 br label %return 29 30 return: ; preds = %if.end7, %if.then5, %if.then2, %entry 31 %retval.0 = phi i32 [ %add, %if.then2 ], [ %sub, %if.then5 ], [ 0, %if.end7 ], [ 1, %entry ] 32 ret i32 %retval.0 33 } 34 35 declare i32 @g1(i32) 36 37 declare i32 @g0(i32) 38 39 attributes #0 = { uwtable "probe-stack"="inline-asm" } 40 41... 42--- 43name: f 44alignment: 4 45exposesReturnsTwice: false 46legalized: false 47regBankSelected: false 48selected: false 49failedISel: false 50tracksRegLiveness: true 51hasWinCFI: false 52callsEHReturn: false 53callsUnwindInit: false 54hasEHCatchret: false 55hasEHScopes: false 56hasEHFunclets: false 57isOutlined: false 58debugInstrRef: false 59failsVerification: false 60tracksDebugUserValues: true 61registers: [] 62liveins: 63 - { reg: '$w0', virtual-reg: '' } 64frameInfo: 65 isFrameAddressTaken: false 66 isReturnAddressTaken: false 67 hasStackMap: false 68 hasPatchPoint: false 69 stackSize: 30016 70 offsetAdjustment: 0 71 maxAlignment: 8 72 adjustsStack: true 73 hasCalls: true 74 stackProtector: '' 75 functionContext: '' 76 maxCallFrameSize: 0 77 cvBytesOfCalleeSavedRegisters: 0 78 hasOpaqueSPAdjustment: false 79 hasVAStart: false 80 hasMustTailInVarArgFunc: false 81 hasTailCall: false 82 localFrameSize: 30000 83 savePoint: '' 84 restorePoint: '' 85fixedStack: [] 86stack: 87 - { id: 0, name: p, type: default, offset: -30016, size: 30000, alignment: 1, 88 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 89 local-offset: -30000, debug-info-variable: '', debug-info-expression: '', 90 debug-info-location: '' } 91 - { id: 1, name: '', type: spill-slot, offset: -8, size: 8, alignment: 8, 92 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 93 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 94 - { id: 2, name: '', type: spill-slot, offset: -16, size: 8, alignment: 8, 95 stack-id: default, callee-saved-register: '$fp', callee-saved-restored: true, 96 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 97entry_values: [] 98callSites: [] 99debugValueSubstitutions: [] 100constants: [] 101machineFunctionInfo: 102 hasRedZone: false 103body: | 104 ; CHECK-LABEL: name: f 105 ; CHECK: bb.0.entry: 106 ; CHECK-NEXT: successors: %bb.1(0x80000000) 107 ; CHECK-NEXT: liveins: $w0, $lr, $fp 108 ; CHECK-NEXT: {{ $}} 109 ; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1) 110 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 111 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -8 112 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -16 113 ; CHECK-NEXT: $x9 = frame-setup SUBXri $sp, 7, 12 114 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa $w9, 28688 115 ; CHECK-NEXT: {{ $}} 116 ; CHECK-NEXT: bb.1.entry: 117 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) 118 ; CHECK-NEXT: liveins: $x9 119 ; CHECK-NEXT: {{ $}} 120 ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 1, 12 121 ; CHECK-NEXT: $xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv 122 ; CHECK-NEXT: frame-setup STRXui $xzr, $sp, 0 123 ; CHECK-NEXT: frame-setup Bcc 1, %bb.1, implicit killed $nzcv 124 ; CHECK-NEXT: {{ $}} 125 ; CHECK-NEXT: bb.2.entry: 126 ; CHECK-NEXT: successors: %bb.6(0x20000000), %bb.3(0x60000000) 127 ; CHECK-NEXT: liveins: $w0 128 ; CHECK-NEXT: {{ $}} 129 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_register $wsp 130 ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 1328, 0 131 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 30016 132 ; CHECK-NEXT: CFI_INSTRUCTION remember_state 133 ; CHECK-NEXT: frame-setup STRXui $xzr, $sp, 0 134 ; CHECK-NEXT: CBZW renamable $w0, %bb.6 135 ; CHECK-NEXT: {{ $}} 136 ; CHECK-NEXT: bb.3.entry: 137 ; CHECK-NEXT: successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555) 138 ; CHECK-NEXT: liveins: $w0 139 ; CHECK-NEXT: {{ $}} 140 ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv 141 ; CHECK-NEXT: Bcc 0, %bb.7, implicit killed $nzcv 142 ; CHECK-NEXT: {{ $}} 143 ; CHECK-NEXT: bb.4.entry: 144 ; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.8(0x40000000) 145 ; CHECK-NEXT: liveins: $w0 146 ; CHECK-NEXT: {{ $}} 147 ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv 148 ; CHECK-NEXT: Bcc 1, %bb.8, implicit killed $nzcv 149 ; CHECK-NEXT: {{ $}} 150 ; CHECK-NEXT: bb.5.if.then2: 151 ; CHECK-NEXT: liveins: $w0 152 ; CHECK-NEXT: {{ $}} 153 ; CHECK-NEXT: BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 154 ; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 155 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12 156 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 157 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0 158 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16 159 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 160 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 161 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30 162 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29 163 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 164 ; CHECK-NEXT: {{ $}} 165 ; CHECK-NEXT: bb.6: 166 ; CHECK-NEXT: CFI_INSTRUCTION restore_state 167 ; CHECK-NEXT: CFI_INSTRUCTION remember_state 168 ; CHECK-NEXT: renamable $w0 = MOVZWi 1, 0 169 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12 170 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 171 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0 172 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16 173 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 174 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 175 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30 176 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29 177 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 178 ; CHECK-NEXT: {{ $}} 179 ; CHECK-NEXT: bb.7.if.then5: 180 ; CHECK-NEXT: liveins: $w0 181 ; CHECK-NEXT: {{ $}} 182 ; CHECK-NEXT: CFI_INSTRUCTION restore_state 183 ; CHECK-NEXT: CFI_INSTRUCTION remember_state 184 ; CHECK-NEXT: BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 185 ; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0 186 ; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 187 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12 188 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 189 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0 190 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16 191 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 192 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 193 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30 194 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29 195 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 196 ; CHECK-NEXT: {{ $}} 197 ; CHECK-NEXT: bb.8.if.end7: 198 ; CHECK-NEXT: CFI_INSTRUCTION restore_state 199 ; CHECK-NEXT: $w0 = ORRWrs $wzr, $wzr, 0 200 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12 201 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 202 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0 203 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16 204 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 205 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 206 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30 207 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29 208 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 209 bb.0.entry: 210 successors: %bb.1(0x80000000) 211 liveins: $w0, $lr, $fp 212 213 early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1) 214 frame-setup CFI_INSTRUCTION def_cfa_offset 16 215 frame-setup CFI_INSTRUCTION offset $w30, -8 216 frame-setup CFI_INSTRUCTION offset $w29, -16 217 $x9 = frame-setup SUBXri $sp, 7, 12 218 frame-setup CFI_INSTRUCTION def_cfa $w9, 28688 219 220 bb.1.entry: 221 successors: %bb.2(0x40000000), %bb.1(0x40000000) 222 liveins: $x9 223 224 $sp = frame-setup SUBXri $sp, 1, 12 225 $xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv 226 frame-setup STRXui $xzr, $sp, 0 227 frame-setup Bcc 1, %bb.1, implicit killed $nzcv 228 229 bb.2.entry: 230 successors: %bb.6(0x20000000), %bb.3(0x60000000) 231 liveins: $w0 232 233 frame-setup CFI_INSTRUCTION def_cfa_register $wsp 234 $sp = frame-setup SUBXri $sp, 1328, 0 235 frame-setup CFI_INSTRUCTION def_cfa_offset 30016 236 frame-setup STRXui $xzr, $sp, 0 237 CBZW renamable $w0, %bb.6 238 239 bb.3.entry: 240 successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555) 241 liveins: $w0 242 243 dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv 244 Bcc 0, %bb.7, implicit killed $nzcv 245 246 bb.4.entry: 247 successors: %bb.5(0x40000000), %bb.8(0x40000000) 248 liveins: $w0 249 250 dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv 251 Bcc 1, %bb.8, implicit killed $nzcv 252 253 bb.5.if.then2: 254 liveins: $w0 255 256 BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 257 renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 258 $sp = frame-destroy ADDXri $sp, 7, 12 259 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 260 $sp = frame-destroy ADDXri $sp, 1328, 0 261 frame-destroy CFI_INSTRUCTION def_cfa_offset 16 262 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 263 frame-destroy CFI_INSTRUCTION def_cfa_offset 0 264 frame-destroy CFI_INSTRUCTION restore $w30 265 frame-destroy CFI_INSTRUCTION restore $w29 266 RET undef $lr, implicit killed $w0 267 268 bb.6: 269 renamable $w0 = MOVZWi 1, 0 270 $sp = frame-destroy ADDXri $sp, 7, 12 271 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 272 $sp = frame-destroy ADDXri $sp, 1328, 0 273 frame-destroy CFI_INSTRUCTION def_cfa_offset 16 274 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 275 frame-destroy CFI_INSTRUCTION def_cfa_offset 0 276 frame-destroy CFI_INSTRUCTION restore $w30 277 frame-destroy CFI_INSTRUCTION restore $w29 278 RET undef $lr, implicit killed $w0 279 280 bb.7.if.then5: 281 liveins: $w0 282 283 BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 284 renamable $w8 = MOVZWi 1, 0 285 $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 286 $sp = frame-destroy ADDXri $sp, 7, 12 287 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 288 $sp = frame-destroy ADDXri $sp, 1328, 0 289 frame-destroy CFI_INSTRUCTION def_cfa_offset 16 290 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 291 frame-destroy CFI_INSTRUCTION def_cfa_offset 0 292 frame-destroy CFI_INSTRUCTION restore $w30 293 frame-destroy CFI_INSTRUCTION restore $w29 294 RET undef $lr, implicit killed $w0 295 296 bb.8.if.end7: 297 $w0 = ORRWrs $wzr, $wzr, 0 298 $sp = frame-destroy ADDXri $sp, 7, 12 299 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344 300 $sp = frame-destroy ADDXri $sp, 1328, 0 301 frame-destroy CFI_INSTRUCTION def_cfa_offset 16 302 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1) 303 frame-destroy CFI_INSTRUCTION def_cfa_offset 0 304 frame-destroy CFI_INSTRUCTION restore $w30 305 frame-destroy CFI_INSTRUCTION restore $w29 306 RET undef $lr, implicit killed $w0 307 308... 309